0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iOS18でLiveActivityのAppIntentが動かない問題の対応

Last updated at Posted at 2024-09-25

遭遇した問題

iOS18のシミュレーターでLiveActivityにAppIntentで実装したボタンが効かなくなった
具体的には下記キャプチャの赤枠部分をAppIntentで実装しており、タップしても実装している処理が走らなくなりました。

image.png

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()
    }
}

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?