iOS14で追加になったウィジェットのテンプレートをIntentConfigurationで作ります。
("ウィジェットを編集"メニューが表示される方)
できるだけXcodeの自動生成を使います。
テンプレートなので何の機能もありませんが、ウィジェットを量産するときの基礎になることを期待しています。
Appの作成
まだUIKitで作っているアプリがほとんどだと思うので、UIKit App Delegate
を選択しています。
名前はクレジットカードアプリを想定してLeaderCard
にしました。
Widget Extensionの作成
Include Configuration Intent
にチェックを入れる。(←ここ大事!)
チェックを入れないとStaticConfiguration
になります。
Widget名はLeaderCardWidget
にしました。
Intent Handlerの作成
Intents Extensionを選択してNext
を押す。
Include UI Extension
をチェックしない。(←ここ大事!)
Starting Point
はNone
を選択。(←ここ大事!)
Intent Handler名はLeaderCardIntent
にしました。
intentdefinitionの設定
LeaderCardWidget
フォルダーの中に生成されているLeaderCardWidget.intentdefinision
を開く。
下方にある+
を押してNew Type
を選択。
タイプ名にCard
を設定する。Card
の中身は触らなくても良いです。
Parameters
Parameter
Parameterは小文字でcard
と設定する。(←ここ大事!)
自動生成されるクラスConfigurationIntent
のプロパティ名になっているからです。
Display Name
Type
Card
を選択する。
Configurable
チェックする。
Dynamic Options
チェックする。
Prompt Label
Target Membership
LeaderCardWidgetExtension
とLeaderCardIntent
にチェックする。(←ここ大事!)
Intent Handlerを最低限コーディングする
初期状態
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
// This is the default implementation. If you want different objects to handle different intents,
// you can override this and return the handler you want for that particular intent.
return self
}
}
ConfigurationIntentHandling
プロトコルを追加する。
そうすると、protocol stub
を追加するか聞かれるのでFix
を押す。
provideCardOptionsCollection
メソッドが追加される。
code
の部分にcompletion(nil, nil)
を書く。
(テンプレートなので何も機能しないです。)
class IntentHandler: INExtension {
func provideCardOptionsCollection(for intent: ConfigurationIntent, with completion: @escaping (INObjectCollection<Card>?, Error?) -> Void) {
completion(nil, nil)
}
override func handler(for intent: INIntent) -> Any {
// This is the default implementation. If you want different objects to handle different intents,
// you can override this and return the handler you want for that particular intent.
return self
}
}
完成
これでテンプレートが完成したはずです。
実行すると以下のような画面が表示されます。
これに肉付けして目的のウィジェットに近づけていくことになります。
GitHub
こちらにTemplate repository
を作っておりますので、よろしければご利用ください。
iOS14-Widget-IntentConfiguration-template
開発環境
- Xcode 12.1
- iOS 14.0 - 14.1