遭遇した問題
iOS18のシミュレーターでLiveActivityにAppIntentで実装したボタンが効かなくなった
具体的には下記キャプチャの赤枠部分をAppIntentで実装しており、タップしても実装している処理が走らなくなりました。
AppIntentは以下のように実装していました。
import AppIntents
struct TimerStopIntent: AppIntent {
static var title: LocalizedStringResource = "Stop"
@MainActor
func perform() async throws -> some IntentResult {
・・・
logger.info("Did stop timer.")
return .result()
}
}
解決策
原因としては、TimerStopIntent
が準拠しているprotocolがLiveActivityIntent
でなくAppIntent
であったためでした。
Appleのドキュメントでもしれっと書いていました。(AppIntentにすると動かなくなるよ! まで書いておいてほしい、、)
For a widget, create a new structure that adopts the AppIntent protocol and add it to your app target. For a Live Activity interactive, adopt the LiveActivityIntent protocol. If the interaction starts or pauses media playback, adopt the AudioPlaybackIntent protocol.
修正
こうすると無事iOS18でもAppIntentが動作するようになりました。
import AppIntents
struct TimerStopIntent: LiveActivityIntent {
static var title: LocalizedStringResource = "Stop"
@MainActor
func perform() async throws -> some IntentResult {
・・・
logger.info("Did stop timer.")
return .result()
}
}