1---
2title: iOS Capabilities
3---
4
5import { YesIcon, NoIcon } from '~/ui/components/DocIcons';
6
7When 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.
8
9> This feature can be disabled with `EXPO_NO_CAPABILITY_SYNC=1 eas build`
10
11## Entitlements
12
13In bare workflow apps, the entitlements are read from your `ios/**/*.entitlements` file.
14
15In 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.
16
17## Enabling
18
19If a supported entitlement is present in the entitlements file, then running `eas build` will enable it on Apple Developer Console. If the capability is already enabled, then EAS Build will skip it.
20
21## Disabling
22
23If a capability is enabled for your app remotely, but not present in the native entitlements file, then running `eas build` will automatically disable it.
24
25## Supported Capabilities
26
27EAS Build will only enable capabilities that it has built-in support for, any unsupported entitlements must be manually enabled via [Apple Developer Console][apple-dev-console].
28
29| Support     | Capability                                        | Entitlement string                                                         |
30| ----------- | ------------------------------------------------- | -------------------------------------------------------------------------- |
31| <YesIcon /> | Access Wi-Fi Information                          | `com.apple.developer.networking.wifi-info`                                 |
32| <YesIcon /> | App Attest                                        | `com.apple.developer.devicecheck.appattest-environment`                    |
33| <YesIcon /> | App Groups                                        | `com.apple.security.application-groups`                                    |
34| <YesIcon /> | Apple Pay Payment Processing                      | `com.apple.developer.in-app-payments`                                      |
35| <YesIcon /> | Associated Domains                                | `com.apple.developer.associated-domains`                                   |
36| <YesIcon /> | AutoFill Credential Provider                      | `com.apple.developer.authentication-services.autofill-credential-provider` |
37| <YesIcon /> | ClassKit                                          | `com.apple.developer.ClassKit-environment`                                 |
38| <YesIcon /> | Communicates with Drivers                         | `com.apple.developer.driverkit.communicates-with-drivers`                  |
39| <YesIcon /> | Communication Notifications                       | `com.apple.developer.usernotifications.communication`                      |
40| <YesIcon /> | Custom Network Protocol                           | `com.apple.developer.networking.custom-protocol`                           |
41| <YesIcon /> | Data Protection                                   | `com.apple.developer.default-data-protection`                              |
42| <YesIcon /> | DriverKit Allow Third Party UserClients           | `com.apple.developer.driverkit.allow-third-party-userclients`              |
43| <YesIcon /> | DriverKit Family Audio (development)              | `com.apple.developer.driverkit.family.audio`                               |
44| <YesIcon /> | DriverKit Family HID Device (development)         | `com.apple.developer.driverkit.family.hid.device`                          |
45| <YesIcon /> | DriverKit Family HID EventService (development)   | `com.apple.developer.driverkit.family.hid.eventservice`                    |
46| <YesIcon /> | DriverKit Family Networking (development)         | `com.apple.developer.driverkit.family.networking`                          |
47| <YesIcon /> | DriverKit Family SCSIController (development)     | `com.apple.developer.driverkit.family.scsicontroller`                      |
48| <YesIcon /> | DriverKit Family Serial (development)             | `com.apple.developer.driverkit.family.serial`                              |
49| <YesIcon /> | DriverKit Transport HID (development)             | `com.apple.developer.driverkit.transport.hid`                              |
50| <YesIcon /> | DriverKit USB Transport (development)             | `com.apple.developer.driverkit.transport.usb`                              |
51| <YesIcon /> | DriverKit for Development                         | `com.apple.developer.driverkit`                                            |
52| <YesIcon /> | Extended Virtual Address Space                    | `com.apple.developer.kernel.extended-virtual-addressing`                   |
53| <YesIcon /> | Family Controls                                   | `com.apple.developer.family-controls`                                      |
54| <YesIcon /> | FileProvider TestingMode                          | `com.apple.developer.fileprovider.testing-mode`                            |
55| <YesIcon /> | Fonts                                             | `com.apple.developer.user-fonts`                                           |
56| <YesIcon /> | Group Activities                                  | `com.apple.developer.group-session`                                        |
57| <YesIcon /> | HealthKit                                         | `com.apple.developer.healthkit`                                            |
58| <YesIcon /> | HomeKit                                           | `com.apple.developer.homekit`                                              |
59| <YesIcon /> | Hotspot                                           | `com.apple.developer.networking.HotspotConfiguration`                      |
60| <YesIcon /> | Increased Memory Limit                            | `com.apple.developer.kernel.increased-memory-limit`                        |
61| <YesIcon /> | Inter-App Audio                                   | `inter-app-audio`                                                          |
62| <YesIcon /> | Low Latency HLS                                   | `com.apple.developer.coremedia.hls.low-latency`                            |
63| <YesIcon /> | MDM Managed Associated Domains                    | `com.apple.developer.associated-domains.mdm-managed`                       |
64| <YesIcon /> | Maps                                              | `com.apple.developer.maps`                                                 |
65| <YesIcon /> | Media Device Discovery                            | `com.apple.developer.media-device-discovery-extension`                     |
66| <YesIcon /> | Multipath                                         | `com.apple.developer.networking.multipath`                                 |
67| <YesIcon /> | NFC Tag Reading                                   | `com.apple.developer.nfc.readersession.formats`                            |
68| <YesIcon /> | Network Extensions                                | `com.apple.developer.networking.networkextension`                          |
69| <YesIcon /> | On Demand Install Capable for App Clip Extensions | `com.apple.developer.on-demand-install-capable`                            |
70| <YesIcon /> | Personal VPN                                      | `com.apple.developer.networking.vpn.api`                                   |
71| <YesIcon /> | Push Notifications                                | `aps-environment`                                                          |
72| <YesIcon /> | Push to Talk                                      | `com.apple.developer.push-to-talk`                                         |
73| <YesIcon /> | Recalibrate Estimates                             | `com.apple.developer.healthkit.recalibrate-estimates`                      |
74| <YesIcon /> | Shared with You                                   | `com.apple.developer.shared-with-you`                                      |
75| <YesIcon /> | Sign In with Apple                                | `com.apple.developer.applesignin`                                          |
76| <YesIcon /> | SiriKit                                           | `com.apple.developer.siri`                                                 |
77| <YesIcon /> | System Extension                                  | `com.apple.developer.system-extension.install`                             |
78| <YesIcon /> | TV Services                                       | `com.apple.developer.user-management`                                      |
79| <YesIcon /> | Time Sensitive Notifications                      | `com.apple.developer.usernotifications.time-sensitive`                     |
80| <YesIcon /> | Wallet                                            | `com.apple.developer.pass-type-identifiers`                                |
81| <YesIcon /> | WeatherKit                                        | `com.apple.developer.weatherkit`                                           |
82| <YesIcon /> | Wireless Accessory Configuration                  | `com.apple.external-accessory.wireless-configuration`                      |
83| <YesIcon /> | iCloud                                            | `com.apple.developer.icloud-container-identifiers`                         |
84| <NoIcon />  | HLS Interstitial Previews                         | Unknown                                                                    |
85
86The unsupported capabilities either don't support iOS, or they don't have a corresponding entitlement value. Here are all of the [official Apple capabilities][apple-all-capabilities].
87
88## Capability identifiers
89
90Merchant 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.
91
92## Debugging
93
94You can run `EXPO_DEBUG=1 eas build` to get more detailed logs regarding the capability syncing.
95
96If you have trouble using this feature, you can disable it with the environment variable `EXPO_NO_CAPABILITY_SYNC=1`.
97
98To see all of the currently enabled capabilities, visit [Apple Developer Console][apple-dev-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.
99
100## Manual setup
101
102There are two ways to manually enable Apple capabilities, both systems will require any existing Apple provisioning profiles to be regenerated.
103
104### Xcode
105
106> Preferred method for bare workflow or projects that do **not** using [Expo Prebuild](/workflow/prebuild) to continuously generate the native `ios` and `android` directories.
107
1081. 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.
1092. Then follow [this guide][apple-enable-capability].
110
111### Apple Developer Console
112
113First 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](#supported-capabilities) to determine which entitlements keys should be added.
114
1151. Log into [Apple Developer Console][apple-dev-console]. Click on "Certificates, IDs & Profiles", then navigate to "Identifiers" page.
1162. Choose the bundle identifier that matches your app's bundle identifier.
1173. Scroll down and enable a capability, some capabilities may require extra setup.
1184. 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.
119
120If adding capabilities process has not been done correctly then your iOS native build will fail with an error that looks something like:
121
122```
123❌  error: Provisioning profile "*[expo] app.bacon.hello AppStore ..." doesn't support the Associated Domains capability.
124
125❌  error: Provisioning profile "*[expo] app.bacon.hello AppStore ..." doesn't include the com.apple.developer.associated-domains entitlement.
126```
127
128[apple-enable-capability]: https://help.apple.com/xcode/mac/current/#/dev88ff319e7
129[apple-all-capabilities]: https://help.apple.com/developer-account/#/dev21218dfd6
130[apple-dev-console]: https://developer.apple.com/account/resources/identifiers/list
131