activitykit
ActivityKit
ActivityKit owns real-time, glanceable Live Activities displayed on the Lock
Screen and, on supported devices, Dynamic Island. StandBy, CarPlay, and a
paired Mac can also display Live Activities, but do not blur that core routing:
ordinary Home Screen/timeline widgets belong in widgetkit, and generic APNs
setup belongs in push-notifications. Live Activity push payload shape stays in
ActivityKit: device-token updates use apns-push-type: liveactivity and
apns-topic: <bundle-id>.push-type.liveactivity, while aps.content-state must
decode into the app's actual ActivityAttributes.ContentState Codable shape.
Do not assume Date or ClosedRange<Date> use Unix timestamp
lowerBound/upperBound dictionaries unless the Swift model and server
contract coordinate that encoding. Boundary answers that keep ActivityKit APNs
payloads, content-state, or Live Activity data contracts in scope should
include these payload-shape invariants even when routing generic APNs setup
elsewhere. Patterns target iOS 26+ with Swift 6.3;
modern ActivityContent lifecycle examples require iOS 16.2+ unless noted.
See references/activitykit-patterns.md for complete code patterns including push payload formats, concurrent activities, state observation, and testing.