← Fixes/Permissions

Fix: App Permission Errors

Permission rejections are among the most common — and most fixable — causes of app rejection. Here is what each permission error means and exactly how to fix it.

Updated Mar 2026·6 min read

The principle: Every permission your app requests must be justified by a feature the user can see. Permissions with no visible purpose are rejected. Permissions with no usage description string are rejected. Permissions declared in code but not declared in Data Safety (Android) cause policy violations.

Missing NSUsageDescription string (iOS)

iOS

Cause

Your Info.plist declares a permission (camera, location, contacts, etc.) but does not include the corresponding NSUsageDescription string explaining why it is needed.

Fix

Add the usage description for every permission declared. Open Info.plist and add the key for each permission (e.g. NSCameraUsageDescription, NSLocationWhenInUseUsageDescription). The string must clearly explain to the user why the app needs this permission.

Excessive permissions — not justified by features

Both

Cause

Your app requests permissions that are not used by any visible feature, or requests a broader permission than the feature requires.

Fix

Audit AndroidManifest.xml or Info.plist and remove every permission not directly required by a user-facing feature. Replace broad permissions with narrower alternatives where available (e.g. ACCESS_FINE_LOCATION vs ACCESS_COARSE_LOCATION, or READ_MEDIA_IMAGES vs READ_EXTERNAL_STORAGE).

App Tracking Transparency not implemented (iOS)

iOS

Cause

Your app tracks users across apps or websites (directly or via an SDK like Meta or Google AdMob) but does not request ATT permission through Apple's AppTrackingTransparency framework.

Fix

Implement ATT using the AppTrackingTransparency framework. Call requestTrackingAuthorization before any tracking begins. Declare NSUserTrackingUsageDescription in Info.plist. Declare tracking in your Privacy Manifest.

Data Safety section incomplete or inconsistent (Android)

Android

Cause

Your Data Safety form in Play Console is incomplete, or the declared data collection does not match the permissions your app actually requests.

Fix

In Play Console, go to App Content > Data Safety. Complete every section. For each permission your app requests, declare the corresponding data type collected and its purpose. Include data collected by third-party SDKs even if you did not write the code.

Background location requested without justification

Both

Cause

Your app requests Always On (background) location but the use case does not justify it, or no explanation is provided to the user before the system prompt.

Fix

Change to 'While Using' location unless your app has a clear background location use case (navigation, delivery tracking). If background location is genuinely needed, explain this to the user before the system prompt appears, and document the use case clearly in your store listing.

Contacts permission in a non-social app

Both

Cause

Your app requests access to the user's contacts but the app category or description does not justify this.

Fix

Remove the contacts permission if it is not required. If it is required, ensure the usage description explains exactly why (e.g. 'To help you invite contacts to join your team'). Be prepared to justify this to a reviewer.

Permission audit checklist

List every permission in AndroidManifest.xml or Info.plist

For each permission: name the specific feature that requires it

Remove any permission with no corresponding feature

Replace broad permissions with narrow alternatives where possible

Verify every iOS permission has a usage description string

Verify Android Data Safety form matches every permission declared

If using ATT on iOS: confirm requestTrackingAuthorization is called before tracking starts

Run the AppTester Health Check — it flags common permission issues automatically

Scan for permission issues before submission

The AppTester Health Check scans your binary for permission over-requests, missing usage strings, and ATT compliance issues. Free, no account required.