Guides
Plan-enterprise-icon
Expo Application Services
API Reference

iOS App Extensions

App extensions let you extend custom functionality and content beyond your app and make it available to users while they’re interacting with other apps or iOS system functionality. EAS Build provides affordances for including app extensions in both bare and managed projects.

Bare projects

When you build a bare project, EAS CLI will automatically detect app extensions configured in your Xcode project and generate all necessary credentials for each target, or you can provide them in credentials.json (Learn more).

Managed projects (experimental support)

A typical, simple managed project we have a single application target and no app extensions. You can add an app extension to your project by writing a config plugin (or using a library that creates an extension with its own config plugin). Config plugins let you add targets to the Xcode project that is generated during the "Prebuild" phase of a build job.
Declaring app extensions with extra.eas.build.experimental.ios.appExtensions in your app config makes it possible for EAS CLI to know what app extensions exist before the build starts (before the Xcode project has been generated) to ensure that the required credentials are generated and validated. Config plugins are also able to modify the app config, and in most cases if you are using a library that adds an extension then the config plugin will also add the required configuration to declare the extension in your app config. If you are writing a library, we recommend that you consider this. The following is an example of what this would look like if it were declared directly in app.json:
{
  "expo": {
    ...
    "extra": {
      "eas": {
        "build": {
          "experimental": {
            "ios": {
              "appExtensions": [
                {
                  "targetName": "myappextension",
                  "bundleIdentifier": "com.myapp.extension",
                  "entitlements": {
                    "com.apple.example": "entitlement value"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
  • Message-iconAsk a question on the forums
  • Edit-iconEdit this page

Was this doc helpful?