# 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을 제공하면 다른 소셜 로그인도 필수로 제공해야 함
- 이메일/비밀번호 로그인은 예외