We can specify which iOS version our app supports, is there a way to specify which iOS hardware our app supports? (for example, iPad 2 and up)
No, not directly. But, I believe you can specify the product family (iPhone vs. iPad), as well as the required device capabilities (e.g. camera, etc.). The combination these two effectively accomplish what you're looking for, though. See Declaring the Required Device Capabilities in the iOS App Programming Guide.
Related
I created a SpriteKit game that needs large screen area to be played so I decided not to write the code for the iPhone SE, but now I'm not sure if I can submit it to the App Store for all devices except the SE. Please let me know whether it's possible, and if so how to do it (i.e. where on iTunes Connect would you do it).
I looked up a lot but I couldn't find anything that could help.
I also couldn't find anything in the API.
Unfortunately, there is no support from Apple for this kind of thing. But you can do something like detecting whether the user's device is an iPhone SE and if so show a full screen alert saying "App is not supported for this device" and block the UI (which is not recommended unless it's required).
Just a thought:
If you are lucky to find out one device capability which distinguish iPhone SE, you can set that to value in UIDeviceRequiredCapabilities key in info.plist.
Example: Adding an item to UIRequiredDeviceCapabilities in your Info.plist with the requirement of "bluetooth-le" should limit your app to iPhone 4S/5 and iPad 3, 4 and mini. You could also throw in a "camera-flash" requirement to limit the app to iPhones only, should you need that.
More info: Device Compatibility Matrix
As far as I know, you cannot exclude certain devices. You can exclude iPad/iPhone, or require a minimum iOS version.
If you want to exclude iPhone SE, you can add UIDeviceRequiredCapabilities of nfc.
Pay attention this will allow only iPhone 7 devices and above.
Apple filters your app on 2 bases -
iOS Version
Universal or iPhone/iPad
You can not avoid any specific iPhone model based on the screen size if you have created an app for iPhone.
I'm shipping two binaries; one for iPhone/iTouch and the other for iPad. It's the same application.
Will Apple ensure that the user will never receive an iPhone version of the app on the iPad? If YES, then I don't have anything to worry about, but if not then I do have a problem.
The reason I ask is the iPhone application will simply not work correctly on the iPad because the server knows it's an iPad and will deliver the iPad HD content to it and the iPhone cannot handle that. I would rather not hack my application to send the server a fake device type if running the iPhone app on the iPad in order to receive the correct resources.
Suggestions?
I've been looking for this for a while because I couldn't prevent the iPhone app to load on the iPad. Searched a bit to understand why this was happening, followed #hotpaw2 instructions and found this on the official apple store rules:
UPDATE:
2.4.1 To ensure people get the most out of your app, iPhone apps should run on iPad whenever possible. We encourage you to consider
building universal apps so customers can use them on all of their
devices. Learn more about Universal apps.
https://developer.apple.com/app-store/review/guidelines/
The SDK and/or App store rules prohibit you from preventing an iPhone app from running on an iPad in 1X or 2X zoom mode, unless there are other requirements listed in the app plist. Apple's app review is known to test iPhone-only app submissions (unless there are other requirements) on an iPad, and reject the app if it doesn't run properly.
Other requirements (as listed under UIRequiredDeviceCapabilities in the app's plist) might include your app requiring telephone capabilities (or healthkit, etc.), which might help you temporarily, but still won't prevent the app from running on some hypothetical future iPad product that includes telephony capabilities (and/or healthkit, etc.).
Actually you can.
Add telephony to UIRequiredDeviceCapabilities in your plist file.
But i really not recommend it and maybe you could get rejected because of gratuitously using this property.
I think you should handle that there are iPad versions and iPhone versions on iPads, use the second one as an iPhone.
Also don't forget that retina iPads will use upscaled applications at retina resolution while none retina ones use the standard resolution. And this behavior can tweaked using jailbreak tweaks like RetinaPad and FullForce.
In the plist settings, add Application requires iPhone environment and set the boolean to YES
I'm currently writing an application that is only supported on iPad Air 1 + 2. I am checking for device compatibility in code, but is there a way to also specify that on the App Store?
I haven't been able to find anything past UIRequiredDeviceCapabilities, which only specifies certain characteristics that the device must have. As far as I can tell, there is no discerning characteristic under UIRequiredDeviceCapabilities between iPad Air and iPad 2.
Using UIRequiredDeviceCapabilities is the right way to go. Based on the list here:
iOS Device Compatibility Reference, I guess you can use metal or opengles-3, which are both available only on iPad Air models but not on iPad 2.
I hope this helps. Good luck.
How can I restrict my app for iPhone's only, excluding iPod touch ?
I don't want my app available on iPod Touch, is there a property in the info.plist I can use to specify this or is this something I will encounter during the setup on itunesconnect ?
You could add gps as a required device capability simply to exclude devices without the GPS hardware, which would rule out iPod touches.
Edit: Actually, the correct way to do this is to include for the UIRequiredDeviceCapabilities entry (a dictionary), the telephony key with a value of YES, meaning, only devices that support telephony can use the app.
Also, check out the complete reference of what keys are available for use with UIRequiredDeviceCapabilities.
The above solutions are not the way Apple has recommended it should be done one their website. There are two ways that I am currently aware of.
When creating, the project in the latest version of Xcode, it allows you to choose the device family. Don't select universal or ipod. Just select iPhone.
An alterntive is in the application's Build Settings change the Targeted Device Family to iPhone, instead of iPhone/iPad.
My app is for the iPad 2 only. I have seen other answers involving setting the UIRequiredDeviceCapabilities key, but I need to exclude the iPad 1 because of the CPU power, not any specific hardware feature.
I would like the app to show up in the appstore for people in the future also (iPad 3 etc. should have equal or stronger processor than 2), so I need only exclude iPad 1 specifically.
Any ideas?
Set UIRequiredDeviceCapabilities to require front-facing-camera. I don't think they are going to cut down on features. There isn't any other way, it seems.
There appears to be no Processor_MHz_GHz, CPU_core_count or GPU_shader_count keys currently documented for the UIRequiredDeviceCapabilities plist. And Apple currently appears not to allow adding more hardware restriction keys to existing apps already in the App store.
So you appear to be out-of-luck, if you don't want to risk requiring a camera. Or just selling a new app (not an update) to support hypothetical future products.
ADDED/UPDATE (2012-September): You can now exclude a 1st generation iPad by specifying iOS 6.x as the minimum Deployment target in your build settings, since an iOS 6 update is not offered by Apple for the 1st gen iPad, whereas an iPad 2 and newer will run iOS 6.
In my opinion, CPU power is a hardware feature. Try disabling the ARM version of the iPad 1, so only newer iDevices will be supported.
Keep in mind though when disabling certain ARM versions you might also be excluding the older iPods and iPhones if your app is an universal one.
Bryan