原生Mac应用无法切换到原生iOS应用

时间:2017-01-18 13:11:17

标签: ios macos macos-sierra handoff continuity

我在iOS和Mac应用程序中采用了Handoff。 iOS - > iOS和iOS - > Mac正在完美​​运作!这很棒。 但是,Mac - > iOS从不起作用。我在不同的机器上测试了El Capitan和Sierra。如果我添加一个webpageURL作为后备,iOS中的Safari确实会启动该活动,但原生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-site-association文件上的正确配置。这使我的Native应用程序从Mac的Safari中获取相应的URL,但Native Mac应用程序仍然无法切换到Native iOS应用程序。 我没有想法,任何人都有这样的见解,为什么会发生这种情况? 在iOS上我使用10.2。顺便说一句,我无法在iOS 9上完成Handoff工作。

祝你好运 圣拉斐尔

2 个答案:

答案 0 :(得分:1)

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

我向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中找到一个文件时,它打开了另一个我最初无法通过Xcode项目导航器访问的info.plist文件。不同的info.plist文件没有NSUserActivityTypes,因此我添加了它,woala〜切换终于可以从Mac到iOS了!奇怪的是我的项目中有多个伪造的info.plist。我的真实信息列表已从Xcode中隐藏了...

答案 1 :(得分:-1)

在我的情况下,此问题是由对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声明为可选),它无论是自动运行还是手动运行都无法正常工作