When I submit an application to iTunes Connect, how do I set the "Compatibility" to exclude iPod touch?
Within Xcode, my application deployment settings have a "target device family" of "iPhone/iPad", but iTunes Connect seems to include iPod touch wherever iPhone is allowed and as a result the iTunes listing for the application states: "Compatibility: Requires iOS 5.0 or later. Compatible with iPhone, iPad and iPod touch. This app is optimised for iPhone 5".
The application does run on iPod touch, but is heavily dependent on 3G and as such we would simply prefer that the iPod touch not be included in the listing.
Thanks.
As you want the app compatible for iPhones & iPads only but not iPod, I guess you have to set UIRequiredDeviceCapabilities entry (a dictionary) in info.plist file AND the magnetometer key with a value of YES, meaning, only devices that support magnetometer can use the app.
I have checked that magnetometer is supported by iPhones & iPads only not by iPods. Take a look at Device Compatibility - Apple Documnetation for your confirmation.
I have not tested this, but it should work as stated in the documentation:
The value of the UIRequiredDeviceCapabilities key is either an array or a dictionary that contains additional keys identifying features your app requires (or specifically prohibits). If you specify the value of the key using an array, the presence of a key indicates that the feature is required; the absence of a key indicates that the feature is not required and that the app can run without it. If you specify a dictionary instead, each key in the dictionary must have a Boolean value that indicates whether the feature is required or prohibited. A value of true indicates the feature is required and a value of false indicates that the feature must not be present on the device. If a given capability is optional for your app, do not include the corresponding key in the dictionary.
Table 1-1 lists the keys that you can include in the array or dictionary for the UIRequiredDeviceCapabilities key. You should include keys only for the features that your app absolutely requires. If your app can run without a specific feature, do not include the corresponding key.
Good Luck :)
Related
General Query
Does precise documentation exist for which API methods/properties require privacy "purpose strings" in iOS 10?
Specific Query
I have an app that links against the CoreBluetooth framework that accesses only the following methods/properties:
CBCentralManager:
state
- retrieveConnectedPeripheralsWithServices:
CBPeripheral:
name
In the documentation, I have found the following vague statements (emphases mine):
An iOS app linked on or after iOS 10.0 must include in its Info.plist file the usage description keys for the types of data it needs to access or it will crash. To access Bluetooth peripheral data specifically, it must include NSBluetoothPeripheralUsageDescription.
[...]
When the system prompts the user to allow usage, the value that you provide for this key is displayed as part of the alert.
[...]
To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses the Bluetooth interface, must statically declare the intent to do so. Include the NSBluetoothPeripheralUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the Bluetooth interface without a corresponding purpose string, your app exits.
[...]
The data and features that require user permission are described in Table 1-2.
(Table 1.2 states that NSBluetoothPeripheralUsageDescription is required to access "Bluetooth peripherals")
My app does not currently exit when it calls the APIs listed. Neither does it "prompt the user to allow usage".
However, this blog post suggests that the lack of a crash does not indicate that no purpose string is required.
(Despite the fact that my app is not "linked on or after iOS 10.0" (the current version has been in the store since before iOS 10 existed), it does crash citing a missing NSCameraUsageDescription when it attempts to access the camera.)
Furthermore, my reading of the documentation above suggests that I should be including an entry for NSBluetoothPeripheralUsageDescription.
Is there any other documentation that I've missed that lists which actual API calls are covered by which privacy purpose strings?
Do I need to add an entry for NSBluetoothPeripheralUsageDescription to my Info.plist?
Is there any harm in adding such an entry if it turns out not to be required?
Yes you're definitely need it, it was optional in pre-ios10 but now you have to explicit add the comment into the info.plist
IF you're build with iOS10. It will crash the app but If you build with pre-ios 10 it's fine. It's based on Xcode build not based on Device version
So basically, next time you update the app you need to add it.
and By the way, I couldn't find document for it, this is my own experience that we have when shifting from iOS9 to iOS10
"The app's Info.plist can't contain values for the UIRequiredDeviceCapabilities key that would prevent this app from opening on any iOS device. For more information, see Understanding the UIRequiredDeviceCapabilities Key."
I keep getting this error when trying to submit the app for review on iTunes Connect.
I'm using:
Xcode 6.1.1,
Application Loader 3.0,
LiveCode 6.7 (tried with 7.0.1 as well, same result)
Build for iOS:
iPod and iPhone 4.3 or later
Location Authorization Type: Always (options are greyed out here and can't be changed...)
Requirements and Restrictions: Required- Auto-focus Camera/Still Camera, WiFi
In my app, I'm using mobilePickPhoto to snap and get photo from library.
Please let me know if anyone have encountered the same issue before...
Thank you.
I removed <string>armv7</string> from the array in UIRequiredDeviceCapabilities in info.plist and now my status is waiting for review. Seems like it was a iTunes Connect-bug in my case
When updating an app, it seems you cannot add new restrictions to the
Required Device Capabilities.
The automatic validation service that Apple has integrated into Xcode
will reject any update with more restrictive
UIRequiredDeviceCapabilities than the earlier version before you can
even upload it to iTunes Connect.
http://oleb.net/blog/2011/12/uirequireddevicecapabilities-cannot-be-changed-in-app-updates/
I didn't need any hardware checking with my similar issue but removing UIRequiredDeviceCapabilities completely and changing the project format to 6.3 compatible seemed to get around this issue for me.
Mine was an old project, originally set to Xcode 3.2 compatible.
It looks to me like auto-focus-camera and still-camera are mutually-exclusive.
From the reference:
auto-focus-camera
Include this key if your app requires (or specifically prohibits)
autofocus capabilities in the device’s still camera. Although most
developers should not need to include this key, you might include it
if your app supports macro photography or requires sharper images in
order to perform some sort of image processing.
still-camera Include this key if your app requires (or specifically prohibits) the
presence of a camera on the device. Apps use the
UIImagePickerController interface to capture images from the device’s
still camera.
I would imagine that auto-focus-camera implies still-camera, so I would remove still-camera as a requirement. This is just a guess, however.
I need to restrict my IOS app in only IPAD 1. Other IPADs are ok. It supports IPHONE 4 and above too.
Is there a way?
As you can see here:
App-Related Resources
under the Declaring the Required Device Capabilities section, you can declare UIRequiredDeviceCapabilities in your Info.plist file. It means that you declare hardware that your app requires in order to run. The App Store uses the contents of this key to prevent users from downloading your app onto a device that cannot possibly run it.
In your case, I think you can require the front-facing-camera to exclude the iPad 1gen.
Another way is to set the development target to iOS 6.0 which is not supported on the iPad 1.
I have some questions regarding the information I should include in my project's Info.plist file before submitting the app:
A) About CFBundleIcons: I see this key when I open the file in Xcode as source code and the xml format is displayed but, when I open it as property list, I only see an Icon files (iOS 5) entry, is that correct? On the other hand, I've changed the app icons I firstly had in the General tab of the target settings, and the Info.plist file keeps listing the old app icons as well, and the new icons I added do not have the .png extension in their name... should I handle this information manually, or did I something wrong when I changed the icons in the target's settings? Should the names include the png extension? Should I list all versions of an icon (standard and #2x), or just the name for the standard is enough?
B) Regarding UIRequiresPersistentWifi key, Apple's docs say that
Include this key if your app requires a Wi-Fi connection
I'm not sure if I have to include this key: my app performs network operations but they could be done via WWAN, not only via Wi-Fi. And not all my app's features need network connection to be performed.
C) About UIRequiredDeviceCapabilities key. I have in turn some questions here: Apple says that
The value of the UIRequiredDeviceCapabilitieskey is either an array or a dictionary that contains additional keys identifying features your app requires (or specifically prohibits).
What do they mean when they say "features your app requires": those features which the app won't work at all without them, or all those features that your app can use? For example: my app includes an option for listening the device's location. It is an optional functionality, users can enable and disable it. I check [CLLocationManager locationServicesEnabled] when the user enables the option. I've no set the location-services value in the plist file and the app has been tested and the feature works, and the compiler has never complained. Should I include the value if I want to submit the app?
Something similar happens with another capabilities, for example microphone and still-camera. I use UIImagePickerController at some point of the app, as well as the microphone for speech recognition, but that are also optional functions of the app that the user has to select, they don't affect its overall operation. And I neither have included such values in the plist yet and they are working...
Thanks in advance
A: If you want to publish iPhone app only you need provide the 2 icon's(#1x, #2x),Now I think #1x is not for necessary, if you want to publish Both iPad & iPhone, you may need to provide 4 icon. But if you dont care about the quality 1 icon is OK.
B:This line UIRequiresPersistentWifi is not necessary.
C:Same as B) This line UIRequiresPersistentWifi is not necessary. if you have more require from iOS system.
I am ready to submit my iOS application to Apple Store. But I want to add specific requirements such as "app requires iOS 4 or greater ,iphone 4 , ipod touch 4g,ipad ,camera & multitasking support". I don't know where should I set these requirements.
I set the base sdk & deployement target to 4.0.
Any help is appreciated. Thanks.
You need to add UIRequiredDeviceCapabilities key to info.plist file and set still-camera value.
Here is a table of all possible iDevice requirements.
As for target iOS version and backgrounding it's right to set deployment target at least 4.0.
If you require iOS 4, you already have multitasking support. There's no way (that I know of) for any user to disable that.
Camera is trickier though. Make it very clear in your app description that your app requires a camera. And that caveat ("you must have a camera") should keep non-camera device using people from downloading.
I got it. Brigadir is right. When you setUIRequiredDeviceCapabilities key to info.plist file & set the required values then it will automatically list the devices required. See Appendix C: Device Compatibility Matrix in itunes_connect_developer_guide.pdf.