Hello,
My iOS application, developed with Xamarin.Forms for about 3 years, is published in the AppStore. When I tried to update this application in the past months, I received an e-mail from the App Store connect as follows.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSAppleMusicUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSSiriUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSLocationAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSLocationAlwaysAndWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
.
ITMS-90683: Missing purpose string in Info.plist - 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 “AppName.iOS.app” bundle should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If your app supports multiple locales, you’re now required to provide a purpose string value in the Info.plist file in addition to a valid localized string across each of your app’s localization folders. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. For details, visit:
https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
They are said that I must explain why I need these data in to the info.plist. But I do not do anything that requires this permission anywhere in the application.
When I received this e-mail, I had to publish the application very urgently, so I entered the following permissions in the info.plist of the application: "Permission is requested due to the libraries used in the application.".
I was able to somehow update my application after rejecting it 5-6 times in that release. But right now I want to update my app agian and apple rejected my app again. The reason of rejection is: "Your app uses the SMS Fraud Extension to block or filter messages from a list of phone numbers".
However, I do not use any SMS Fraud Extension in my application. I think the reason why Apple is responding in this way may be the "NSContactsUsageDescription" permission I added to the info.plist. So I'm currently trying to figure out why these permissions are mandatory.
I think there could be 2 reasons for this.
The first reason may be due to a package. If the package is caused, the first package that comes to my mind is the "Xamarin.Essentials" package. Because as you know, many features are gathered in the "Xamarin.Essentials" nuget and even if we use 1-2 features in this package, we have to include the same package in the project.
I am currently launching application as Linker Behavior: Link Framework SDKs Only.
If the problem is caused by the Xamarin.Essential package, I understand that if I set Linker Behavior: Link All, I will send my application to the market without adding any permission. It will be fixed. But when I do this, my app can't open. (When I press the app icon to open my application, the application closes without even the splash screen.)
The second reason may that I added the Share Extension feature to my application in the previous release. I don't know if the Share extension feature needs these permissions, but these permissions are required after I added share extension feature to my app. Does Share Extension apply these permissions?
Has anyone encountered this situation before? If so, how did you solve it? I would be very grateful if someone could help me. I have to update an application very urgently, but my application is constantly rejected by Apple.
No, it's not the latest version. But that's not the problem, I finally found out what the problem is. As I mentioned in my question, I was thinking that either the "Xamarin.Essentials" library I used or the Share Extension project I added in the last releases would be the cause. When I examined both of them in detail, I saw that the problem was caused by the Share Extension project.
If I don't set it to "Linker Behavior: Link All" in the Share Extension project, when I submit the app to the AppStore, Apple forces to add these permissions (NSContactsUsageDescription, NSMicrophoneUsageDescription, NSAppleMusicUsageDescription, NSSiriUsageDescription, NSLocationAlwaysUsageDescription, NSLocationUsageUsage) to the info.plist.
I set my Share Extension project to "Linker Behavior: Link All" and published it to the market in this way. This way my problem was solved.
Hello,
As
@Pelin Konaray
said:
I saw that the problem was caused by the Share Extension project.
If I don't set it to "Linker Behavior: Link All" in the Share Extension project, when I submit the app to the AppStore, Apple forces to add these permissions (NSContactsUsageDescription, NSMicrophoneUsageDescription, NSAppleMusicUsageDescription, NSSiriUsageDescription, NSLocationAlwaysUsageDescription, NSLocationUsageUsage) to the info.plist.
I set my Share Extension project to "
Linker Behavior: Link All
" and published it to the market in this way. This way my problem was solved.
For more details, you can refer to
Using the Linker
in the doc-
iOS Build Mechanics - Xamarin | Microsoft Learn
Best Regards,
Wenyan Zhang
If the answer is the right solution, please click "
Accept Answer
" and kindly upvote it. If you have extra questions about this answer, please click "
Comment
".
Note: Please follow the steps in our
documentation
to enable e-mail notifications if you want to receive the related email notification for this thread.