Activity State
Send small Codable state from a companion app to a DynamicLake extension.
Overview
Use DynamicLakeActivityCenter from the companion app. Do not post activity state from extension UI.
Use DynamicLakeActivityStateReader in direct extension views. Use provider context when building simulator or demo UI.
Define State
Keep state small and stable.
import DynamicLakeKit
struct ClockActivityState: DynamicLakeLiveActivityState {
var timeText: String
}
Open With State
Use the extension bundle identifier, not the companion app bundle identifier.
try DynamicLakeActivityCenter.setActivityActive(
true,
extensionBundleIdentifier: "com.example.ClockDynamicLakeExtension",
title: "Clock",
priority: .normal,
supportsSneakPeek: true,
size: .large,
state: ClockActivityState(timeText: "12:45")
)
Update State
Post the new state when the activity is already active.
try DynamicLakeActivityCenter.updateActivityState(
extensionBundleIdentifier: "com.example.ClockDynamicLakeExtension",
state: ClockActivityState(timeText: "12:46")
)
Read State
In a direct extension view, create a reader with an initial fallback value.
@StateObject private var stateReader = DynamicLakeActivityStateReader<ClockActivityState>(
initialState: ClockActivityState(timeText: "--:--")
)
Render from stateReader.state.
Text(stateReader.state?.timeText ?? "--:--")
Close Activity
Close the activity when it should disappear.
DynamicLakeActivityCenter.closeActivity(
extensionBundleIdentifier: "com.example.ClockDynamicLakeExtension"
)
Topics
State APIs
DynamicLakeActivityCenterDynamicLakeActivityStateReaderDynamicLakeLiveActivityStateDynamicLakeEmptyLiveActivityStateDynamicLakeActivityCommandLiveActivityPriority