iOS16の新機能ロック画面Widgetに位置情報を表示してみた

RyotaF
nextbeat-engineering
Jun 27, 2022

はじめに
みなさん初めまして
株式会社ネクストビートでアプリエンジニアとして働いている福本と申します。
現在は主に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の目玉新機能に触れてとても良かったです。

最後まで読んでいただきありがとうございました!

私達は雇っています!

株式会社ネクストビートでは

「人口減少社会において必要とされるインターネット事業を創造し、ニッポンを元気にする。」
を理念に掲げ一緒に働く仲間を募集しております。

https://www.nextbeat.co.jp/recruit

--

--