iOS16の新機能ロック画面Widgetに位置情報を表示してみた
はじめに
みなさん初めまして
株式会社ネクストビートでアプリエンジニアとして働いている福本と申します。
現在は主にiOSのアプリ開発を担当しています。
今回は、2022年のWWDCで発表された、iOS16の目玉機能であるロック画面Widget(ウィジェット)についての記事になります。
Widgetの表示だけでなく、アプリ・Widget間での値の受け渡しも気になったため、位置情報を取得し表示するWidgetを実際に作成してみました。
ロック画面Widgetとは
iOS 16 から新しいロック画面が採用され、複数Widgetの追加に対応しており、時計の上下にカレンダー、バッテリー、リマインダー、天気などの情報を取得できるようになっています。
下の画像がiOS 16 で標準アプリのWidgetを使用したものです。
それでは、Widgetの実装方法について紹介していきたいと思います。
Widgetを作成
Xcode 14 beta を使用する必要があるため、Apple Developer からダウンロードします。
Xcode で新しいプロジェクトを作成、iOSのAppを選択し任意のプロジェクト名で作成します。
作成したプロジェクトに、ホーム画面で表示できる時計Widgetの『Target』を追加します。
下の画像のように、『File > New > Taget…』を選択します。
どのターゲットを追加するかの、選択ウィンドウが表示されるので、
『Widget Extension』を選択し、任意のProduct Nameを入力します。
この段階で、時計Widgetの作成は完了しており、ホーム画面に表示することができます。
ビルドターゲットがWidgetになっていることを確認し実行すると、
下の画像のようにホーム画面にシンプルな時計のWidgetが配置されます。
ロック画面にWidgetを配置するために、コードを記載します。
今回私はWidgetのプロジェクト名を『my_widget_demo』で作成したため、ソース上もそのような記載になっています。
上記の状態で、ロック画面にWidgetを配置すると下の画像のように作成できます。
『時計下に長方形で表示』のWidgetに、位置情報を表示させてみます。
位置情報を取得
位置情報を取得するためには『Core Location』が必要です。
『Target > Build Phases > Link Binaries with Libraries』に
『Core Location』を追加します。
plistに『位置情報使用許可の設定』を追加します。
プライバシー-使用中の場所使用法の説明
プライバシー-常に使用場所の説明
プライバシー-場所の使用法の説明プライバシー-常に使用
中の場所使用法の説明
上記を追加し、アラートに表示する内容を記載します。
UserDefaultsでアプリ側と、Widget側の値を共有するために、
『App Groups』を設定します。
位置情報を管理するクラスを作成します。
位置情報を使用するためにAppDelegateを作成します。
AppDelegateを使用するように修正します。
Widgetにアプリ側で取得した位置情報を表示するように修正します。
この状態でビルドをすると、ロック画面に位置情報を表示するWidgetが表示されます。
作成を終えて
Widgetの ホーム画面への表示は、想定していたよりも簡単に対応することができました。
ただし、ロック画面のWidgetはサイズがそこまで大きくないため、表示する内容を精査する必要があると思いました。
アプリ、Widget間でのデータの連携で少しハマりましたが、WWDCの目玉新機能に触れてとても良かったです。
最後まで読んでいただきありがとうございました!
私達は雇っています!
「人口減少社会において必要とされるインターネット事業を創造し、ニッポンを元気にする。」
を理念に掲げ一緒に働く仲間を募集しております。