Apple rejected my app: UIRequiredDeviceCapabilities key - ios

I developed an app with ionic 3 and I’m trying to publish it for Android and iOS. With Android the publish process was fast as a lighting bolt without any problem. With iOS the publish process is a pain, they reject my app for this reason:
"Thank you for your response.
Regarding Guideline 2.3 - Performance - Accurate Metadata, we continue to find that your app does not install on iPad
To resolve this issue, it would be appropriate to check the UIRequiredDeviceCapabilities key to verify that it contains only the attributes required for your app features or the attributes that must not be present on the device. Attributes specified by a dictionary should be set to true if they are required and false if they must not be present on the device.
We look forward to reviewing your resubmitted app."
I checked the app info.plist but the key “UIRequiredDeviceCapabilities” is not present and I don’t know how to set it in order to address the issue.
Moreover I tested the app on several ipad simulators without any problem…
There’s anyone with the same issue ?

I solved the issue by adding the "telephony" property into "UIRequiredDeviceCapabilities" because my app use the "tel:" link so in this case the property is required.

Related

Mac Catalyst app not respecting HomeKit Privacy usage description in Info.plist

I'm writing a Mac app using Catalyst, that uses HomeKit to control some accessories.
When running from Xcode there are no issues, it works fine, however when running any other way – directly from Finder, after distributing on TestFlight, or even during App Store Review, the app crashes as soon as it attempts to use HomeKit.
The crash log is very clear, it says:
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSHomeKitUsageDescription key with a string value explaining to the user how the app uses this data.
The problem is that I do have NSHomeKitUsageDescription in my Info.plist. It's always been there since I enabled HomeKit.
So far I've tried a bunch of different resolutions:
I've double and tripled checked the value in the Info.plist, there is a non-empty, reasonable sentence description, against the key NSHomeKitUsageDescription, which is shown as "Privacy - HomeKit Usage Description".
I've switched from an xcodeproj embedded generated Info.plist to a real file-on-disk Info.plist and back again (all worked correctly, except for this).
I've switched from managed certificates and profiles to manual certificates and profiles and back again (as far as I can tell from research, managed certs should work fine)
I've checked that the Info.plist in the app bundle does indeed contain the correct key.
So far, no progress, it just always crashes with the same result. Annoyingly because the crash error message is so obvious all the search results I've found here, on Google, or on the Apple dev forums are saying "just add the key", which I've done with no success.
One potentially complicating factors that could be involved, my app contains an embedded macOS-only framework that it uses to access AppKit. I used the technique from an open-source app that apparently successfully uses HomeKit, so I don't expect that to be causing the issue. I've also tried adding the key to the framework's info.plist as well but to no effect. Disabling the framework doesn't help either. I can add more detail about this if necessary, but I don't think it's the cause of the issue.
Updates to clarify things:
Already accounting for the bug in Xcode 14 that misses HomeKit entitlements.
Reproducible on macOS Ventura and on Xcode Server with Monterey.
Tried re-signing the framework after embedding in the app.

iOS 12 - "The app's Info.plist must contain an NSMicrophoneUsageDescription key"

Today I updated to the beta of iOS 12 to give my company's app a test to see if any features requires some updates. The only problem I've come across so far was that the app crashes when invoking the camera within it to take a picture. When doing so I received the following error:
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
I've checked out the apple site for some changes in the permissions around this but haven't found anything relevant. The app currently works on iOS 11 without this. Has anyone ready anything relevant to behavioral changes in this or could it be an iOS 12 beta bug? I'm not sure why it now thinks the app needs access to the mic all of a sudden when simply taking a picture.
Thanks for your help!
Edit: I am aware there are other questions asking about this error text. However I am not asking about the error itself, but rather whether or not this is an iOS 12 beta bug or if there is some change in security that I have overlooked.
It bug was fixed in iOS 12 beta 2:
UIKit
Resolved Issues
• Presenting a UIImagePickerController might cause the app to be terminated with a privacy violation if the app does not
include the NSMicrophoneUsageDescription key in its Info.plist.
(40490417)
https://download.developer.apple.com/Documentation/Beta_Release_Notes_19_June_2018_v2/iOS_12_beta_2_Release_Notes.pdf

How to restrict my app to iphone 5s and above?

I am using healthkit in my application to read user's steps. But unfortunately iphone 5 and below does not have M7 sensor due to which my app can not perfome its full functionalities on those devices. So is there any possible way that user having iphone 5 or below could not install my app from app store ? Or any other possible workout/behaviour suggested ?
I think you want the HealthKit key of UIRequiredDeviceCapabilities in your .plist file.
Documentation on UIRequiredDeviceCapabilities is here
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.
The healthkit bit says:
healthkit Include this key if your app requires (or specifically prohibits) HealthKit.
I am afraid you can't restrict application to device specific.
All device requirement changes must be made when you submit an update
to your binary. You are permitted only to expand your device
requirements. Submitting an update to your binary to restrict your
device requirements is not permitted. You are unable to restrict
device requirements because this action will keep customers who have
previously downloaded your app from running new updates.
don't know any work around regarding Healthkit, still if any may result in app rejection.
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).
Be sure to 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.
Can read more details in docs here:
https://developer.apple.com/library/content/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html

mobile application was rejected in app store due to health kit framework

I made iOS app using Xamarin and my app is getting rejected for the following reason:
Apps using the HealthKit framework must indicate integration with the
Health app in their marketing text and must clearly identify the
HealthKit functionality in the app's user interface
But I don't use HealthKit anywhere and didn't enable it. I can't find any reference of it in the code.
Has anyone had this problem before?
Thank you
Be sure to check on your Apple Developer Center it isn't activated it on your Application Certificates.
I've resolved it by adding in project Properties, iOS Build:
Additional Options => Additional mtouch arguments: --linkskip=HealthKit
Oddly enough a week ago had my Xamarin app rejected for the same reason.
Although on the resolution center they asked me if the App uses the HealthKit Framework and i replied that the app does not use it.
Was approved the next day

App only for iPhones not iPod. (like Whatsapp)

I have been googling from few days like when we goto AppStore in iPod and try installing 'Whatsapp' it shows a pop-up with message :
"This app is not compatible with your device."
So my question is, being a Developer how do we do this ? Where this can be set somewhere within our application build or itunesconnect or some where else ? Howw ?
Any suggestions will be helpful. :)
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.
You could do that by changing the required capability of a device. For instance, an app with telephony requirement will only work on iPhone. Check this Apple iOS device compatibility reference

Resources