Xamarin Release Build Archirecture - ios

I recently Updated the VS for Mac. After Wards I cannot Select Build Architecture Armv7 + arm64. It allows Arm64 alone. Since my app is not going to be pushed in App Store i do want these s=architecture to be selected as my build configuration. How to sorted out this

You can always manually edit .csproj file and write whatever value you want.

Apple deprecated 32 bit support in iOS 11. See https://learn.microsoft.com/en-us/xamarin/ios/platform/introduction-to-ios11/updating-your-app/architecture-changes
32-bit apps will not launch in iOS 11+ and we actually can't compile the 32 bit slice with newer Xcode. This is why you can't just edit the csproj, you'd need Xcode 9.4 for that.
Even if you don't deploy to the store you shouldn't have any issue with a 64 bit only App.

Related

Warning: "This app will not work with future versions of iOS"

I have an iPad with iOS 10.3 installed. Some apps are triggering a popup warning:
"SomeApp" needs to be updated.
This app will not work with future versions of iOS.
It is something related with 32 or 64 bits? I am using last version of Xcode.
It's probably related to 64bit support. Make sure that in your build settings under architectures ARM64 is present.

Missing 64-bit support for iOS application

I'm getting warning for 64-bit support missing. The whole message is like below:
Missing 64-bit support - Beginning on February 1, 2015 new iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need to follow the same requirements. To enable 64-bit in your project, we recommend using the default Xcode build setting of “Standard architectures” to build a single binary with both 32-bit and 64-bit code.
I've done changes like attached image for Valid Architectures.
If i try to Archive the build with supporting arm64. I'm getting following errors.
If i will remove arm64 from Valid Architectures, it will work fine and submitted successfully to iTunes Connect but i get mail from iTunes that binary is missing 64-bit support.
I have done googling but not able to get exact solution. Please help me for getting out of this issue.
Any help will be surely worth appreciate.
Thanks,
Amazon iOS SDK offers 64bit support since the version 1.7.0
https://aws.amazon.com/releasenotes/iOS/7003308162044672
Simply use their latest version 2.1.0 , and it will compile with arm64 flag.
That means your library is not compiled for 64 bit, arm64 and your app is expecting it,
There should be new version of that library which supports arm64, just check the developer's web site.
http://aws.amazon.com/mobile/sdk/
Simply update valid architectures and add arm64 flag in Xcode it's not the only step that you need to make an application 64-bit compatible.
Your log is telling you that one library at least it has not been compiled for 64-bit. So update your libraries, in particular from the logs I think you need update the Amazon library.

Xamarin Studio submission 64 bit app to appstore

Problem in xamarin Studio submission 64 bit app to appstore
I work with Xamarin Studio. I transform my app with Unified Api and changed my supported architectures to "ARMv7 + AMRv7s + ARM64".
Rebuild and it's ok but when i submission my app to appstore, i receive always:
"Missing 64-bit support - Beginning on February 1, 2015 new iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need to follow the same requirements. To enable 64-bit in your project, we recommend using the default Xcode build setting of “Standard architectures” to build a single binary with both 32-bit and 64-bit code."
I enable 64-bit for AppStore configuration, what's the problem? Can help me?
Given your description I can only guess what could be the problem there, although I've seen quite a few similar issues with ARM64 support.
Check whether the ARM64 architecture is enabled for Release builds (or whatever build configuration you use for submitting to the AppStore)
Check the resulting IPA whether it contains mono binaries with the '32' and '64' suffix
Try a fully clean build (not just clean and build, i.e. checkout your scm repository into a clean directory)
I had to make sure the debug build was set to arm64 as well. Not sure why but this solved it for me.
Do you have a device plugged into the Mac while you're compiling the AppStore build? I've had issues with it when having a device plugged in because it wants to compile for that device only.

iOS 64 bit compatibility

This morning I got an e-mail from Apple saying the following:
Dear Developer,
As we announced in October, beginning February 1, 2015 new iOS apps
submitted to the App Store must include 64-bit support and be built
with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need
to follow the same requirements. To enable 64-bit in your project, we
recommend using the default Xcode build setting of “Standard
architectures” to build a single binary with both 32-bit and 64-bit
code.
If you have any questions, visit the Apple Developer Forums.
Best regards, Apple Developer Technical Support
Now I have a question, how do you ensure that an iOS app IS 64bit compatible?
My build settings look like this:
My Deployment target is iOS 6.0.
I just need to confirm that the app is 64 bit compliant, I am all new to iOS and took over a fairly large project not long ago so I'd rather ask and be 100% sure.
Just to make things a bit clearer, how do you ensure that an iOS app is 64bit compatible? I know you need to set certain build rules such as the one in the image, but I want to know is there any way of knowing that your iOS app is 64 bit compliant. 32 bit iOS apps can run on 64bit hardware so I don't believe checking if the iOS app runs on a device will help.
I believe you could upload a new version and see if you get this message: But I was hoping for a nice option without uploading a new build.
Thanks!
With the settings you have you should end up with arm64 and armv7 in your binary. You won't get armv7s because although it's a valid architecture, it's not included in ARCHS_STANDARD if building on Xcode 6 (See also).
Just because it runs on a 64 bit device, it doesn't mean that it has 64-bit support. 64-bit devices can run 32-bit apps.
To determine whether or not it contains an arm64 chunk, you need to find the application. Go to Xcode preferences, and select the Locations tag. The Derived Data line tells you where files are being built.
Open up a Terminal (Finder->Applications->Utilities->Terminal) and go to that location using the 'cd' command. In my case, my project is stored in ~/MyProject
$ cd ~/MyProject
$ cd build
$ find . -name MyTarget
./build/MyTarget
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/CoreControl
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app.dSYM/Contents/Resources/DWARF/CoreControl
Now we know where the binary is stored (it's the second result), we can check it to see what architectures it contains:
$ dwarfdump ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget
----------------------------------------------------------------------
File: ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget (armv7)
----------------------------------------------------------------------
.debug_info contents:
< EMPTY >
In my case, I only have arm7 built, not arm64.

Xcode 4.5 and iOS 4.2.1 incompatibility

The latest release notes indicates 4.2.1 and lower will not be supported, we now have to use 2 version of Xcode to develop when supporting older devices?? This is going to be difficult to support older devices if we want to develop iOS6 AND support 4.2 and lower.
I don't think Xcode 4.4 will support iOS6. So this is the issue. How would developers easily support these platform without so much hassle?
You can do this, but it requires some minor Xcode hacking, and some sacrifices. Depending on what you mean by "support iOS 6", this may or may not be sufficient for you. If you just want your app to run on iOS 6, then this should work. If you also need your app to incorporate new iOS 6 features, then it won't.
(Note for others who don't have a problem using multiple versions of Xcode: this similar question has answers that do allow you to also use new iOS 6 APIs and directly target armv7s)
See basic instructions on chpwn's blog here (but read the rest of this below, too!)
Basically, you can use Xcode 4.5 to build for iOS 4 and above, but then you can't take advantage of the new iOS 6 only features. So, you're really building for iOS 4 and 5, and assuming that the app will run fine on iOS 6 (which should be true, but you'll need to test this yourself).
You'll need to copy the iOS 5 SDK folder
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk
from an old Xcode installation (which you'll need to keep around briefly, or reinstall to a non-standard location). You'll then set the Deploy Target in your Build Settings to iOS 4.0 (or whatever minimum OS you want). You may need to open the project.pbxproj file in a text editor to set this manually:
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
You'll also need to set the Architectures to armv6 and armv7. You cannot directly also target armv7s. But, that doesn't mean your app won't run on iPhone 5. armv7 executables should run on iPhone 5, simply without any optimizations added in armv7s. It's just that compatibility doesn't work in the other direction (e.g. armv7 executables don't run on an armv6 iPhone 3G).
There's also a step that might be necessary, that's not mentioned in chpwn's blog. You may get these warnings (which really are errors, because Xcode won't generate your executable properly):
warning: no rule to process file '$(PROJECT_DIR)/main.m' of type sourcecode.c.objc for architecture armv6
In order to fix this, you'll need to setup a custom Build Rule for your target that tells Xcode to use LLVM GCC 4.2 to generate armv6 code. Define the rule for files matching the pattern *.[mc]:
This will be a different compiler than the Xcode default, and you may need to adjust some of the syntax in your Objective-C code. Even though many people wanting to do this probably wrote their apps before ARC, it is important to note that LLVM gcc 4.2 does not support ARC.
Finally, you probably will still see warnings from Xcode about iOS deploy targets less than 4.3, and armv6 not being supported. Those, I found, were not problems, and could be ignored:
Running lipo -info on my app executable after this shows the desired result:
lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7
Xcode 4.5 makes iOS 4.3 the earliest supported operating system, which effectively orphans the original iPhone and the 3G.
If you want to support iOS versions earlier than 4.3, you will need to keep around a 4.4 version of Xcode.
To be a bit clearer : you cannot easily (meaning Xcode does not out-of-the-box) support pre-4.3 devices and use iOS 6 features in the same app. That's because iOS 6 features require XCode 4.5 which also sets iOS 4.3 as the minimum supported OS.
So, you have 3 choices :
Continue using XCode 4.4. You'll be able to target pre-4.3 iOS. You won't be able to take advantage of iOS 6 features, but your app should run fine on it assuming you perform adequate testing on actual iOS 6 devices.
Migrate to XCode 4.5. You won't be able to target pre-4.3 iOS, but you'll be able to take advantage of iOS 6 features.
Make two versions your app. Build one version with XCode 4.4 (as in option 1), and the other with 4.5 (as in option 2). From the point of view of distribution, these will be 2 separate apps, they'll each have their own bundle ID, etc. You will have two entries in the app store.
If you are comfortable going beyond what is supported directly by Xcode, see Nate's answer.
The original iPhone and iPhone 3G are the only devices that don't support iOS 5. The iPhone 3G is now 4 years old. You may want to consider dropping support for iOS 4. If you don't want to do that, I think you'll have to develop in two different versions of Xcode.
I assume that the dropped support for iOS 4.2.1 is not the core problem. In fact, I tried to work around this and do the following:
Build the app with iOS 6 SDK, setting deployment target to iOS 4.2.1 (which works).
Pack the app for ad hoc installation and install the app on an iOS 4.2.1 device (iPod touch 2G).
Test the app.
However, installation fails. The reason here is - afaik - not the iOS version. The reason is the architecture. XCode 4.5 no longer allows you to build for armv6. It only builds for armv7. On the other hand: all device which have armv7 or better can run iOS 5. The only devices which do not support armv7 are iPhone, iPhone 3G, iPod touch 1G and iPod touch 2G.
So for me the question is: can you build for armv6 with XCode 4.5 and iOS 6 as base SDK?
Edit: Which you cannot do, because the iOS 6 base SDK is not available for armv6. Right?
Try to set the project settings manually using IPHONEOS_DEPLOYMENT_TARGET=4.0. However, I don't know if there is any side effect.
I think that targeting to 4.3 is the best choice, according to ios version statistics

Resources