new·The score now tells you which way it movedA brain's exam only ever grows: its own material writes questions, and so does every question a real caller asked and did not get answered. The score is a percentage over that growing set, so a brain that learned more could post a smaller number — and this week three did. One of them answered two MORE questions than the week before and showed eighteen points less. Printed as a single percentage, that reads as decline to a reader and as punishment to anyone who contributes material.all news →
mozg.beta
Sign in

Expo · EAS · all subjects

build-reference/ios-capabilities

23 notes, read out of this brain and free to use. Each one was extracted from a source and is re-checked against its exam.

iOS capabilities automatic synchronization with eas build

When you run `eas build`, EAS Build automatically synchronizes capabilities on the Apple Developer Console with your local entitlements configuration. Capabilities are web services provided by Apple, similar to AWS or Firebase services. This feature can be disabled by setting the environment variable `EXPO_NO_CAPABILITY_SYNC=1` before running `eas build`.

iOS entitlements configuration in bare React Native projects

In an existing React Native project, the entitlements are read from your **ios/**/\.entitlements file.

Enabling iOS capabilities with eas build

If a supported entitlement is present in the entitlements file, running `eas build` will enable it on Apple Developer Console. If the capability is already enabled, EAS Build will skip it.

Disabling iOS capabilities with eas build

If a capability is enabled for your app remotely on Apple Developer Console, but not present in the native entitlements file, running `eas build` will automatically disable it.

Broadcast push notifications example configuration

To enable broadcast push notifications in your app.json: ```json { "expo": { "ios": { "usesBroadcastPushNotifications": true } } } ```

Debugging iOS capabilities with eas build

You can run `EXPO_DEBUG=1 eas build` to get more detailed logs regarding capability syncing. To disable capability syncing entirely, use `EXPO_NO_CAPABILITY_SYNC=1 eas build`. To see all currently enabled capabilities, visit Apple Developer Console, find your app's bundle identifier, and click on it to view the list of enabled capabilities.

Manual iOS capabilities setup with Xcode

For projects that do not use Expo Prebuild to continuously generate the native android and ios directories, you can manually enable Apple capabilities in Xcode by opening the ios directory with `xed ios` (or running `npx expo prebuild -p ios` if you don't have an ios directory), then following the steps in Xcode to add a capability.

List devices registered for ad hoc provisioning

Run `eas device:list` to see any devices registered via `eas device:create`.

Device registration timing on Apple Developer Portal

Devices registered with Expo for ad hoc provisioning appear on the Apple Developer Portal only when they are used to generate a provisioning profile for a new internal build with EAS Build or to re-sign an existing build with `eas build:resign`. On new or recently renewed Apple Developer Program memberships, Apple can take up to 24–72 hours to finish processing a newly registered device, and during that time the device cannot be added to provisioning profiles. As a result, the first build or re-sign that includes a new device may fail.

Delete devices from Expo account

Run `eas device:delete` to remove a device from the Expo account list. This command will also prompt to disable the device on the Apple Developer Portal. Disabled devices still count against Apple's limit of 100 devices for ad hoc distribution per app.

iOS entitlements configuration location

In an Expo app, entitlements are read from the introspected app config. Edit them via the ios.entitlements field in your app config file. View your introspected config by running npx expo config --type introspect and look for the ios.entitlements object. In a bare React Native project, entitlements are read from the ios/**//*.entitlements file.

EAS Build capability synchronization workflow

When you run eas build, EAS Build automatically synchronizes capabilities on the Apple Developer Console with your local entitlements configuration. If a supported entitlement is present in the entitlements file, running eas build will enable it on Apple Developer Console; if already enabled, it will skip it. If a capability is enabled remotely but not present in the native entitlements file, running eas build will automatically disable it.

Disable iOS capability synchronization

The automatic capability synchronization feature can be disabled by running EXPO_NO_CAPABILITY_SYNC=1 eas build.

EAS Build supports iOS capabilities

EAS Build will only enable capabilities that it has built-in support for. Any unsupported entitlements must be manually enabled via Apple Developer Console.

Supported iOS capabilities and entitlements

EAS Build supports the following capabilities with their corresponding entitlement strings: Access Wi-Fi Information (com.apple.developer.networking.wifi-info), App Attest (com.apple.developer.devicecheck.appattest-environment), App Groups (com.apple.security.application-groups), Apple Pay Later Merchandising (com.apple.developer.pay-later-merchandising), Apple Pay Payment Processing (com.apple.developer.in-app-payments), Associated Domains (com.apple.developer.associated-domains), AutoFill Credential Provider (com.apple.developer.authentication-services.autofill-credential-provider), ClassKit (com.apple.developer.ClassKit-environment), Communicates with Drivers (com.apple.developer.driverkit.communicates-with-drivers), Communication Notifications (com.apple.developer.usernotifications.communication), Custom Network Protocol (com.apple.developer.networking.custom-protocol), Data Protection (com.apple.developer.default-data-protection), DriverKit Allow Third Party UserClients (com.apple.developer.driverkit.allow-third-party-userclients), DriverKit Family Audio development (com.apple.developer.driverkit.family.audio), DriverKit Family HID Device development (com.apple.developer.driverkit.family.hid.device), DriverKit Family HID EventService development (com.apple.developer.driverkit.family.hid.eventservice), DriverKit Family Networking development (com.apple.developer.driverkit.family.networking), DriverKit Family SCSIController development (com.apple.developer.driverkit.family.scsicontroller), DriverKit Family Serial development (com.apple.developer.driverkit.family.serial), DriverKit Transport HID development (com.apple.developer.driverkit.transport.hid), DriverKit USB Transport development (com.apple.developer.driverkit.transport.usb), DriverKit for Development (com.apple.developer.driverkit), Extended Virtual Address Space (com.apple.developer.kernel.extended-virtual-addressing), Family Controls (com.apple.developer.family-controls), FileProvider TestingMode (com.apple.developer.fileprovider.testing-mode), Fonts (com.apple.developer.user-fonts), Group Activities (com.apple.developer.group-session), HealthKit (com.apple.developer.healthkit), HomeKit (com.apple.developer.homekit), Hotspot (com.apple.developer.networking.HotspotConfiguration), Increased Memory Limit (com.apple.developer.kernel.increased-memory-limit), Inter-App Audio (inter-app-audio), Journaling Suggestions (com.apple.developer.journal.allow), Low Latency HLS (com.apple.developer.low-latency-streaming), MDM Managed Associated Domains (com.apple.developer.associated-domains.mdm-managed), Managed App Installation UI (com.apple.developer.managed-app-distribution.install-ui), Maps (com.apple.developer.maps), Matter Allow Setup Payload (com.apple.developer.matter.allow-setup-payload), Media Device Discovery (com.apple.developer.media-device-discovery-extension), Messages Collaboration (com.apple.developer.shared-with-you.collaboration), Multipath (com.apple.developer.networking.multipath), NFC Tag Reading (com.apple.developer.nfc.readersession.formats), Network Extensions (com.apple.developer.networking.networkextension), 5G Network Slicing (com.apple.developer.networking.slicing.appcategory or com.apple.developer.networking.slicing.trafficcategory), On Demand Install Capable for App Clip Extensions (com.apple.developer.on-demand-install-capable), Personal VPN (com.apple.developer.networking.vpn.api), Push Notifications (aps-environment), Push to Talk (com.apple.developer.push-to-talk), Recalibrate Estimates (com.apple.developer.healthkit.recalibrate-estimates), Sensitive Content Analysis (com.apple.developer.sensitivecontentanalysis.client), Shallow Depth and Pressure (com.apple.developer.submerged-shallow-depth-and-pressure), Shared with You (com.apple.developer.shared-with-you), Sign In with Apple (com.apple.developer.applesignin), SiriKit (com.apple.developer.siri), System Extension (com.apple.developer.system-extension.install), Tap to Pay on iPhone (com.apple.developer.proximity-reader.payment.acceptance), Tap to Present ID on iPhone Display Only (com.apple.developer.proximity-reader.identity.display), TV Services (com.apple.developer.user-management), Time Sensitive Notifications (com.apple.developer.usernotifications.time-sensitive), Wallet (com.apple.developer.pass-type-identifiers), WeatherKit (com.apple.developer.weatherkit), Wireless Accessory Configuration (com.apple.external-accessory.wireless-configuration), and iCloud (com.apple.developer.icloud-container-identifiers). HLS Interstitial Previews is not supported.

Enable broadcast push notifications in app config

Apple's Broadcast option lives inside the Push Notifications capability and has no entitlement of its own. To enable broadcast push notifications, set ios.usesBroadcastPushNotifications to true in your app.json config file. Example: { "expo": { "ios": { "usesBroadcastPushNotifications": true } } }

Broadcast push notifications requirements

EAS Build sets the Broadcast option only when it enables the Push Notifications capability, so your entitlements also need aps-environment. Apple limits broadcast push notifications to Live Activities on iOS 18 and later. If you enable Broadcast only in Apple Developer Console, the next eas build resets the Push Notifications capability to its default options and turns Broadcast off. Apple Push Notification service (APNs) then rejects your channel management requests with a FeatureNotEnabled error.

Capability identifiers automatic registration

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.

Debug iOS capability syncing

Run EXPO_DEBUG=1 eas build to get more detailed logs regarding capability syncing. To see all currently enabled capabilities, visit Apple Developer Console, find the bundle identifier matching your app, and click on it to see a list of all currently enabled capabilities.

Manual capability setup via Xcode

For projects that do not use Expo Prebuild to continuously generate native directories: Open the ios directory in Xcode with xed ios. If you don't have an ios directory, run npx expo prebuild -p ios to generate one. Then follow the steps to add a capability in Xcode.

Manual capability setup via Apple Developer Console

First, add the respective key/value pairs to your ios/[app]/[app].entitlements file. Log into Apple Developer Console and click on Certificates, IDs & Profiles, then navigate to the Identifiers page. Choose the bundle identifier that matches your app. Scroll down and enable a capability (some may require extra setup). Scroll to the top and press Save. A dialog saying Modify App Capabilities will appear; press Confirm to continue. You will need to regenerate any provisioning profiles that use this bundle identifier before they are valid for building a code signed production .ipa.

iOS build failure due to capability mismatch

If adding capabilities has not been done correctly, your iOS native build will fail with an error similar to: 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.

Provisioning profiles must be regenerated after capability changes

When manually enabling Apple capabilities via Xcode or Apple Developer Console, any existing Apple provisioning profiles must be regenerated to be valid for building.

Give your agent this brain