App stores actively audit permission declarations for proportionality — a notes app requesting ACCESS_FINE_LOCATION or NSCameraUsageDescription without a plausible justification triggers manual review and frequently results in rejection or removal. Under GDPR Art. 5(1)(c) (data minimisation) and CWE-272 (least privilege violation), requesting permissions beyond what your app's core function requires constitutes a legal compliance failure, not just a policy violation. Apple's privacy nutrition label (apple-privacy-permission-usage) surfaces every declared permission to users before install; overly broad permission sets reduce install conversion and increase uninstalls. iOS rejects binaries that declare a permission in Info.plist without a corresponding NS*UsageDescription string — this is an automated binary validation failure.
Medium because missing `NS*UsageDescription` strings trigger automated iOS binary rejection, and overly broad permission sets expose the app to GDPR Art. 5(1)(c) violations and store reviewer scrutiny.
Audit app.json for every declared permission and add a precise usage description for iOS. Remove any permissions your app does not actually invoke at runtime.
// app.json
{
"expo": {
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "Used to scan QR codes for event check-in.",
"NSPhotoLibraryUsageDescription": "Used to attach photos to your reports."
}
},
"android": {
"permissions": [
"android.permission.CAMERA"
]
}
}
}
For each permission, verify with a code search that it is actually called (Camera.requestCameraPermissionsAsync(), etc.) — remove any that aren't. Cross-reference with the App Store Privacy & Data audit (app-store-privacy-data) for the full ATT and data collection declaration requirements.
mobile-store-readiness.build-config.permissions-justifiedmediumapp.json for ios.infoPlist with privacy permissions (NSCameraUsageDescription, NSPhotoLibraryUsageDescription, NSLocationWhenInUseUsageDescription, etc.) and android.permissions array. Each permission listed should have a clear justification in the app's privacy policy or usage description. Look for excessive permissions (e.g., requesting WRITE_EXTERNAL_STORAGE if not needed, or tracking location when not required).app-store-privacy-data) provides a deeper analysis of privacy declarations and App Tracking Transparency compliance."Camera permission requested but no usage description (NSCameraUsageDescription) in Info.plist" or "App requests both READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE but only displays images (read-only)""ios": {
"infoPlist": {
"NSCameraUsageDescription": "We use your camera to capture photos for...",
"NSPhotoLibraryUsageDescription": "We need access to your photo library to...",
"NSLocationWhenInUseUsageDescription": "We use your location to find nearby..."
}
}
"android": {
"permissions": ["android.permission.CAMERA", "android.permission.ACCESS_FINE_LOCATION"]
}