🐡

Xcode15(iOS17)の構成可能なWidgetsの対応

に公開

WidgetのXcode15対応でいろいろハマったので、要点だけメモしておきます。

構成可能でインタラクティブなWidgetsの対応したときの問題。

  1. iOS16だと、WidgetBundle内でif # availableとかすると実行時クラッシュしてそもそもWidgetが追加できない。
    https://stackoverflow.com/q/76864560/14970235

  2. iOS17で、CustomIntentMigratedAppIntentを使う方法でやると、Widgetの表示が乱れる。一度INIntentの方法でビルドすると表示されるようになるけど、また戻すと、編集する際の項目が表示されない(一瞬ProgressViewがでてすぐ消える)Emoji Rangerでも同じ症状っぽい。

*Xcode 15 RC

解決方法

  1. WidgetBundle内でif # availableを使わないように変更。
  2. CustomIntentMigratedAppIntentを使わないように変更。

その他にポイントは、インタラクティブな動作のためのAppIntentは、アプリ側のTarget Menbership(Xcode右側のチェックのやつ)にもチェックが必要だったり、Emoji Rangerのコードを参考に、AppIntentConfigurationとIntentConfigurationを出し分けしたり。

追記

編集する際の項目が表示されない(一瞬ProgressViewがでてすぐ消える)バグが再度発生した。Localizable.xcstringの新しいStringsファイルをメインのアプリのTarget Membership(Xcodeの右側のチェックボックス)にチェックが入ってたのが原因だった。

参考リンク

https://developer.apple.com/documentation/widgetkit/emoji_rangers_supporting_live_activities_interactivity_and_animations
https://developer.apple.com/videos/play/tech-talks/10168/
https://developer.apple.com/documentation/widgetkit/migrating-from-sirikit-intents-to-app-intents
https://developer.apple.com/documentation/widgetkit/making-a-configurable-widget

Discussion