概要

Flutterアプリにジオフェンシング機能を実装した際の備忘録 iOS編です。
Android・iOSを対象とし、デスクトップやWebは対象外です。細かな実装部分については、各公式サイトの紹介にとどめています。
この記事に記載のジオフェンス作成方法は、2026年現在少々古いです。最新の実装はApple公式を参照ください。

実装ステップ

  1. Androidにジオフェンシング機能を実装する
  2. iOSにジオフェンシング機能を実装する
  3. Dartからジオフェンシング機能を開始/終了する
  4. AndroidからDartにジオフェンシングin/outを通知する
  5. iOSからDartにジオフェンシングin/outを通知する
  6. 位置情報使用の説明画面を作成する
  7. ストアリリースの準備をする

iOSにジオフェンシング機能を実装する

まずはApple公式の情報を確認します。

所感ですが、Androidよりは実装が簡単だったような・・・気がします。各々違う難しさはありますが。

XCodeの設定

  • Capability「Background Modes」>「Location updates」をチェック
  • Info.plitに「Privacy - Location Always and When In Use Usage Description」を追記

delegateの設定

AndroidのReceiverにあたる部分ですね。CLLocationManagerにdelegateを設定します。delegateのオブジェクトをどうするかは悩ましいポイントと思いますが、私の場合、FlutterPluginのクラスをそのまま設定しました。
アプリ側で細かい制御を行いたい場合は、AppDelegate等に設定し、プラグイン側に渡せるようにするのもアリだと思います。

ジオフェンスの作成

CLLocationManager::startMonitoringを使用してジオフェンスを作成します。半径、出入りのタイプなどありますが、ここはAndroid同様にCMSで登録する仕組みとしました。
1つのアプリで登録可能なジオフェンスは20個までです。Androidの5分の1しか登録できないのが厳しいですね。

ジオフェンスの登録

ジオフェンスの解除

ジオフェンスが作成されているかチェックしたい場合

ジオフェンスを20件より多く登録したい場合