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にはないっぽい。。。
ので、この記事を参考に自前でマイグレーションする必要がある
いろいろたいへんなので、新規であれば最初から指定しておくと便利そうかも(*´ω`*)