Приложению Native Mac не удается перейти на приложение Iative iOS

Я использую Handoff в своих приложениях для iOS и Mac. iOS -> iOS и iOS -> Mac работают без нареканий! Это великолепно. Тем не менее, Mac -> iOS никогда не работает. Я тестировал на El Capitan и Sierra, на разных машинах. Если я добавлю webpageURL в качестве запасного варианта, Safari в iOS выполнит эту операцию, но родное приложение для 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 и пытался добавить активность продолжению: myapp.net (вместе с правильной конфигурацией в файле apple-app-site-association. Это сделало мой пикап Native-приложения соответствующим URL из Mac Safari, но приложение Native Mac все еще не может передать приложение Native iOS. У меня нет идей, у кого-то есть понимание, почему это может происходить? На iOS я использую 10.2. Кстати, я не мог ' Сделать так, чтобы Handoff вообще работал на iOS 9.

С наилучшими пожеланиями Рафаэль

2 ответа

Решение

В моей ситуации проблема была вызвана отсутствием прав при подписании кода для приложения 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 сказала мне, что info.plist моего приложения для iOS вообще не объявляет NSUserActivityTypes, а info.plist моего приложения Mac правильно объявляет 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 действительно уже был там. Но потом я понял, что в моем проекте несколько файлов info.plist, когда я ищу его с помощью Finder в папке проекта. Затем я физически зашел в папку своего проекта с помощью Finder и попытался найти этот файл info.plist, но когда я обнаружил один файл внутри projectName/projectName, он открыл другой файл info.plist, к которому я не смог получить первоначальный доступ через навигатор проекта Xcode. Другой файл info.plist не имел NSUserActivityTypes, и поэтому я добавил его, и woala~ handoff наконец-то сработал с Mac на iOS! Очень странно, что в моем проекте были фальшивые несколько info.plist. Мой настоящий информационный листок был скрыт от Xcode...

Другие вопросы по тегам