本机 Mac 应用无法切换到本机 iOS 应用

Native Mac app fails to Handoff to Native iOS app

我在 iOS 和 Mac 应用程序中采用 Handoff。 iOS -> iOS 和 iOS -> Mac 工作完美!这很棒。 但是,Mac -> iOS 永远不会起作用。我已经在不同的机器上对 El Capitan 和 Sierra 进行了测试。如果我添加网页 URL 作为后备,iOS 中的 Safari 会选择 activity,但本机 iOS 应用程序不会显示。 我在 Mac 应用程序

中使用了这段代码
class ViewController: NSViewController {  
    override func viewDidAppear() {  
        super.viewDidAppear()      
        self.startUserActivity()  
    }    
    func startUserActivity() {  
        let userActivity = NSUserActivity(activityType: "net.myapp.myactivitytype")  
        userActivity.isEligibleForHandoff = true  
        userActivity.isEligibleForSearch = false  
        userActivity.isEligibleForPublicIndexing = false  
        userActivity.title = "Handoff test"  
        userActivity.userInfo = ["key": "value"]  
        userActivity.requiredUserInfoKeys = Set<String>(arrayLiteral: "key")  
        userActivity.webpageURL = URL(string: "https://myapp.net/myurl") // I can pick this up in mobile safari  
        self.userActivity = userActivity  
    }    
    override func updateUserActivityState(_ userActivity: NSUserActivity) {  
        userActivity.addUserInfoEntries(from: ["key":"Updated value"])  
        super.updateUserActivityState(userActivity)  
    }  
} 

在 iOS 方面,我已经使用 applinks:myapp.net 处理通用链接,并尝试添加 activitycontinuation:myapp.net 以及(以及 apple-app- 上的正确配置)站点关联文件。这使我的本机应用程序从 Mac 的 Safari 中获取相应的 url,但本机 Mac 应用程序仍然无法切换到本机 iOS应用程序。 我没有想法,任何人都知道为什么会发生这种情况? 在 iOS 我使用的是 10.2。顺便说一句,我无法在 iOS 9.

上让 Handoff 正常工作

此致 拉斐尔

在我的情况下,问题是由于对 Mac 应用程序进行代码签名时缺少授权引起的。 当 运行 codesign -d --entitlements - /Applications/MyApp.app 时,它缺少与团队标识符相关的条目。这是 iOS 将 Mac Handoff 连接到其本机副本的关键(而不是其他试图使用相同 Handoff 标识符的恶意应用程序)

<key>com.apple.developer.team-identifier</key>
<string>MY_TEAM_ID</string>

要添加此权利,请在 Dev Center 中为您的应用程序创建一个 配置文件 ,下载它并在 Xcode 的手动签名中导入它。它在没有配置文件的情况下自动或手动对我不起作用(Xcode 声明为可选)

我终于解决了。答案与接受的答案所建议的签名配置文件无关。

我向 Apple 报告了一份错误报告,解释了整个情况,Apple 告诉我我的 iOS 应用程序的 info.plist 根本没有声明 NSUserActivityTypes,而我的 Mac 应用程序的info.plist 正确地声明了 NSUserActivityTypes,导致切换仅从 iOS 到 Mac 而从不从 Mac 到 iOS。

This issue is due to the iOS version of the app not claiming the activity type in the info.plist, resulting in the iOS device not knowing what app to give the handoff to.

在左侧导航面板中的 Xcode 项目中,我打开 info.plist 并且 NSUserActivityTypes 确实已经存在。但是当我在项目文件夹中使用 Finder 搜索它时,我意识到我的项目中有多个 info.plist 文件。然后我用 Finder 进入我的项目文件夹并试图找到这个 info.plist 文件,但是当我在 projectName/projectName 中找到一个文件时,它打开了另一个我最初无法访问的 info.plist 文件通过 Xcode 项目导航器。不同的 info.plist 文件没有 NSUserActivityTypes,所以我添加了它,woala~ 切换终于从 Mac 到 iOS!很奇怪在我的项目中有假的多个 info.plist。 Xcode...

隐藏了我的真实信息 plist