無料
ご
相
談
・
お
見
積
も
り
2025.10.14
今日は、Appleのみに搭載されているWidgetとLive Activityを実際の端末で動かしてみたいと思います。
ホーム画面・ロック画面にアプリの情報をすぐに見れるようにするようなものです。
⇩こんなものです。
iPhoneの ロック画面 や Dynamic Island 上で、アプリのリアルタイムな進行状況を表示するためのものです。
Dynamic Islandというのは、耳を充てるところがiPhone14ぐらいから動くようになったんですが、それのことです。
⇩こんなものです。
これらをExpoで組み立てていこうというものです。
まず前提として、公式では全く推奨していない機能であり本番での利用もExpoとは関係ありません。
しかし、ExpoのCEOのベーコンさんが自作でSwiftとうまくいく仕組みを作ってくれてExpoでも使えはするよ〜という感じにしてくれています。
https://github.com/EvanBacon/expo-apple-targets
なので、使うならご自由にだけど公式は何も保証しないと言ったところです。
CEO自らがこのようなライブラリーを作っていただけるのは嬉しいですね。
こちらの動画を参考にしました。
https://www.youtube.com/watch?v=hgmAMrVRzRM&t=3781s
こちらは、AppleにどのGroup IDなのかを認識させるためです。group.kakushin.dataとしてコード内には記載されているためそこを変更しなければなりません。
※今回は、Group IDに新規作成などは割愛させていただきます。
npx expo prebuild --template ./node_modules/@bacons/apple-targets/prebuild-blank.tgz --clean
すると、RNの内容は一切buildしないので早くbuildが終わり今回の本題であるWidgetやLive Activityの開発に集中できます。
xed ios
でXcodeに移動してSwiftのコードを書いていきます。
ひとまず、これでWidgetやLive Activityのデザイン部分は変更できるかと思います。
ひとまず、上記の方法でデザイン部分はできたとします。
しかし、毎回同じ値であれば意味がないので動的部分の作成方法をお教えいたします。
下記で動的にします。
const storage = new ExtensionStorage("group.kakushin.data");
使い方としては、下記のようにしてkeyでtrigerとなるkeyを設定します。
storage.set(key, value)
その後に、値を変更したいタイミングで下記を実行します。
ExtensionStorage.reloadWidget();
すると、値が任意のタイミングで変更されるかと思います。
いつもローカルでは動くんだけどな。。。ということがあり本番環境での動作は期待しておりませんでしたが、問題なくEAS BuildでTestFlightにあげても問題なく動きました。
本番は推奨されていませんが、実際に使用している人もいるらしいので使用してみていいかもしれませんね。
そもそも、これっていつ使うのか?なのですが、Appleが使用するケースを紹介してくれていました。
"数分〜数時間単位で進行するイベント"らしいです。
長すぎず、短すぎないタイミングのイベントで使用するのがいいらしいです。
例えば、配達、移動、運動、試合、ライブ放送などのようなものがあるらしいです。
などなど確かにアプリを開くまではないけど、パッとみたいなという時に欲しかった機能だなと思いました。
今日は、WidgetとLive Activityを実際に動かしてみた感想をブログにしてみました。
感想としては、意外とExpoの追従が追いついていないんだなというところです。
WidgetとLive Activityもリリースされてから1-2年ぐらい経っていて公式でのBeta版どころか個人のリポで勝手に使用してねレベルなのでExpoを使用する当初は新機能がすぐに使用できないというデメリットは知っていたが思っていたよりも意外とネイティブのSwiftとの差はやはり大きいなというところです。
あまり、Expoがこの機能自体を重視していないとも捉えることができるのと開発がとてつもなく大変かもしれないので、無理言うなよと言われるかもしれませんが。。。