SwiftUI中.onContinueUserActivity无法生效,求解决办法
SwiftUI .onContinueUserActivity 无法触发的问题
有没有人成功让SwiftUI的.onContinueUserActivity生效?苹果官方示例中该功能正常运行,但我新建基础SwiftUI项目复现却失败了。
我的项目仅做了以下修改:
- 在
Info.plist中添加配置:
<key>NSUserActivityTypes</key> <array> <string>com.example.RnD.customActivity</string> </array>
- App结构定义如下:
@main struct UserActivityDemoApp: App { static let customActivityType = "com.example.RnD.customActivity" var body: some Scene { WindowGroup { ContentView() .userActivity(Self.customActivityType, isActive: true) { activity in activity.title = "Doing Custom Activity" activity.isEligibleForSearch = true activity.isEligibleForHandoff = true activity.becomeCurrent() print("Defining user activity") } .onContinueUserActivity(Self.customActivityType) { activity in print("we should resume \(activity.title ?? "misconfigured activity")") } } } }
按道理这个配置应该能打印we should resume ...的日志,但实际未触发。是不是.userActivity闭包里还需要做更多操作?苹果官方文档显示我已完成必要配置。
可能的解决方向
1. 确认测试流程正确
很多时候问题出在测试方式,而非代码:
- 测试Handoff需要两台登录同一Apple ID的设备(或模拟器+真机组合)。
- 启动应用后先确认
Defining user activity日志已打印,说明UserActivity已成功创建。 - 在目标设备的锁屏底部/应用切换器中找到Handoff入口,点击进入才会触发
.onContinueUserActivity。
2. 补充UserActivity的关键属性
部分场景下需要显式配置persistentIdentifier和userInfo,确保系统正确识别:
.userActivity(Self.customActivityType, isActive: true) { activity in activity.title = "Doing Custom Activity" activity.isEligibleForSearch = true activity.isEligibleForHandoff = true // 添加以下配置 activity.persistentIdentifier = Self.customActivityType activity.userInfo = ["activityId": "custom"] // 自定义标识信息 activity.becomeCurrent() print("Defining user activity") }
3. 检查配置一致性
确认Info.plist中NSUserActivityTypes的字符串与代码中customActivityType完全一致,无拼写、大小写或域名错误。
4. 调整View层级
将.userActivity和.onContinueUserActivity附加到具体ContentView而非App根View,可能提升稳定性:
struct ContentView: View { let customActivityType = "com.example.RnD.customActivity" var body: some View { Text("Hello, World!") .userActivity(customActivityType, isActive: true) { activity in activity.title = "Doing Custom Activity" activity.isEligibleForSearch = true activity.isEligibleForHandoff = true activity.persistentIdentifier = customActivityType activity.userInfo = ["activityId": "custom"] activity.becomeCurrent() print("Defining user activity") } .onContinueUserActivity(customActivityType) { activity in print("we should resume \(activity.title ?? "misconfigured activity")") } } }
5. 用Xcode模拟触发
通过Xcode菜单Debug > Simulate Handoff,选择你的activity类型,直接在模拟器中测试是否触发回调。如果列表中没有你的activity,说明UserActivity创建过程存在问题。
内容的提问来源于stack exchange,提问作者Curious Jorge
相关产品推荐
相关产品推荐

