# Sign in with Apple 설정 가이드 ## 📋 목차 1. [Apple Developer Console 설정](#1-apple-developer-console-설정) 2. [Supabase 설정](#2-supabase-설정) 3. [Xcode 프로젝트 설정](#3-xcode-프로젝트-설정) 4. [테스트 방법](#4-테스트-방법) --- ## 1. Apple Developer Console 설정 ### 1.1 App ID 설정 1. [Apple Developer](https://developer.apple.com/) 로그인 2. **Certificates, Identifiers & Profiles** 선택 3. **Identifiers** → **App IDs** 선택 4. 앱의 Bundle ID 찾기 또는 새로 생성 5. **Sign in with Apple** 체크박스 활성화 6. **Save** 클릭 ### 1.2 Services ID 생성 (Supabase용) 1. **Identifiers** → **Services IDs** 선택 2. **+** 버튼 클릭하여 새 Services ID 생성 3. **Description**: `Moni Supabase Auth` (또는 원하는 이름) 4. **Identifier**: `com.lemonaa.moni.supabase` (고유한 ID) 5. **Continue** → **Register** 클릭 ### 1.3 Services ID 구성 1. 생성한 Services ID 선택 2. **Sign in with Apple** 체크 3. **Configure** 클릭 4. **Primary App ID** 선택 (앱의 Bundle ID) 5. **Domains and Subdomains**에 추가: ``` qptsmsyfzbbqqdcyqgeu.supabase.co ``` 6. **Return URLs**에 추가: ``` https://qptsmsyfzbbqqdcyqgeu.supabase.co/auth/v1/callback ``` 7. **Next** → **Done** → **Continue** → **Save** ### 1.4 Key 생성 1. **Keys** 메뉴 선택 2. **+** 버튼으로 새 Key 생성 3. **Key Name**: `Moni Apple Sign In Key` 4. **Sign in with Apple** 체크 5. **Configure** 클릭 → Primary App ID 선택 6. **Save** 클릭 7. **Download** 클릭하여 `.p8` 파일 다운로드 - ⚠️ **중요**: 이 파일은 한 번만 다운로드 가능하니 안전하게 보관! 8. **Key ID** 복사 (나중에 Supabase 설정에 필요) ### 1.5 필요한 정보 정리 다음 정보를 메모장에 정리: - **Services ID** (Identifier): `com.lemonaa.moni.supabase` - **Team ID**: Apple Developer 계정 우측 상단에서 확인 - **Key ID**: 생성한 Key의 ID - **Private Key** (`.p8` 파일): 다운로드한 파일 내용 --- ## 2. Supabase 설정 ### 2.1 Supabase Dashboard 1. [Supabase Dashboard](https://app.supabase.com/) 로그인 2. 프로젝트 선택 3. 좌측 메뉴에서 **Authentication** 선택 4. **Providers** 탭 선택 ### 2.2 Apple Provider 활성화 1. **Apple** 찾아서 클릭 2. **Enable Sign in with Apple** 토글 ON 3. 다음 정보 입력: **Client IDs**: ``` com.lemonaa.moni.supabase ``` **Secret Key (for OAuth)**: Supabase 버전에 따라 형식이 다를 수 있습니다: **방법 1 - JSON 형식** (일부 Supabase 버전): ```json { "p8": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA...(전체 내용)...-----END PRIVATE KEY-----", "teamId": "YOUR_TEAM_ID", "keyId": "YOUR_KEY_ID" } ``` **방법 2 - 개별 필드** (최신 Supabase): - **Team ID**: `YOUR_TEAM_ID` (Apple Developer 우측 상단, 10자리) - **Key ID**: `YOUR_KEY_ID` (생성한 Key의 ID, 10자리) - **Private Key**: `.p8` 파일 내용 전체 복사/붙여넣기 ``` -----BEGIN PRIVATE KEY----- MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg... -----END PRIVATE KEY----- ``` **Allow users without an email**: - ❌ 비활성화 권장 (이메일 없는 사용자는 관리 어려움) - ✅ 활성화하면 사용자가 이메일 공유 거부해도 로그인 가능 4. **Callback URL (for OAuth)**: 자동 생성됨 - 형식: `https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback` - 이 URL을 복사하여 Apple Developer Console에 등록해야 함 5. **Save** 클릭 ### 2.3 Apple Developer Console에 Callback URL 등록 ⚠️ **중요**: Supabase에서 생성된 Callback URL을 Apple에 등록해야 합니다! 1. [Apple Developer Console](https://developer.apple.com/) 로그인 2. **Identifiers** → **Services IDs** 선택 3. `com.lemonaa.moni.supabase` 선택 4. **Sign in with Apple** 옆 **Configure** 클릭 5. **Return URLs**에 Supabase Callback URL 추가: ``` https://qptsmsyfzbbqqdcyqgeu.supabase.co/auth/v1/callback ``` (실제 프로젝트 URL로 변경) 6. **Next** → **Done** → **Continue** → **Save** ### 2.4 Redirect URLs 확인 (선택사항) 1. Supabase Dashboard → **Authentication** → **URL Configuration** 2. **Redirect URLs**에 다음이 포함되어 있는지 확인: ``` com.lemonaa.moni://login-callback ``` (앱에서 딥링크로 돌아올 때 필요, 없으면 추가) --- ## 3. Xcode 프로젝트 설정 ### 3.1 Capabilities 추가 1. Xcode에서 프로젝트 열기 2. 프로젝트 네비게이터에서 프로젝트 선택 3. **Targets** → **moni** 선택 4. **Signing & Capabilities** 탭 선택 5. **+ Capability** 클릭 6. **Sign in with Apple** 추가 ### 3.2 URL Scheme 설정 1. **Info** 탭 선택 2. **URL Types** 섹션 찾기 (없으면 **+** 클릭하여 추가) 3. 다음 정보 입력: - **Identifier**: `auth` - **URL Schemes**: `com.lemonaa.moni` - **Role**: `Editor` ### 3.3 Bundle ID 확인 1. **General** 탭에서 **Bundle Identifier** 확인 2. Apple Developer Console의 App ID와 동일한지 확인 ### 3.4 Info.plist 설정 (필요 시) `Info.plist` 파일에 다음 추가 (필요한 경우): ```xml <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>auth</string> <key>CFBundleURLSchemes</key> <array> <string>com.yourcompany.moni</string> </array> </dict> </array> ``` --- ## 4. 테스트 방법 ### 4.1 시뮬레이터 테스트 1. Xcode에서 앱 실행 2. 로그인 화면에서 **Sign in with Apple** 버튼 클릭 3. Apple ID로 로그인 - ⚠️ 시뮬레이터에서는 실제 Apple ID 필요 - Settings → Apple ID에서 로그인 ### 4.2 실제 기기 테스트 1. 개발자 계정으로 기기에 앱 설치 2. **Sign in with Apple** 버튼 클릭 3. Face ID/Touch ID 또는 비밀번호로 인증 4. 앱이 성공적으로 로그인되는지 확인 ### 4.3 디버깅 팁 - Xcode Console에서 로그 확인 - Supabase Dashboard → **Authentication** → **Users**에서 사용자 생성 확인 - 에러 발생 시 다음 확인: - Bundle ID가 일치하는지 - Services ID가 정확한지 - Supabase에 Private Key가 올바르게 입력되었는지 - Redirect URL이 정확한지 --- ## 5. 프로덕션 배포 체크리스트 - [ ] Apple Developer Console에서 App ID에 Sign in with Apple 활성화 - [ ] Services ID 생성 및 구성 완료 - [ ] Key 생성 및 `.p8` 파일 안전하게 보관 - [ ] Supabase에 Apple Provider 설정 완료 - [ ] Xcode에서 Sign in with Apple Capability 추가 - [ ] Bundle ID가 모든 곳에서 일치 - [ ] 실제 기기에서 테스트 완료 - [ ] Privacy Policy에 Apple 로그인 관련 내용 추가 - [ ] App Store 제출 시 Sign in with Apple 사용 명시 --- ## 6. 문제 해결 ### 오류: "Invalid Client" - Services ID가 정확한지 확인 - Apple Developer Console에서 도메인과 리턴 URL이 올바른지 확인 ### 오류: "Invalid Token" - Private Key가 올바르게 입력되었는지 확인 - Key ID와 Team ID가 정확한지 확인 ### 로그인 후 리다이렉트 실패 - URL Scheme이 올바르게 설정되었는지 확인 - Supabase의 Redirect URLs 설정 확인 ### 시뮬레이터에서 로그인 안됨 - 시뮬레이터의 Settings → Apple ID에서 로그인 필요 - 또는 실제 기기에서 테스트 --- ## 📚 참고 자료 - [Apple Sign in Documentation](https://developer.apple.com/sign-in-with-apple/) - [Supabase Auth - Apple](https://supabase.com/docs/guides/auth/social-login/auth-apple) - [Human Interface Guidelines - Sign in with Apple](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) --- ## 💡 추가 팁 1. **사용자 경험 개선** - Apple 로그인을 가장 위에 배치 (Apple 가이드라인 권장) - 다른 소셜 로그인 옵션도 함께 제공 2. **보안** - Private Key (`.p8` 파일)는 절대 Git에 커밋하지 않기 - 환경 변수로 관리하거나 안전한 곳에 보관 3. **앱 리뷰** - App Store 리뷰 시 Sign in with Apple을 제공하면 다른 소셜 로그인도 필수로 제공해야 함 - 이메일/비밀번호 로그인은 예외