3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[SwiftUI/Supabase] Supabase × Sign in with Apple 設定でハマらないための手順(SwiftUI対応)

Posted at

はじめに

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

  • Identiferタブの「+」ボタンから作成
    CleanShot 2025-10-05 at 11.42.08@2x.png
  • AppIDsを選択
  • 「Register a new identifier」はAppを選択
  • 次にAppIDの詳細選択

CleanShot 2025-10-05 at 12.41.32@2x.png

  • 下にスクロールすると「Sign In with Apple」がある → チェック
    CleanShot 2025-10-05 at 11.46.27@2x.png
  • Continue → Register

AppID準備完了!
💡 補足:
App ID は iOS アプリを一意に識別するためのものです。
Supabase とリンクさせる時に「Service ID」と区別されるので注意!

ServiceID

  • 同じく「Identifiers」→「+」をクリック
  • 「Service IDs」を選択
    CleanShot 2025-10-05 at 11.42.08@2x.png
  • ServiceIDを選択
    CleanShot 2025-10-05 at 11.51.10@2x.png
  • ServiceIDの詳細設定
    CleanShot 2025-10-05 at 11.51.44@2x.png
  • Register
    ServiceID準備完了!

Keys

※ここでAppIDが作成されていないと後々紐づけられない!

  • Key → 新規作成し、.p8(拡張子)ファイルをdownload
    CleanShot 2025-10-05 at 11.37.10@2x.png
    CleanShot 2025-10-05 at 11.38.04@2x.png

  • Configureから先ほど準備したAppIDを選択する

  • Continueすると、警告とdownloadが出てくる

  • KeyNameは何でも良い

CleanShot 2025-10-05 at 11.55.15@2x.png

  • Regesterする
    CleanShot 2025-10-05 at 11.56.05@2x.png
  • Register→Download→ .p8拡張子ファイルがダウンロードされる
    CleanShot 2025-10-05 at 11.56.44@2x.png
    ダウンロードした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側の設定

  • AuthenticationからApple Sign In Providerの設定へ
    CleanShot 2025-10-05 at 12.00.04@2x.png
  • ClientsIDにServiceIDを貼る
    CleanShot 2025-10-05 at 12.39.19@2x.png

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 設定部分のみ にフォーカスしました。
もし「この手順でここが詰まった」「他の方法もあるよ」などあれば、ぜひコメントで教えてください 🙏
記事の改善や追記に活かしたいと思います!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?