google_maps_flutterをiOSで使う場合、Google Maps Platformから発行されたAPIキーをAppDelegate.swiftに書き込む必要があります。
https://pub.dev/packages/google_maps_flutter#ios
ただ、
- APIキーをswiftコードにハードコーディングするのは嫌
- Android側と設定ファイルをひとつにまとめておきたい
の両方を実現する方法がなかなか見つからず苦戦しました。
(実際にはSwiftやiOSアプリ開発への知識が皆無だったため遠回りした感はありますが)
また、日本語記事の情報がほとんど見つからなかったので、非常に簡記ながら投稿しておくことにしました。
Android側の設定については、既にdart-define-from-fileを使っていました。
dart-define-from-fileの使い方は、このサイトが平易に書かれておりわかりやすかったです。
上サイトでもiOSについての記述もありますが、肝心のAppDelegate.swiftへの反映の仕方がよくわかりませんでした。
で、見つけたのがこちらとこちら
要は、
- dart-define-from-fileでAPIキーを書いたJSONファイルを読み込む
- JSONファイルで指定したキーでinfo.plistへ設定値を取得
- info.plistで指定したキーでAppDelegate.swiftへ設定値を取得
という感じでAppDelegate.swiftへAPIキーを注入できるようです。
サンプルコード
dart-define/env.json
{
"apiKey":"APIキーを書いておく"
}
info.plist
<dict>
・・・
<key>API_KEY</key>
<string>$(apiKey)</string>
・・・
</dict>
AppDelegate.swift
import UIKit
import Flutter
import GoogleMaps
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let apiKey = Bundle.main.infoDictionary!["API_KEY"] as! String
GMSServices.provideAPIKey(apiKey) // google_maps_flutterで利用する場合
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}