くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Firebase Authで共有Appleキーチェーンを利用する(UserAccessGroup)

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にはないっぽい。。。

ので、この記事を参考に自前でマイグレーションする必要がある

いろいろたいへんなので、新規であれば最初から指定しておくと便利そうかも(*´ω`*)

参考にしたサイト様