代码之家  ›  专栏  ›  技术社区  ›  Rafael Nobre

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

  •  3
  • Rafael Nobre  · 技术社区  · 9 年前

    我在iOS和Mac应用程序中采用切换。iOS->iOS和iOS->Mac正在完美地工作!太好了。 然而,Mac->iOS永远不会工作。我在El Capitan和Sierra的不同机器上进行了测试。如果我添加一个网页URL作为回退,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应用程序站点关联文件上的正确配置)。这使得我的原生应用程序从Mac的Safari中获取相应的url,但原生Mac应用程序仍然无法切换到原生iOS应用程序。 我没主意了,有人知道为什么会发生这种事吗? 在iOS上,我使用的是10.2。顺便说一句,我无法在iOS 9上进行切换。

    顺致敬意, 拉斐尔

    2 回复  |  直到 9 年前
        1
  •  1
  •   coolcool1994    7 年前

    我终于解决了。答案与签名配置文件无关,正如公认的答案所示。

    我向苹果报告了一份错误报告,解释了整个情况,苹果告诉我,我的iOS应用程序的信息。plist根本没有声明NSUserActivityTypes和我的Mac应用程序的信息。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进入我的项目文件夹,试图找到这些信息。plist文件,但当我在projectName/projectName中找到一个时,它打开了一个不同的信息。我最初无法通过Xcode项目导航器访问的plist文件。不同的信息。plist文件没有NSUserActivityTypes,所以我添加了它,woala~切换最终从Mac切换到iOS!这是非常奇怪的有假多个信息。plist在我的项目中。我的真实信息列表对Xcode隐藏。。。

        2
  •  0
  •   Rafael Nobre    7 年前

    在我的情况下,该问题是由于在对Mac应用程序进行代码签名时缺少权限造成的。 跑步时 codesign -d --entitlements - /Applications/MyApp.app ,缺少与团队标识符相关的条目。这是iOS将Mac切换连接到其本地对应方(而不是其他试图使用相同切换标识符的恶意应用)的关键

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

    要添加此权限,请创建 配置配置文件 在里面 Dev Center 对于您的应用程序,下载并导入Xcode的手动签名。在没有配置配置文件的情况下(Xcode声明为可选),无论是自动还是手动,它都不适用于我