オブジェクトを正常に作成および更新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 を呼び出すとクラッシュします」というメッセージが表示されます。代わりは。
他の誰かがこのようなものを見たことがありますか? もしそうなら、ハードウェア上で Xcode 11.4 および/または iOS 13.4 にアップグレードした後に発生し始めましたか? これを iPod Touch、iPhone 11 Pro Max、および iPhone 8 のシミュレーターで再現できました。
現時点ではrespondsToSelector
、フレーズを設定する前に明示的にチェックすることでこれを回避していますが、それは長期的にはあまり良い解決策ではありません.