Likely to be questionedApp Store
Every purpose-string key in Info.plist is one Apple defines
What is checked This rule is decided by code from the built app and the listing: ios.built.info.
Applies to every app
Checked from source only, nothing built or uploaded, built, not yet uploaded, on a test track, submitted and in review, published
The rule, in our words
- Privacy: Supply your privacy practices and collected data types at submission for the product page. Request only data a feature actually needs, ideally when the person first uses that feature; avoid asking at launch unless the app cannot work without it. Aim for a purpose string that is a short, specific, active sentence saying how the app uses the access (sentence case, ends with a period); vague or imperative strings are the counter-examples. If you show a custom screen before a system permission alert (camera, microphone, location, contacts, calendar, tracking), include only one button, titled something like "Continue" or "Next" rather than "Allow", that opens the system alert, with no close or cancel path. Offering incentives, imitating the alert, showing an image of the alert, or annotating the screen behind it will be rejected by App Review. For tracking at launch, the system alert must appear before any tracking data is collected.
Okkok never stores the stores' text. Each item above is our paraphrase, and the link is the page it rests on, verified unchanged by fingerprint on every run.
The other store
- Google's form also declares purpose, optional/required status, encryption in transit and deletion path, and is required even for apps collecting nothing; Apple's paraphrase lists only practices and data types. same
- Google requires a disclosure dialog when collection is unexpected; Apple does not require a pre-alert screen but constrains its form if one is shown (one button, no cancel). Both forbid incentives and imitation of system prompts. partial
- Google mandates the pre-prompt dialog for background location with required wording ("location", background/closed); Apple leaves the screen optional and specifies its button design. partial
- none. same
Check your app
pip install git+https://github.com/petresandu-cloud/okkok
okkok audit path/to/app
The report names this rule as apple.purpose-string-keys-are-real and says what to do, who does it, where, and how it knows.