I want to use a framework which recommends to disable armv6 support in Xcode. Though I am not sure what consequences this has.
As I understand so far, any device older or slower than a 3GS does not have armv7 and only armv6. So when I drop support for armv6 I assume my app binary becomes smaller and it will stop running on these old devices?
If you drop armv6 support do you need to specify anything else for required device capabilities to exclude devices that only have armv6?
Yes, you can target your app for armv7 and above which uses certain device hardware capabilities that do not exist on armv6 devices.
To do this, it is required that you add armv7 in the Required Device Capabilities (UIRequiredDeviceCapabilities) key in the project’s Info.plist file.
UIRequiredDeviceCapabilities (Array or Dictionary - iOS) lets iTunes and the App Store know which device-related features an app requires in order to run. iTunes and the mobile App Store use this list to prevent customers from installing apps on a device that does not support the listed capabilities.
Unrelated but Important Note: UIRequiredDeviceCapabilities Cannot Be Changed in App Updates.
So if your app supports armv6 you cannot submit a new update to restrict archs from armv7 and above.
Hope that helps!
Related
I am having the following issue when i start uploading the app. i have added armv7, arm64 to Required device capabilities but still its giving issue. Here are the errors:
These are the steps i did for my problem. Problem solved.
before you archive the app do the following steps,
Un-plug the device from mac.
Clean and build the project.
Archive the project.
Validate.
Upload.
Solution:
Change the device to Generic iOS Device or unplug your 64bit phone
.
Reason:
Check Build Active Architecture Only in Build Settings > Architectures
if YES, xcode will determine the architecture of the test device selected and it will build for that only.
if NO, xcode will build for all architectures considering your minimumOSVersion
NOTE: setting Build Active Architecture to YES is faster when building, so use it when you need it fast
Those keys don't work the way you think they do : it's an AND not an OR. By including the arm64 key you are saying your app is for 64-bit devices only, which is not allowed on iOS 8. Delete the arm64 key.
Apple said at WWDC that 64-bit-only iOS apps will be allowed on iOS 9, but you'd need to be building with XCode 7 and targeting iOS 9.
You can also give those keys true and false values, which makes things more complicated. See Apple's docs if you want to know more. https://developer.apple.com/library/ios/qa/qa1397/_index.html
Will adding to the UIRequiredDeviceCapabilities "armv7s" and "armv8" restrict users to install my app from AppStore on devices other than iPhone 5/5s/5c?
I have found these articles very useful:
UIRequiredDeviceCapabilities and Device Compatibility Matrix (is there any up-to-date info from Apple about device capabilities?)
List of iOS devices
I've also searched all over SO and there was no full/correct answer to my question. Maybe except this one: Limit the app working on iPhone5 only?, but it should(?) work only for iPhone 5 and iPhone 5C, not iPhone 5S.
I have found this Important note:
The store rejects a binary that supports only armv7s. If armv7s is included in the Valid Architectures list, armv7 must also be included.
From App Distribution Guide.
Specifying armv7s in your Info.plist's UIRequiredDeviceCapabilities should be enough as it means it requires compatibility with the armv7s instruction set, which in turn is compatible with arm64 and any future Ax processor.
Also it would be interesting to know why you need to restrict your App in the first place.
Up to date Apple capabilities list here. There is no official way to cut requirement between iPhone 4 and 5 besides armv7s.
Also there is a new good reason to require iPhone 5+ devices: WatchKit apps that have no meaningful iPhone parent app. For instance a game for Apple Watch. One should prevent devices that can not possibly work with the watch from downloading the App.
From this article: How to drop support for 4S/5/5S and accomplish what is said in this article without being rejected?
"The store rejects a binary that supports only armv7s. If armv7s is included in the Valid Architectures list, armv7 must also be included."
With our app, we don't want to support 3,5" iPhone screens. We also require iOS 8.0, so that leaves the iPhone 4S as the only 3,5" screen that is supported.
We want to exclude the iPhone 4S by removing the armv7 architecture from the valid architectures list when building the App Store binary. But it does not seem to be allowed to do this.
Am I doing something wrong, or is this really not allowed?
You can try some options:
-If you have a device plugged in, that device's architecture is the ACTIVE ARCHITECTURE, so you need to unplug the device.
-Set "Build Active Architecture Only" to NO for targets and project.
It's probably too late now, but maybe helps some one else.. For me, this error was when I left iPhone 5S connected, when building ad hoc release for AppStore (or testflight) . If I remove (and leave as iOS Device) - then - no errors.
Will adding to the UIRequiredDeviceCapabilities "armv7s" and "armv8" restrict users to install my app from AppStore on devices other than iPhone 5/5s/5c?
I have found these articles very useful:
UIRequiredDeviceCapabilities and Device Compatibility Matrix (is there any up-to-date info from Apple about device capabilities?)
List of iOS devices
I've also searched all over SO and there was no full/correct answer to my question. Maybe except this one: Limit the app working on iPhone5 only?, but it should(?) work only for iPhone 5 and iPhone 5C, not iPhone 5S.
I have found this Important note:
The store rejects a binary that supports only armv7s. If armv7s is included in the Valid Architectures list, armv7 must also be included.
From App Distribution Guide.
Specifying armv7s in your Info.plist's UIRequiredDeviceCapabilities should be enough as it means it requires compatibility with the armv7s instruction set, which in turn is compatible with arm64 and any future Ax processor.
Also it would be interesting to know why you need to restrict your App in the first place.
Up to date Apple capabilities list here. There is no official way to cut requirement between iPhone 4 and 5 besides armv7s.
Also there is a new good reason to require iPhone 5+ devices: WatchKit apps that have no meaningful iPhone parent app. For instance a game for Apple Watch. One should prevent devices that can not possibly work with the watch from downloading the App.
From this article: How to drop support for 4S/5/5S and accomplish what is said in this article without being rejected?
"The store rejects a binary that supports only armv7s. If armv7s is included in the Valid Architectures list, armv7 must also be included."
I have set my app to be distributed to minimum iOS 3.0 version and armv6 armv7.
Why is my app being rejected with Invalid Binary Architecture? It sounds like it meets the requriements.
Dear Developer, We have discovered one or more issues with your recent
binary submission for "Charlotte". Before your app can be reviewed,
the following issues must be corrected: Invalid Binary Architecture -
iOS 3.0 introduced support for multiple binary architectures. If your
binary is built for multiple architectures, your Info.plist must have
a MinimumOSVersion key with a value of at least 3.0. Additionally, if
your app is intended to support earlier iPhone and iPod touch models,
your app must contain at least an armv6 binary; "thin" armv7-only
binaries will not be accepted unless the armv7 required device
capability is also present in the Info.plist
UIRequiredDeviceCapabilities key or the MinimumOSVersion key has a
value of 4.3 or higher. For more information, see Technical Q&A
QA1707 at:
http://developer.apple.com/iphone/library/qa/qa2010/qa1707.html. Once
these issues have been corrected, go to the Version Details page and
click Ready to Upload Binary. Continue through the submission process
until the app status is Waiting for Upload and then use Application
Loader to upload the corrected binary. Regards, The iTunes Store Team
I added "armv6" to Architecture by clicking on "+" and adding it as a new line instead of typing it along with the "Standard (armv6)" one. It worked and the submission was accepted.