App Store Connect: Your app .... has one or more issues (ITMS-90738)

From appstore receive email with this issues:

ITMS-90738: Invalid purpose string value - The “NSPhotoLibraryUsageDescription” value for the NSPhotoLibraryUsageDescription key isn’t allowed in “.....”. Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “.....” bundle should contain a NSPhotoLibraryUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.

ITMS-90738: Invalid purpose string value - The “NSCameraUsageDescription” value for the NSCameraUsageDescription key isn’t allowed in “....”. Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “.....” bundle should contain a NSCameraUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.

In Info.plist file have defined:

	<key>NSCameraUsageDescription</key>
	<string>NSCameraUsageDescription</string>
	<key>NSFaceIDUsageDescription</key>
	<string>NSFaceIDUsageDescription</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>NSMicrophoneUsageDescription</string>
	<key>NSPhotoLibraryAddUsageDescription</key>
	<string>NSPhotoLibraryAddUsageDescription</string>
	<key>NSPhotoLibraryUsageDescription</key>
	<string>NSPhotoLibraryUsageDescription</string>

in InfoPlist.strings have this keys:

"NSCameraUsageDescription"="xxxxx app uses camera to take photos or videos which should be sent via secure message.";
"NSMicrophoneUsageDescription"="xxxxx app uses microphone to make secure voice communication.";
"NSPhotoLibraryUsageDescription"="xxxxx app needs access to Photo library to attach your images or videos.";
"NSPhotoLibraryAddUsageDescription" = "xxxxx app needs access to Photo library to save your images or videos.";
"NSFaceIDUsageDescription"="Enabling Face ID allows quick and secure access to your xxxx app account.";

Is some other setting necessary to solve these issues?

Replies

It looks like a App Store Connection has a specific check for the NSCameraUsageDescription value being NSCameraUsageDescription. I guess enough folks misconfigured their apps this way that it was worth adding that check. What you’re doing, using it as a key for your InfoPlist.strings file, isn’t wrong, but it is weird, and so I’m not surprised you’re being caught up in this net. You have a couple of choices:

  • You can file a bug against App Store Connect pointing out the error of their ways.

  • You can use the standard structure for your localised string keys, that is, use the development language string as the key.

I know which one I’d do (-:

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

@marek.labuzik @eskimo if you remove the quotes around the key in your localised InfoPlist.Strings files, this will address the issue:

replace "NSFaceIDUsageDescription"="Enabling Face ID allows quick and secure access to your xxxx app account.";

with NSFaceIDUsageDescription="Enabling Face ID allows quick and secure access to your xxxx app account.";

You can and should then remove the keys from the Info.plist file. Xcode will just get the keys from the localised files instead Erwan

Sorry I posted my early reply too fast... Remove the quotes around the key does the trick but you still need the key pairs in the Info.plist file.