はじめに
SwiftUI + Supabase で「Sign in with Apple」を使いたい人向けの記事です。
この記事では Supabase 側と Apple Developer 側の設定 のみを扱います。
実際のクライアント実装(SwiftUIなど)は省略します。
- 対応環境
- Xcode26
- iOS18
- Supbase Auth
- Apple Dveloper Key (.p8)
準備する材料たち
- AppID
- ServiceID
- Keys
- JWT Key ←こいつで詰まった
1 AppleDeveloper側の設定
手順
AppID
AppID準備完了!
💡 補足:
App ID は iOS アプリを一意に識別するためのものです。
Supabase とリンクさせる時に「Service ID」と区別されるので注意!
ServiceID
Keys
※ここでAppIDが作成されていないと後々紐づけられない!
-
Configureから先ほど準備したAppIDを選択する
-
Continueすると、警告とdownloadが出てくる
-
KeyNameは何でも良い
- Regesterする
- Register→Download→ .p8拡張子ファイルがダウンロードされる
ダウンロードしたp8ファイルのパスを準備しよう
(Finderに移動して、ダウンロードしたp8ファイルを選択したまま「⌘ + ⌥ + C を押すとパスがコピーされます。」をするとフルパスがコピーできる)
これでKeysの準備完了
⚠️ .p8 ファイルは一度しかダウンロードできません。
紛失したら再発行が必要になります。
また、第三者に共有してはいけません(秘密鍵です)。
JWT(Apple Private Key)の生成
Supabase は .p8 ファイルを直接受け取れないため、Ruby で JWT トークン(署名付きトークン) に変換します。
- jwtをinstall
ターミナルで以下のコマンドを入力
sudo gem install jwt
- Rubyファイルを作成して以下を貼る
- 例のファイル名は「generate_jwt.rb」
require "jwt"
require "openssl"
key_file = "AuthKey_XXXXXX.p8"
team_id = "YOUR_TEAM_ID"
client_id = "YOUR_SERVICE_ID"
key_id = "YOUR_KEY_ID"
private_key = OpenSSL::PKey::EC.new IO.read key_file
token = JWT.encode(
{
iss: team_id,
iat: Time.now.to_i,
exp: Time.now.to_i + 86400 * 180,
aud: "https://appleid.apple.com",
sub: client_id
},
private_key,
"ES256",
header_fields={ kid: key_id }
)
puts token
- 実行
ruby generate_jwt.rb
- 出力したtokenをコピー
このトークンを Supabase の Private Key に貼り付けます。
参考: このYouTubeが非常にわかりやすい
https://youtu.be/6I2JEky20ME
JWT KEYの準備終了
Supabase側の設定
Save してSupabaseの準備完了!!
3. よくあるハマりポイント
問題 原因 解決法
- p8をそのまま貼った→JWTでなく秘密鍵そのもの→Rubyスクリプトでトークン化する
- Client IDが一致しない→Service IDを使っていない→com.xxx.service の形式に統一
- 実機でしか動かない→Apple Sign Inはシミュレーター未対応→実機でテストする
- Keyを共有してしまった→セキュリティリスク→Apple DeveloperでKeyを削除・再発行
4. ✍️ 備考
この投稿ではクライアント実装(SwiftUIでのSignInWithAppleButtonなど)は扱いません。
純粋に「設定」部分にフォーカスしています。
実装は公式ドキュメントやSupabaseのGitHubサンプルを参照してください。
📝 おわりに
ここまで読んでいただきありがとうございます!
この記事ではあくまで Supabase × Apple Developer 設定部分のみ にフォーカスしました。
もし「この手順でここが詰まった」「他の方法もあるよ」などあれば、ぜひコメントで教えてください 🙏
記事の改善や追記に活かしたいと思います!