checkApp

Stores

ITMS-90685: CFBundleIdentifier collision

Two bundles inside the app share one identifier.

What is ITMS-90685?

Apple's refusal when two bundles inside the app share one CFBundleIdentifier: usually an app extension given the app's own identifier, or a framework embedded in the app and again inside an extension. Give each extension its own identifier under the app's, and embed each framework once.

Where it comes from in a Flutter app

Every bundle inside the app needs its own identifier. Flutter apps add extensions for home screen widgets, share sheets and notification services, and two things go wrong there: an extension target copied from the app keeps the app's identifier, or a framework is embedded both in the app and again inside the extension.

How to fix it

  1. Run the free build check on the .ipa. It names the identifier and both bundles that carry it.
  2. Give each extension an identifier under the app's own, such as com.example.app.widget.
  3. In the extension target's Frameworks settings in Xcode, set shared frameworks to Do Not Embed, so they are embedded only in the app.
  4. Build and upload again.

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