You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:42