アプリ本体とWidgetの分とそれぞれ用意する。ワイルドカードだと動作しませんでした。1つのAppGroupを作り、各Identifierに同じAppGroupを適用させる。各Identifierに対応したProfileを作成する。プロジェクト追加ソリューションにプロジェクトを追加します。テンプレートがあるのでそれを使います。Widgetに表示するViewControllerのクラス名を登録する。設定アプリ、Extension側、両方でAppGroupを有効にして、グループIdを指定します。Keychainも有効にしておくと良いと思います。プロファイルに明示的に対応するプロファイルを設定します。Entitlements.plistも指定しておきます。Widget用のViewControllerを実装Info.plistに指定したクラスを作っていきます。INCWidgetProvidingインターフェースを適用し実装する必要があります。Info.plistで指定したクラス名を登録する必要があります。URLスキームによってアプリを起動させたり(要Info.plist設定)、WidgetActiveDisplayModeDidChangeではWidgetの高さを広げるか縮めるかの制御をし、WidgetPerformUpdateでデータの更新を行うといった感じです。余談ですが、iOSはアプリ本体とWidget側のプロジェクトでコードの共有ができないので、上のWebApiに関連するクラスはファイルをリンク追加することで無理やり共有させています。参照を手動追加したり、そこで使用しているライブラリをインストールしたりする必要がありましたが、とりあえず許容範囲内の面倒くささでした。いう訳で、もし本体プロジェクトのクラスを使いまわしたい場合は、なるべく疎結合にしておくと良いと思います。ここまでで、実行するとWidgetが登録できるようになります。詳しくはドキュメントで。ビルドが通らない問題がありました。実機だと問題ないので気にしない事にしてます。Androidこちらを参考にしました。Xamarin.AndroidAndroidは事前準備は不要でしたが、面倒臭さはかなり強いです。このサンプルではWidget.axmlWidgetCell.axmlの2種類を用意しました。WidgetCellはListViewのItem用のレイアウトです。Providerの定義を置きます。/>initialLayoutに先ほど用意したWidgetのレイアウトを指定します。Permissionの追加AndroidManifest.xmlでReceiveBootCompletedにチェックを入れます。Schedulerを使わない場合は不要です。AppWidgetProviderのサブクラスを作成AppWidgetProviderのサブクラスを作成します。これがWidgetのメインのコードになります。Xamarin.Androidでは属性をつけることで対応できるので、その記述です。}}OnUpdateは、Widget登録時に呼び出されます。使うので設定していません。WidgetでのUI操作は直接いじれなくて、RemoteViewというのを経由しないといけないので、そのRemoteViewをここで生成したり、クリックなどのイベント登録を行います。使った方法を使います。SetPendingIntentTemplateを使って登録します。登録して起動しています。OnReceiveでは、OnUpdateで設定したイベントのIntentを受信して、そのActionによって処理を分けています。ここで本体アプリを起動したり、リロード処理を通知したりしています。受け取ってそれを元にListViewに対して更新通知を送るようにしています。RemoteViewsServiceとRemoteViewsFactoryの作成RemoteViewsServiceはIRemoteViewsFactoryを返すだけで、IRemoteViewsFactoryの実装でRemoteViewを操作するアダプタ的なものを書いていきます。...}GetViewAtでは各アイテムのRemoteViewを作ってデータをセットして返しています。OnDataSetChangedは一番最初や更新通知を受け取ったときに呼ばれるので、ここでデータを取得してListViewのSourceに設定します。使うようにしています。余談ですが、ここのWebApiはiOSとは違って普通にnetstandardプロジェクトのコードを呼んでいるだけなので、問題なくコード共有できています。関係なくなってしまいましたが、一応Formsからでもこういった特殊な機能も使えるということが伝われば良いかなと思います。Widgetに関しては、Formsから使うのが面倒くさいというということではなく、どのプラットホームからでもどの言語からでもすべて面倒くさいので、好きな環境でやるのが一番良いと思います。記事内ではコードをかなり省略していますので、詳細が気になる場合はGithubのソースを参照してください。このリポジトリのバンドルId関連やプロファイル部分を書き換えればデバッグ実行できると思います。(2)月別アーカイブはてなブログをはじめよう!kamusoftさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。