When you make a change to your iOS entitlements, this change needs to be updated remotely on Apple's servers before making a production build. EAS Build automatically synchronizes capabilities on the Apple Developer Console with your local entitlements configuration when you run eas build. Capabilities are web services provided by Apple, think of them like AWS or Firebase services.
This feature can be disabled with EXPO_NO_CAPABILITY_SYNC=1 eas build
In bare workflow apps, the entitlements are read from your ios/**/*.entitlements file.
In managed workflow, the entitlements are read from the introspected Expo config. You can see what your introspected config looks like by running npx expo config --type introspect in your project, then look for the ios.entitlements object for the results.
Merchant IDs, App Groups, and CloudKit Containers can all be automatically registered and assigned to your app. These assignments require Apple cookies authentication (running locally) as the official App Store Connect API does not support these operations.
You can run EXPO_DEBUG=1 eas build to get more detailed logs regarding the capability syncing.
If you have trouble using this feature, you can disable it with the environment variable EXPO_NO_CAPABILITY_SYNC=1.
To see all of the currently enabled capabilities, visit Apple Developer Console, and find the bundle identifier matching your app, if you click on it you should see a list of all the currently enabled capabilities.
First step is to add the respective key/value pairs to your ios/[app]/[app].entitlements (or more specific entitlements file for multi-target apps). You can refer to Supported Capabilities to determine which entitlements keys should be added.
Choose the bundle identifier that matches your app's bundle identifier.
Scroll down and enable a capability, some capabilities may require extra setup.
Scroll to the top and press "Save". You will see a dialog that says "Modify App Capabilities", press "Confirm" to continue. You will need to regenerate any provisioning profiles that use this bundle identifier before they'll be valid for building a code signed production ipa.
If adding capabilities process has not been done correctly then your iOS native build will fail with an error that looks something like:
❌ error: Provisioning profile "*[expo] app.bacon.hello AppStore ..." doesn't support the Associated Domains capability.
❌ error: Provisioning profile "*[expo] app.bacon.hello AppStore ..." doesn't include the com.apple.developer.associated-domains entitlement.