SurfTideΔ for iOS with Widget will be soon.

  • 投稿:
  • 更新:2020年12月 8日
  • by
  • in

iOS14でSurfTideΔ実装要諦のWidgetですが概ね動いています。
ウィジットのシステムそのものが未成熟なので、ネットの情報と試行錯誤とでどうにかこうにか動いている感じですね。
コード自体は短いのですが、ほぼデバッガは使えないし、シミュレータでの挙動は実機とだいぶ異なるので、何やるにも一々時間がかかります。
TodayExtensionやWatchOS系もそうですが、デバッガ(デバッグプリントも)は使えたり使えなかったりであまり当てになりませんね。

以下参考にしたサイトです。
https://engineer.dena.com/posts/2020.11/ios-widgetkit-tutorial/https://qiita.com/shiz/items/309349d9cdb75084e74e

IntentHandler を使ってWidgetで動的な設定を作る場合の、デフォルト値の設定についてネットに情報がなかったのでメモしておきます。
動的設定の詳細は省いているのでこのあたりを参考にすると良いかと。
自動生成されたコード(DynamicPlaceSelectionIntentHandling)をサブクラス化するので以下例の Placeほにゃらら の部分はそれぞれ置き換わることになります(自動生成されたコードを参照)。
以下は場所の設定を動的に作ってる部分で、実施のコードはアプリ側で設定した App Groups によりシェアされている UserDefaults から引っ張るようにしています。

class IntentHandler: INExtension, DynamicPlaceSelectionIntentHandling {
 // 場所設定のコレクション作成
 func providePlaceOptionsCollection(for ...
 var places: [Place] = []
 :
 completion(INObjectCollection(items: places), nil)
 }
 // デフォルトの場所設定
 func defaultPlace(for intent: DynamicPlaceSelectionIntent) -> Place? {
 :
 return Place(identifier: ...
 }
 override func handler(for intent: INIntent) -> Any {
 return self
 }
}