iOSでアプリ間で認証状態を共有する機能があるっぽいが、
iOSでホーム画面用ウィジェットを作りたい場合にも、
この設定が必要らしいので、いろいろ調べてみたときの備忘録(*´ω`*)
公式ドキュメントはこのあたり
XCodeの設定
Capabilities
に移動して、Keychain Sharing
を有効にするKeycain Group
を追加して、任意のグループ名を設定する
すると、
ios/Runner/Runner.entitlements
というファイルが作成される
中身を見てみるとこんな感じ
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>aps-environment</key> <string>development</string> <key>com.apple.developer.applesignin</key> <array> <string>Default</string> </array> <key>keychain-access-groups</key> <array> <string>$(AppIdentifierPrefix)$(BUNDLE_IDENTIFIER).keychain-group</string> </array> </dict> </plist>
$(AppIdentifierPrefix)
には、TeamIdが入るので、
<TEAM_ID>.<BUNDLE_IDENTIFIER>.<GROUP_NAME>
が、キーチェーンアクセスグループ名になる
flavorごとにグループ名を分けたかったので、
$(BUNDLE_IDENTIFIER)
という変数を用意して、切り替えている感じ
Firebase Authでの設定
Flutter側はこんな感じで設定すればOK
FirebaseAuth.instance .setSettings( // <TEAM_ID>.<BUNDLE_IDENTIFIER>.<GROUP_NAME>の形式 userAccessGroup: 'TEAMID.com.example.keychain-group', );
設定後に、認証とかをおこなえば、指定したグループを利用してくれる
注意: 途中導入の場合は、移行が必要
途中から必要になった場合、共有キーチェーンに移行する必要がある
Swiftのドキュメントには書いてあるが、
Flutterにはないっぽい。。。
ので、この記事を参考に自前でマイグレーションする必要がある
いろいろたいへんなので、新規であれば最初から指定しておくと便利そうかも(*´ω`*)