iOS 16.2下Live Activity在模拟器及真机均不显示问题求助
iOS 16.2 Live Activity 无法显示排查方案
检查 Widget Extension 配置
- 确认已添加Live Activity 对应的 Widget Extension,且Extension的Deployment Target也设置为iOS 16.2及以上
- 检查Extension的
Info.plist中是否添加NSSupportsLiveActivities键,值设为YES - 确保Widget Extension的
WidgetConfiguration使用.activity类型,示例代码:
struct SessionActivityWidget: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: SessionAttributes.self) { context in // Live Activity 锁屏状态UI布局 VStack { Text(context.state.time) Text(context.state.exercise) } .padding() } dynamicIsland: { context in DynamicIsland { // Dynamic Island 展开状态UI DynamicIslandExpandedRegion(.leading) { Text(context.state.time) } DynamicIslandExpandedRegion(.trailing) { Text(context.state.exercise) } } compactLeading: { // Dynamic Island 紧凑状态左侧UI Text(context.state.time) } compactTrailing: { // Dynamic Island 紧凑状态右侧UI Text(context.state.exercise) } minimal: { // Dynamic Island 最小状态UI Text(context.state.time.prefix(2)) } .keylineTint(.blue) } } }
检查 Activity Attributes 定义
- 确认
SessionAttributes正确遵循ActivityAttributes协议,且嵌套的ContentState实现Codable和Hashable(保证可序列化),示例:
struct SessionAttributes: ActivityAttributes { public typealias ContentState = State struct State: Codable, Hashable { var time: String var exercise: String } }
系统显示设置检查
- 真机端:进入「设置」→「通知」→ 找到目标应用,确保「Live Activity」和「在锁定屏幕上显示」开关均开启
- 模拟器端:按
Command+L锁定屏幕,Live Activity默认仅在锁屏/动态岛区域展示,前台状态下不会直接显示
代码调用细节检查
- 确保
Activity.request由用户交互触发(比如按钮点击),iOS禁止应用启动时自动触发Live Activity - 尝试设置
staleDate为未来时间(如Date().addingTimeInterval(3600)),设为nil可能导致系统不持久化展示Live Activity
其他排查步骤
- 重启真机或模拟器,清除系统缓存
- 查看Xcode「Report Navigator」中的详细日志,排查Widget Extension是否存在编译错误、权限警告等隐藏问题
内容的提问来源于stack exchange,提问作者user15748784
相关产品推荐
相关产品推荐

