I want to build my binary just for 3GS as it contains NEON assembly code, my app only works on 3GS. When I upload the binary to iTunesConnect, it rejects the binary saying that it should be compatible with armv6 as well. Is there any build setting that I can use so that I have a binary which iTunesConnect happily accepts and which runs only on iPhone 3GS(armv7). Please help.
Perhaps this post will help. Instead of picking both armv6 and armv7, specify armv7 to build a smaller binary.
Related
Just wondering if I inlcude ARMv7 only and exclude ARMv7s in my binary if it will still actually run on an iPhone 5?
Thanks
Yes, just think of all the existing apps on the App Store that have only ever been compiled for ARMv7, they all work on the iPhone 5.
Is armv7 an absolute requirement for submission to the app store currently?
The application is being built against the latest xcode, against the latest sdk (5.1) but with the minimum iOS version being 4.2. If we remove armv7 (due to a third party library, please dont ask) can we still submit to the app store with armv6 only?
Thanks
Short answer: Yes
I assume that if you are targeting iOS 4.2+ it includes 2nd gen devices (my iPod touch has 4.2.1 ) ...and those only work with armv6.
In any case...apps that work on armv6 work on armv7.
Now...if you haven't tested your app on 2nd gen device I suggest that you make minimum iOS required to be 4.3 (as in 3rd gen+)
I've been trying to get my app - built in Xcode 4.2 in Snow Leopard, using ARC, targeting iOS 4.0 and up - to install on a 3G, with no luck. I've tried every solution I can find (like this thorough one here: Is it possible to target older iOS versions when using Xcode 4.2 and iOS 5 SDK?) and while I've been able to get the app to run on the phone via Xcode, when I share the app and try to install it through iTunes, I keep getting the same error telling me the app was not installed because it is not compatible with this iPhone. My client is using a 3G so this is a pretty big problem.
I've set the architectures / valid architectures to support armv6 as well as armv7 in my build settings and I've deleted the line in info.plist about the required device capabilities with armv7 (I also experimented with adding armv6 instead of deleting the line, which made no difference). I also added the -mno-thumb to Other C Flags in case that was the issue. Even though I know for a fact that it works on a 3G, iTunes refuses to install it. Is there something I'm missing?
Check the OS version for you iPhone 3G. if it is running less than 4.0 you might need to have older sdk. Besides I guess ARC is not supported in earlier versions of iOS.
OK, I'm just dumb - I skipped a step and wasn't actually re-archiving the app, I just kept sharing the same original archive over and over again. Re-archived and now it works fine.
Thanks for all your help, everybody! Next time I ask a question I'll try to rule out my own lack of attention first...:P
I am building ARMv6 only (to keep the app size down), and it all runs fine on all iPhones/iPads.
My question is, when I submit it to AppStore, do I need or not need to update UIRequiredDeviceCapabilities to say it is an Armv6 build?
The docs here:
http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
say:
armv6: Include this key if your application is compiled only for the armv6 instruction set. (iOS v3.1 and later.)
BUT, does this mean if I include this key it will only work on ARMv6 platforms (eg: iPhone 3G) or does it just mean only ARMv6 code is in this app, but all phones compatible with that will still work?
Any help appreciated, I don't want to wait for the usual rejection.
Thanks,
Peter
If you include the armv6 key, your application will still work on armv7 devices like the iPad and iPhone 4. As far as I know, the original iPhone is armv6 as well, so there's no hardware restriction imposed by adding that key at all. It just means that any version of iOS which doesn't support the armv6 instruction set will not be able to download your app (pre-iOS 3.1, as they mentioned).
In xCode 4.2 it is possible to switch the Architecture to support armv6 manually, Standard is armv7. Just select it under Architecture, select other, delete existing one and add manually armv6 and armv7.
When I removed the complete "UIRequiredDevicesCapabilities" out of the source code view of my .plist file and switched back to the summary view of my project, xcode crashed and the whole project became unusable. After doing the same using the "Property List" view did not cause the same problem.
I want to limit my universal-build app to iPhone4 / iPad, and I've set UIRequiredDeviceCapabilities to include "armv7", accordingly. In the build settings I've set:
"Architectures" = "Optimized (armv7)"
"Valid Architectures" = "armv7"
But the Release and Distribution builds of my universal app are generating this warning:
warning: iPhone apps should include an armv6 architecture (current ARCHS = "armv7")
Is this even a real problem? Can I safely ignore the warning? Why doesn't my debug build exhibit the same warning - the build config has the same settings?
I'm building with XCode 3.2.5, 4.2 SDK.
Similar to this question, but not quite:
"Warning: iPhone apps should include an armv6 architecture" even with build config set
I was having the same issue. I set the project settings accordingly but was still getting the error when building the Release version. I had to edit the Target settings and found that 'Build Active Architecture Only' was checked for the Release configuration. Unchecking it resolved the warning. I hope this helps someone.
Build Active Architecture only is really best used just for debug and simulator builds.
The iOS deployment target version is what determines the required architectures. iOS 4.2 and earlier included support for armv6 processors; therefore Xcode wants you to build for that architecture for builds that might be distributed.
If you really don't want armv6 code, and understand that the app store will reject your app if it targets iOS 4.2 or earlier and does not have armv6, then I'd suggest just changing the "Architectures" setting in the target to armv7 only.
You can stay with arm7 only if you want, but if you want to limit to iPhone 4 / iPad it's because you have a good reason ? To limit to devices you need to use UIRequiredDeviceCapabilities in your Info.plist, otherwise people with previous iPhone will find your app and it will not work.
PS: It's not easy to find a device capability for both iPad and iPhone, you can for example said that you want devices with a front facing camera but this will limit to iPhone 4 and iPad 2 (and not iPad 1)