<< All versions
Define attributes (Swift, in generated
Skill v1.0.1
currentAutomated scan100/100khadinakbarlabs/expo-mobile-app-builder/add-live-activity
+4 new
──Details
PublishedNovember 4, 2026 at 04:07 PM
Content Hashsha256:4abb4e372329a513...
Git SHA3b1834833207
Bump Typepatch
──Files
Files (1 file, 1.8 KB)
SKILL.md1.8 KBactive
SKILL.md · 72 lines · 1.8 KB
name: "add-live-activity" description: "Add a Live Activity for Lock Screen + Dynamic Island via expo-live-activity. Use when the user says 'Live Activity', 'Dynamic Island', 'Lock Screen widget', 'live updates'." metadata: version: "1.0.1"
Add Live Activity
Lock Screen + Dynamic Island updates via ActivityKit. Use for time-bound info: orders, rides, sports, workouts, timers.
Install
bash
npm install expo-live-activitynpm exec --no -- expo prebuild --clean
(For more control, also see Voltra: react-native-live-activity.)
app.json
json
{"expo": {"plugins": ["expo-live-activity"],"ios": {"infoPlist": {"NSSupportsLiveActivities": true,"NSSupportsLiveActivitiesFrequentUpdates": true}}}}
Define attributes (Swift, in generated ios/ after prebuild)
swift
struct DeliveryAttributes: ActivityAttributes {public struct ContentState: Codable, Hashable {var minutesAway: Intvar status: String}var orderNumber: String}
Start / update / end from JS
tsx
import * as LiveActivity from 'expo-live-activity';// Startconst activityId = await LiveActivity.startActivity({attributes: { orderNumber: '1234' },contentState: { minutesAway: 30, status: 'Preparing' },});// Updateawait LiveActivity.updateActivity(activityId, { minutesAway: 20, status: 'On the way' });// Endawait LiveActivity.endActivity(activityId, { minutesAway: 0, status: 'Delivered' });
Push updates via APNs
Topic: <bundle-id>.push-type.liveactivity. Push the activity's pushToken (returned from startActivity) for remote updates.
Limitation
- iOS-only (no Android)
- 4-hour max activity duration; can be extended via push update
Reference
references/01-expo-sdk-54.md