本地Mac应用无法传递到本地iOS应用

3

我正在我的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文件中进行了正确的配置)。这使得我的本地应用程序能够从Mac的Safari中获取相应的URL,但是本地Mac应用程序仍然无法传递给本地iOS应用程序。
我已经没有更多的想法了,请问有人知道为什么会出现这种情况吗?
在iOS上,我正在使用10.2。顺便说一下,在iOS 9上我根本无法使Handoff工作。
此致 Rafael

我在使用Mac -> Mac情况下遇到了传输问题。我知道有时需要使用userActivity.becomeCurrent(),您已经尝试过了吗? - Schuuure
2个回答

1

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

我向苹果报告了一个错误,解释了整个情况,苹果告诉我,我的iOS应用程序的info.plist根本没有声明NSUserActivityTypes,而我的Mac应用程序的info.plist正确声明了NSUserActivityTypes,导致只有从iOS到Mac才能使用Handoff,而从Mac到iOS则不能。

这个问题是由于iOS版本的应用程序在info.plist中没有声明活动类型,导致iOS设备不知道将Handoff交给哪个应用程序。

在我的Xcode项目的左侧导航面板中,我打开了info.plist,NSUserActivityTypes确实已经存在。但是当我使用Finder在项目文件夹中搜索时,我意识到我的项目中有多个info.plist文件。然后我亲自进入了我的项目文件夹,并尝试找到这个info.plist文件,但是当我在projectName / projectName内定位一个文件时,它打开了一个不同的info.plist文件,我最初无法通过Xcode项目导航器访问。不同的info.plist文件没有NSUserActivityTypes,因此我添加了它,然后手动从Mac到iOS,手势终于起作用了! 我的项目中有假的多个info.plist非常奇怪。我的真正的info plist被隐藏在Xcode中...


1
很棒,你解决了问题。我刚从度假回来,无法提供进一步的帮助,抱歉。 - Rafael Nobre

0
在我的情况下,问题是由于在对 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将其标记为可选项)。

我有完全相同的问题。Safari的Handoff在iOS和Mac之间都可以正常工作,但是我的应用程序的Handoff仅从iOS到Mac有效。我尝试将您的代码放入info.plist中,但仍然无法从Mac到iOS进行传递。您在哪里添加了代码块以使其起作用(我尝试将其放入info.plist中)? - coolcool1994
我已启用自动管理签名。我还尝试将其添加到授权文件中,但对我仍然没有起作用。 - coolcool1994
当我将com.apple.developer.team-identifier添加到我的macOS中并将其设置为随机值时,我的Mac应用程序可以正常构建。但是,如果我将其添加到iOS中并将其设置为随机值,则应用程序无法构建,并显示com.apple.developer.team-identifier不匹配的错误。因此,我觉得我的macOS可能缺少了这个...但是将其添加到授权文件中并没有解决这个问题。你还做了其他什么吗? - coolcool1994
它没有起作用。1)我在我的授权文件中添加了<key>com.apple.developer.team-identifier</key><string>MY_TEAM_ID</string>。2)手动下载了我的Mac应用程序的配置文件,并将签名设置为手动。它们没有使Handoff工作。 - coolcool1994
下载配置文件时,我的授权文件中没有创建com.apple.developer.team-identifier密钥。我不得不手动添加该密钥,但并没有什么区别。 - coolcool1994
你能帮我吗?我卡住了。我的情况与 Safari 完全相同,两者都可以使用 Handoff,但是我的应用程序只能从 iOS 到 Mac 使用 Handoff,而从 Mac 到 iOS 却永远无法使用。 - coolcool1994

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接