14

I'm writing an app which requires the M7 Motion co-processor chip in the iPhone 5S. Since this chip isn't in any other iPhone, the app will only function properly on an iPhone 5S.

Is there any way to require that a user has an iPhone 5S before downloading my app? Sort of like how you can make an app iPad specific?

I am looking for a way to select the iPhone hardware requirement. Not the iOS version requirement.

Mobiletainment
  • 22,201
  • 9
  • 82
  • 98
Jackson
  • 3,555
  • 3
  • 34
  • 50

3 Answers3

10

I spoke with Apple and the correct answer is at this time NO. You can not specify via Required device capabilities or otherwise that an iPhone 5S is required for a specific app. You can however state clearly in your app's description that it requires the iPhone 5S/M7 motion co-processor and Apple will accept it.

Jackson
  • 3,555
  • 3
  • 34
  • 50
  • How about using the `metal` or `opengles-3` keys for requiring the motion co-processor ? seems `metal` is only available on post-iPhone 5 – Zack Braksa Jan 28 '16 at 01:26
  • At the time I posted this, I'm not sure metal or opengles-3 existed (maybe they did?) but it sounds like something worth trying. Can you try and report back if it works? Since I posted this, I've also wished to prevent users who did not have a barometer chip (pre iPhone 6) from downloading my app but I again ended up only doing what Apple told me which was to state clearly in the app description what the app required and code an error message and leave it at that. – Jackson Jan 29 '16 at 21:22
  • Yes if I end up trying it and not going the same route as you, I'll definitely report back here! – Zack Braksa Jan 29 '16 at 23:34
2

Normally you would do something like this by adding the UIRequiredDeviceCapabilities key to your app's info.plist and specifying a value corresponding to the hardware feature you require. However, among the possible values listed here, there doesn't appear to be a value for the motion co-processor. Apple may still add one, but until then perhaps you could come up with a combination of those values that is unique to the iPhone 5S and specify that.

George WS
  • 3,903
  • 5
  • 27
  • 39
  • Interestingly I tried to add arm64 to the required device capabilities array in the plist and it will not build and run on my iPhone 5S because it says my app's plist "specifies device capability requirements, which are not met by iPhone". Weird. Isn't the iPhone 5S an arm64? – Jackson Sep 23 '13 at 20:43
  • Also I am getting this warning in Xcode: warning: all apps should include an armv7 architecture (current ARCHS = "arm64"). So I guess I can't build for just arm64. – Jackson Sep 23 '13 at 20:59
  • Well technically the 5S has a *64-bit processor* which is based on the *[ARMv8 architecture](http://www.arm.com/products/processors/armv8-architecture.php)*. This would suggest that you want to specify `armv8` in your property list, but only `armv6` and `armv7` are listed as possible values in Apple's documentation. (`arm64` isn't a possible value for that key, which is probably why it wouldn't run with that.) It's worth just checking to see if `armv8` works, though. That would follow the pattern and it could be that Apple just hasn't gotten around to updating that list yet. – George WS Sep 23 '13 at 21:06
  • I just tried it. Putting armv8 in the Required device capabilities section does not allow it to run either. Only armv7 seems to work. It kind of seems like a big omission on Apple's part if they didn't get around to updating the list before their new architecture was relased. – Jackson Sep 23 '13 at 21:09
  • 1
    Well that's too bad. My only other idea would be to specify a combination of the values that *are* in Apple's list that *together* would be unique to the 5S, if such a combination exists. If that doesn't work, I'd ask around on the dev forums and see if anyone at Apple can help you, and perhaps file a radar. The ideal solution would be for there to be a value in that list that you could use to specify the motion co-processor itself. – George WS Sep 23 '13 at 21:22
  • It seems that the 5S doesn't have that much to set it apart from the 5 besides a better camera/flash, the M7 chip, fingerprint sensor, and the 64-bit architecture, so I don't think it's going to work. I guess the only solution will be to go to Apple about this. For now I am just putting a popup that says sorry to users who don't have the M7 chip. It's easy enough to detect whether the chip exists via Core Motion. – Jackson Sep 23 '13 at 21:27
  • Would be good if they could add a UIRequiredDeviceCapabilities key for the M7 chip. I was thinking of popping up a dialog also for pre-5s users, but not sure if this would get through App Review. – Hunt IT Sep 28 '13 at 01:56
  • That's what I'm doing - popping up a dialogue for pre 5S users telling them that they don't have the M7 chip. What else can you do? Have you come up with a solution? – Jackson Sep 30 '13 at 23:51
  • How about the keys for `metal` and/or `opengles-3` ? they seem to exist only for devices > iPhone 5 – Zack Braksa Jan 28 '16 at 01:28
1

You should add the key "Required device capabilities" - UIRequiredDeviceCapabilities to your app's main plist. By adding this key, you can define what are the app requirements.

Here you find the values available for this key: https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW3

Niralp
  • 235
  • 2
  • 4
  • 1
    That is all good except there's nothing in there to differentiate the iPhone 5S from the iPhone 5. There's no ability to require armv8 (the 64 bit chip) or to require the new M7 chip. – Jackson Sep 30 '13 at 23:50
  • 2
    metal and/or opengles-3, as a required device capability, will differentiate a 5S from a 5. – hotpaw2 Oct 27 '14 at 20:39