checkApp

Stores

ITMS-91053: Missing API declaration

Required-reason API used without a declared reason.

What is ITMS-91053?

Apple's rejection for calling a required-reason API without declaring a reason in a privacy manifest. It arrives at upload, names the APIs it found, and there is no warning build beforehand. The store readiness audit is mostly about this class of problem.

Where it comes from in a Flutter app

Apple reads the binaries of the app and of every plugin for calls to APIs it lists as needing a reason, and compares them with the privacy manifests in the build. In a Flutter app the calls usually come from plugins: shared_preferences reads user defaults, plugins that work with files may read file timestamps, and some SDKs read free disk space or the system boot time. A plugin shipped as a framework carries its own PrivacyInfo.xcprivacy; one linked statically brings it in a resource bundle. A plugin version without one, or your own native code, falls to the app's manifest.

How to fix it

  1. Run the free build check on the .ipa. It names the API category and the framework the call came from.
  2. Update that plugin. The widely used ones added a privacy manifest in 2024, when Apple started enforcing this.
  3. If the call is in your own code, or the plugin cannot be updated, add PrivacyInfo.xcprivacy to the Runner target and declare the category under NSPrivacyAccessedAPITypes with the reason from Apple's list that matches your use.
  4. Upload again. The email from App Store Connect lists each category it still finds.

The free build check reads your .ipa in the browser and names the cause of this and the other rejections, without uploading anything.

Or have the whole build checked: the store readiness audit is €190, 2 working days.

All rejection codes