add-app-cliplisted
Install: claude install-skill tassiovale/claude-code-kit
# Add an App Clip to an Expo App
Adds an iOS App Clip target to an Expo project. The Clip lives in `targets/clip/`, ships alongside the parent app, and is invoked from a URL on the app's domain via an Apple App Site Association (AASA) file.
The parent app's bundle ID becomes `com.<username>.<app-name>` and the Clip's is automatically derived as `<parent>.clip` (e.g. `com.bacon.may20.clip`).
## 1. Set `bundleIdentifier` and `appleTeamId`
`bun create target` warns if these are missing. Add to `app.json`:
```json
{
"expo": {
"ios": {
"bundleIdentifier": "com.<username>.<app-name>",
"appleTeamId": "XX57RJ5UTD"
}
}
}
```
## 2. Add the App Clip target
```sh
bun create target clip
```
This installs [`@bacons/apple-targets`](https://github.com/EvanBacon/expo-apple-targets), adds it to the `plugins` array in `app.json`, and writes:
- `targets/clip/expo-target.config.js` — the target's config plugin
- `targets/clip/Info.plist` — Clip Info.plist
- `targets/clip/AppDelegate.swift`, `Assets.xcassets`, etc.
Pick a good icon or reuse the existing one defined in the app — check it with `bunx expo config` under the `icon` or `ios.icon` key.
## 3. Wire up associated domains
The parent app and the Clip each need the Associated Domains entitlement pointing at the domain that hosts the AASA file.
In `app.json`, add both `applinks:` (parent) and `appclips:` (Clip invocation) entries:
```json
{
"expo": {
"ios": {
"associatedDomains": [
"appl