Guideline 5.1.2 / ITMS-91053 › Generator
PrivacyInfo.xcprivacy generator
Got an "ITMS-91053: Missing API declaration" email after uploading a Capacitor, Flutter or React Native build? Paste it here. You pick a reason for each API category the email names, and get a privacy manifest file to add to your Xcode project.
Free. It runs entirely in your browser; the email text and your choices are not uploaded or stored.
1. API categories and reasons
For each category, tick the reason that describes what the code actually does. Codes and their wording come from Apple's "Describing use of required reason API" documentation (checked 2026-09-29). Where a common plugin is involved we say which code usually fits and why; confirm it against what your app does.
2. Tracking
3. Collected data (optional)
Declares what your own app code collects and sends off the device. It should match your App Privacy answers in App Store Connect. SDKs declare their own collection in their own manifests. Leave everything unticked to output an empty list.
4. Your file
Where to put it
- Check for an existing file first. Search the
iosfolder forPrivacyInfo.xcprivacy. Newer project templates (recent React Native versions, for example) already include one. If yours exists, merge these entries into it instead of adding a second file to the same target. - Save it next to the app's Info.plist:
- Capacitor:
ios/App/App/PrivacyInfo.xcprivacy - Flutter:
ios/Runner/PrivacyInfo.xcprivacy - React Native:
ios/<YourProjectName>/PrivacyInfo.xcprivacy
- Capacitor:
- Add it to the target in Xcode. Copying the file into the folder is not enough. Open the workspace (
ios/App/App.xcworkspacefor Capacitor,ios/Runner.xcworkspacefor Flutter), drag the file into the App or Runner group in the project navigator, and in the dialog tick your app target under "Add to targets". - Confirm it is bundled: select the target, open Build Phases > Copy Bundle Resources, and check
PrivacyInfo.xcprivacyis listed. - Update the plugins the email named (see the notes above), raise the build number, archive and upload. If the email does not come back for that build, the declaration was accepted.
Honest notes
Apple decides. This tool writes the file in the format Apple documents; it cannot know what your code does. Declared reasons must match real behaviour, and choosing a reason that does not fit is itself a review problem. Following this does not guarantee acceptance.
- Third-party SDKs need their own manifests. Apple's documentation says an SDK cannot rely on the app's manifest to cover its API use. If the email names a file inside
Frameworks/, the fix is usually to update that plugin or SDK to a version that ships its own manifest. - If the email names your app binary (
App,Runneror your app's name), the code is linked into your app, which includes plugins linked statically. Your app's manifest is the right place for those. - Capacitor versions. Capacitor's own documentation says to update to at least 4.8.2, 5.7.4, 6.0.0 or 7.0.0 (by major version); 3 and older are not supported.
- Only the categories on this page need reasons. Apple also documents SDK-only reasons (marked below); an app must not use those in its own manifest.
- Nothing is uploaded. The email text, your choices and the file stay in this browser tab.
Source: Apple Developer Documentation, "Describing use of required reason API" and the NSPrivacyAccessedAPIType reference (developer.apple.com, read 2026-09-29). Capacitor "Privacy Manifest" docs (capacitorjs.com, read 2026-09-29). Apple updates these lists; the current text at developer.apple.com is the authority.
Want someone to handle it?
Rejection fix, $99: we read the full message, find which code and plugins trigger it, fix the project, upload a new build and draft any reply for your approval. Target turnaround 72 hours from access. Apple still makes the final decision, and its review time is separate.