В Xcode 11.4 / iOS 13.4 я обнаружил, что NSUserActivity не всегда отвечает на setSuggestedInvocationPhrase - PullRequest
0 голосов
/ 31 марта 2020

У меня есть проект, который успешно создавал и обновлял NSUserActivity объекты для предоставления ярлыков Siri и Handoff. Сегодня я впервые вернулся к этому коду и был немного удивлен, обнаружив, что, если у меня есть отладочная сборка на устройстве и я запускаю его из Springboard, он вылетает с нераспознанным селекторным сообщением:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSUserActivity setSuggestedInvocationPhrase:]: unrecognized selector sent to instance 0x280083580'

Этот точно такой же двоичный файл хорошо, когда я запускаю его, подключенный к отладчику. Я не могу понять, в чем проблема. Я создал мертвое простое тестовое приложение, и оно демонстрирует то же поведение. Вот простое представление SwiftUI, которое демонстрирует проблему:

import SwiftUI  
import Intents  

struct ContentView: View {  
    var body: some View {  
        if testForSelector() {  
            return Text("You can call setSuggestedInvocationPhrase")  
        } else {  
            return Text("setSuggestedInvocationPhrase will crash if you call it.")  
        }  
    }  
}  

extension ContentView {  
    func testForSelector() -> Bool {  
        let activity = NSUserActivity(activityType: "Testing Activity")  

        return activity.responds(to: #selector(setter: INIntent.suggestedInvocationPhrase))  
    }  
}

Я думаю, этот код должен всегда отображать «Вы можете вызвать setSuggestedInvocationPhrase», и он делает , когда я запускаю его из отладчика , Но если я запускаю приложение в автономном режиме, я получаю «setSuggestedInvocationPhrase вызовет sh, если вы его вызовете». вместо этого.

Кто-нибудь еще видел что-нибудь подобное? Если так, это начало происходить после того, как вы обновились до Xcode 11.4 и / или до iOS 13.4 на оборудовании? Теперь я могу воспроизвести это на iPod Touch, iPhone 11 Pro Max, и на симуляторе на iPhone 8.

В настоящее время я работаю над этим явно проверка на respondsToSelector перед установкой фразы, но это не очень хорошее решение в долгосрочной перспективе.

1 Ответ

0 голосов
/ 10 апреля 2020

Я отправил запрос на получение отзыва, и Apple Engineering ответила мне. Я явно не связал Intents.framework в цели. ? Он использовал , чтобы работать без этого, но теперь он терпит неудачу. Я не уверен, почему присоединение отладчика тянет на Intents, но в любом случае ясно, что я должен явно связать его, и это решает эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...