Skip to main content
Expo Apple Targets supports 40+ native Apple extension types, enabling you to extend your app’s functionality beyond the main application. Each target type serves a specific purpose in the Apple ecosystem.

What are Apple targets?

Apple targets are separate executables that extend your app’s functionality in specific contexts:
  • Widgets appear on the home screen and lock screen
  • App Clips are lightweight versions of your app that launch instantly
  • Extensions integrate with system features like Share Sheet, Safari, Photos, etc.
  • Watch Apps run on Apple Watch as companion experiences
  • Network Extensions provide VPN, content filtering, and DNS proxy capabilities
Each target runs in its own process with specific entitlements and capabilities.

Target categories

Widgets

Home screen widgets, Live Activities, and watch complications

App Clips

Instant app experiences without full installation

Extensions

Share, Photos, Safari, and system integrations

Watch Apps

Companion apps and complications for Apple Watch

Notifications

Rich notification content and media attachments

Safari

Web extensions and content blockers

Network

VPN, DNS proxy, and content filtering

Complete List

All 40+ supported target types

How targets work

Each target is defined by:
  1. Extension point identifier - Apple’s unique identifier for the extension type (e.g., com.apple.widgetkit-extension)
  2. Product type - The Xcode product type that determines build settings
  3. Frameworks - System frameworks the target links against
  4. Entitlements - Special permissions and capabilities

Target architecture

Targets in Expo Apple Targets use Continuous Native Generation (CNG):
project/
├── targets/              # Your target source code (outside /ios)
│   ├── my-widget/
│   │   ├── expo-target.config.js
│   │   ├── Widget.swift
│   │   └── Assets.xcassets/
│   └── my-clip/
│       ├── expo-target.config.js
│       └── AppDelegate.swift
└── ios/                  # Generated Xcode project
    └── MyApp.xcodeproj   # Links to targets/ via expo:targets
When you run npx expo prebuild, the plugin:
  1. Scans the /targets directory for expo-target.config.js files
  2. Creates native targets in the Xcode project
  3. Links your source files to the project via expo:targets virtual folder
  4. Configures build settings, frameworks, and entitlements
  5. Sets up code signing and provisioning
Your changes to files in the expo:targets folder in Xcode are saved to the /targets directory, not the generated /ios directory. This enables true Continuous Native Generation.

App Groups and data sharing

Many target types support App Groups for sharing data between your main app and extensions:
These target types automatically sync the com.apple.security.application-groups entitlement from your main app:
  • widget - Home screen widgets
  • clip - App Clips
  • share - Share extensions
  • bg-download - Background download extensions
  • watch-widget - Watch complications
  • keyboard - Custom keyboards
  • file-provider - File provider extensions
Use the ExtensionStorage API to share data via App Groups:
import { ExtensionStorage } from "@bacons/apple-targets";

const storage = new ExtensionStorage("group.com.myapp.data");
storage.set("counter", 42);
ExtensionStorage.reloadWidget();

Product types

Most extensions use the standard com.apple.product-type.app-extension product type, but some have special types:
Target TypeProduct Type
clipcom.apple.product-type.application.on-demand-install-capable
watchcom.apple.product-type.application
app-intentcom.apple.product-type.extensionkit-extension
All otherscom.apple.product-type.app-extension

Choosing a target type

Consider these factors when selecting a target type:
  • User context - Where does the user interact with this feature? (home screen, share sheet, Safari, etc.)
  • Data access - Does it need to share data with your main app?
  • Size constraints - App Clips have a 50 MB size limit
  • Capabilities - What system frameworks and APIs do you need?
  • Distribution - Some targets require special provisioning or App Store review

Next steps

Create a target

Use the CLI to scaffold a new target

Target configuration

Configure target settings and behavior

Complete target list

Browse all 40+ supported target types

Example projects

Explore demo apps and examples

Build docs developers (and LLMs) love