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."
Related
I'm about to release a game, and I've decided the cut-off (for performance and aspect ratio reasons) is the iphone 5 on the bottom end. So no iphone 4s.
The only way to restrict devices is by using combinations of requirements in the UIRequredDeviceCapabilities key of info.plist.
Requiring armv7s restricts the right devices, based on this tool:
http://28byteslater.com/ios-compatibility/?exclude=&require=9#chart
BUT... there are conflicting reports on whether this is will work, and be accepted by the app store. Some articles say that if you require armv7s you HAVE to require armv7 as well. Does anyone actually tried submitting an app with an armv7s requirement to prevent iphone 4s downloads?
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 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!
This question already has answers here:
How to support both armv6 and armv7s for release build in xcode 4.5
(7 answers)
Closed 9 years ago.
As you probably know, Apple announces two news:
Make Your Apps Look Great on the Retina Display and iPhone 5
And another one related to UDID
I've a question about the first one. So we have an application which is built with iOS3.2 as a minimum deployment target and with armv6 support. The reason for this because many user still has an iPhone 3G, so we need support for armv6.
But because of this announcement, we have to drop armv6 support and use iOS6 SDK (with iOS4.3 min deployment target) to properly build the app with the 4 cols launch image.
I was reading and searching a lot about this topic and I found these:
Currently we have armv6 support. You can't drop it, you can just set the minimum os version to 4.3. But with XCode 4.5 you can't built for armv6 architecture, so this slice will missing from the app. That's why Apple won't accept your app at next upload, because you limit the supported list of devices. But if you use older XCode, you can't add the big launch image for supporting iPhone5 full screen mode.
The main point is the missing armv6 slice.
Someone told that Apple can detect this, and if your app contains such slice, it will be rejected after May 1.
But you can't update your existing app with armv6 support, because you can't built for that.
I also read that you can combine apps built with XCode 4.x and 4.5 to support all architectures, but this is too risky for us if Apple will accept this after May 1.
So is it true that all developer whose app is still supporting armv6 must have to upload a new app to App Store with different app id? Or is there any other solution that updates after May 1 will arrive in the right manner to all current user?
Thanks
madik
There's nothing wrong with removing support for a previously-supported architecture once it's out of date, as is the case here. You will not be able to release any more updates for these users though, and that's just all there is to it.
What you can't do is remove support for a device group. That is, you can't have a universal app and later remove support for iPad, for example.
There is no point in supporting armv6 devices or OS < 5.0 any more. This market is extremely limited unless your product is targeted at countries where buying new devices is uncommon. In most major markets the effort to support ancient iOS devices is not worth it. We only support 5.x and armv7 devices for new app versions.