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





