Skip to main content

はじめに

1

新しいプロジェクトを作成

このクイックスタート用に新しい iOS または macOS プロジェクトを作成してください。Xcode で:
  1. FileNewProject(または ⌘+Shift+N
  2. 次のいずれかを選択します:
    • iOS タブ → App テンプレート
    • macOS タブ → App テンプレート
  3. プロジェクトを設定します:
    • Product Name: Auth0-Sample
    • Interface: SwiftUI
    • Language: Swift
    • Use Core Data: チェックを外す
    • Include Tests: チェックを入れる(推奨)
  4. 保存場所を選択し、Create をクリックします
これにより、SwiftUI を使用し Swift Package Manager に対応した標準的なアプリが作成され、Auth0 を統合するのに最適です。
2

Auth0 SDK を追加する

Auth0 ソフトウェア開発キット (SDK) を、好みのパッケージマネージャーを使ってプロジェクトに追加します。
Xcode で:
  1. FileAdd Package Dependencies…(または ⌘+Shift+K
  2. Auth0 SDK の URL を入力します:
  3. Add Package → アプリのターゲットを選択 → Add Package
3

Auth0 を設定する

新しい Auth0 アプリケーションを作成して、コールバックURLを設定します。
  1. Auth0 Dashboard にアクセスします
  2. Applications > Create Application に進み、名前を入力して Native を選択し、Create をクリックします
  3. Settings タブで、Client IDDomain を確認しておきます
  4. 次のURLを Allowed Callback URLs に追加します:
  1. 次のURLを Allowed Logout URLs に追加します:
  1. Save Changes をクリックします
4

アプリケーションクレデンシャルの設定

プロジェクトディレクトリに Auth0.plist ファイルを作成します。
Auth0.plist
Auth0.plist を Xcode にドラッグし、「Add to target」にチェックが付いていることを確認してください。
5

認証サービスの作成

AuthenticationService.swift を作成します。
  1. プロジェクトを右クリックし、New File…Swift File を選択します
  2. ファイル名を AuthenticationService にします
  3. 内容を次のコードに置き換えます:
AuthenticationService.swift
6

UI コンポーネントの作成

UI ファイルを作成してコードを追加する
7

認証フローの設定(任意)

ユーザーエクスペリエンスを向上させるために、次の方法でシステムアラートを最小限に抑えることができます。
  1. ユニバーサルリンクを使用する: リダイレクト中に表示される「“AppName” で開きますか?」というプロンプトをなくします。注: ASWebAuthenticationSession の許可アラートは引き続き表示されます。
  2. エフェメラルセッションを使用する: すべての許可アラートをなくします。注: Single Sign-On (SSO) と共有 Cookie が無効になります。
許可アラートありのデフォルトの動作を使用する場合は、この手順をスキップしてください。この設定は後から行うこともできます。
  1. Auth0 Dashboard → Applications → 対象のアプリ → SettingsAdvanced SettingsDevice Settings
  2. Apple Team IDbundle identifier を追加 → Save
  3. Xcode: Target → Signing & Capabilities+ CapabilityAssociated Domains
  4. webcredentials:{yourDomain} を追加
要件: 有料の Apple Developer アカウント、iOS 17.4+/macOS 14.4+
本番アプリに最適です。
8

アプリを実行する

Xcode で ⌘+R キーを押します。
  1. “Log In” をタップ → (デフォルト設定を使用している場合)アクセス許可のアラート → “Continue” をタップ
  2. ブラウザでログインを完了します
  3. プロファイルが表示されます!
チェックポイントこれで、iOS または macOS アプリに Auth0 によるログイン機能が完全に実装されました。

トラブルシューティングと詳細設定

ビルドエラー: ‘Auth0’ モジュールが見つかりません

解決策:
  1. Swift Package Manager: Package Dependencies を確認し、Auth0.swift が一覧に含まれていることを確認する
  2. CocoaPods: .xcodeproj ではなく .xcworkspace ファイルを開いていることを確認する
  3. Carthage: Auth0.xcframeworkFrameworks, Libraries, and Embedded Content に追加されていることを確認する
  4. クリーンして再ビルド: ⌘+Shift+K の後に ⌘+R
  5. 必要であれば Xcode を再起動する

アプリがクラッシュする: ‘Auth0.plist not found’

対処方法:
  1. Auth0.plist が Xcode のプロジェクトナビゲーターに含まれていることを確認する
  2. ファイルを選択 → Inspector → アプリのターゲットにチェックが入っていることを確認する
  3. ClientIdDomain キーに、ご自身の値が設定されていることを確認する
  4. 代替案: プログラムによる設定を使用する(下記の「高度な統合」セクションを参照)

ブラウザは開くがアプリに戻ってこない

対処方法:
  1. Auth0 Dashboard のコールバック URL が、バンドル識別子およびプラットフォームと完全に一致していることを確認する
  2. iOS の場合: URL には /ios/ を含める。macOS の場合: /macos/ を含める
  3. Xcode のバンドル識別子が Auth0 の設定と一致していることを確認する
  4. URL にタイプミスがないことを確認する(よくある例: コロン抜け、ドメイン形式の誤り)
  5. カスタムドメイン利用時: Auth0 のドメインではなく、自身のカスタムドメインを使用していることを確認する

毎回パーミッションアラートが表示される

これはカスタム URL スキーム使用時の、標準的な iOS/macOS のセキュリティ動作です。ユニバーサルリンクまたはエフェメラルセッションを使用してこのアラートを解消するには、ステップ 6 を参照してください。
カスタムドメイン を使用している場合は、Auth0 のドメインの代わりに、その値をすべての箇所で使用してください。例: tenant.auth0.com の代わりに login.example.com を使用するこれは、特定の機能を正しく動作させるには 必須 です:
  • Auth0.plist をカスタムドメインで更新する
  • コールバック URL / ログアウト URL にカスタムドメインを使用する
  • ユニバーサルリンクでは webcredentials:login.example.com を使用する

App Store への準備

  • パーミッションアラートをなくすためにユニバーサルリンクを設定する
  • 複数のプラットフォームバージョンおよびデバイスサイズでテストする
  • ネットワーク障害に対する適切なエラー処理を実装する
  • 生体認証付きで Keychain を使用する場合は、プライバシー使用目的の説明を追加する
  • 認証フローに関して App Store Review ガイドラインに従う

セキュリティのベストプラクティス

  • 本番環境では機密性の高い認証データをログに出力しない
  • App Transport Security (ATS) に準拠する
  • すべてのネットワークリクエストで HTTPS を使用する
  • Auth0 の API 証明書を ピン留めしないでください - Auth0 はこの手法を推奨していません

パフォーマンス最適化

  • すべての非同期処理で、UI 更新には @MainActor を正しく使用する
  • @Published プロパティで適切なメモリ管理を行う
  • 資格情報をオフラインアクセス用に Keychain に安全にキャッシュする
  • ユーザーのプロファイルは IDトークンから取得し、追加のネットワークリクエストは発生させない

プログラムによる構成

Auth0.plist を使用する代わりに、認証情報をコード内で直接渡すこともできます。これは、認証情報を動的にしたい場合や、環境ごと(例: 開発 / ステージング / 本番で別々の Auth0 テナントを使用する場合)に切り替えたい場合に便利です。Auth0.webAuth() の呼び出しを Auth0.webAuth(clientId:domain:) に置き換えます:

生体認証による Keychain セキュリティの強化

保存された認証情報へアクセスする際に、Face ID または Touch ID を必須にします:
有効にすると、SDK が保存された認証情報を取得する前に、ユーザーは生体認証で認証する必要があります。

アクセストークンの自動リフレッシュ

CredentialsManager は、有効期限が切れたアクセストークンを自動的に更新します:
アクセストークンが必要な API 呼び出しを行う場合は、このパターンを使用してください。

App Extension 間での認証情報共有

ウィジェット、App Extension、バックグラウンドタスクなどでアクセストークンが必要な場合:
要件:
  1. すべてのターゲットで Xcode の App Groups 機能を有効化する
  2. ターゲット間で同じ App Group 識別子を使用する
  3. 各ターゲットで共有の CredentialsManager を構成する

認証フローオプションの比較

推奨事項:
  • SSO を利用する本番アプリ: Universal Links(より良い UX、SSO サポートあり、Apple Developer アカウントが必要)
  • SSO を利用しない本番アプリ: エフェメラルセッション(アラートなし、セットアップが簡単)
  • テスト / 開発用途: エフェメラルセッション(セットアップが速く、最もクリーンな UX)
  • クイックスタート / プロトタイピング: アラート付きデフォルト(セットアップ不要で、後から移行可能)