Files
zellyy-finance/docs/ios-signing-setup.md
hansoo 8343b25439 feat: Stage 2 TypeScript 타입 안전성 개선 - any 타입 83개 → 62개 대폭 감소
 주요 개선사항:
- any 타입 83개에서 62개로 21개 수정 (25% 감소)
- 모든 ESLint 에러 11개 → 0개 완전 해결
- 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소

🔧 수정된 파일들:
• PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가
• categoryUtils.ts - 불필요한 any 캐스트 제거
• TransactionsHeader.tsx - BudgetData 인터페이스 정의
• storageUtils.ts - generic 타입과 unknown 타입 적용
• 각종 error handler들 - Error | {message?: string} 타입 적용
• test 파일들 - 적절한 mock 인터페이스 정의
• 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체

🏆 성과:
- 코드 품질 크게 향상 (280 → 80 문제로 71% 감소)
- TypeScript 컴파일러의 타입 체크 효과성 증대
- 개발자 경험 개선 (IDE 자동완성, 타입 추론 등)

🧹 추가 정리:
- ESLint no-console/no-alert 경고 해결
- Prettier 포맷팅 적용으로 코드 스타일 통일

🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:08:51 +09:00

244 lines
6.5 KiB
Markdown

# iOS 코드 서명 설정 가이드
## 1. Apple Developer 계정 설정
### 필수 준비사항
- Apple Developer Program 계정 (연간 $99)
- Xcode 15.0 이상
- macOS 빌드 환경
### App Store Connect 설정
1. [App Store Connect](https://appstoreconnect.apple.com) 로그인
2. "My Apps" > "+" > "New App" 클릭
3. 앱 정보 입력:
- Platform: iOS
- Name: Zellyy Finance
- Primary Language: Korean
- Bundle ID: com.zellyy.finance
- SKU: zellyy-finance-ios
## 2. 인증서 및 프로비저닝 프로파일 생성
### Developer 계정에서 생성 (수동)
1. [Apple Developer Portal](https://developer.apple.com/account) 접속
2. Certificates, Identifiers & Profiles 섹션으로 이동
#### 인증서 생성
```bash
# 1. CSR(Certificate Signing Request) 생성
# 키체인 접근 > 인증서 지원 > 인증 기관에서 인증서 요청
# 2. Apple Developer Portal에서 인증서 생성
# - iOS Distribution (App Store and Ad Hoc)
# - CSR 파일 업로드
# - 생성된 인증서(.cer) 다운로드 및 키체인에 설치
```
#### App ID 생성/확인
```
- Identifier: com.zellyy.finance
- Description: Zellyy Finance
- Capabilities: 필요한 기능들 활성화 (Push Notifications 등)
```
#### 프로비저닝 프로파일 생성
```
- Type: App Store
- App ID: com.zellyy.finance
- Certificate: 위에서 생성한 Distribution 인증서
- Profile Name: Zellyy Finance App Store
```
### API 키를 통한 자동화 (권장)
```bash
# App Store Connect API 키 생성
# App Store Connect > 사용자 및 액세스 > 키 > API 키 > "+" 클릭
# - 이름: Zellyy Finance CI/CD
# - 액세스: App Manager 또는 Developer
# - 키 다운로드 (.p8 파일)
```
## 3. Xcode 프로젝트 설정
### Team 및 Bundle Identifier 설정
```bash
# ios/App/App.xcodeproj 열기
# 프로젝트 설정 > Signing & Capabilities
# - Team: Apple Developer 팀 선택
# - Bundle Identifier: com.zellyy.finance
# - Signing Certificate: iOS Distribution
```
### 빌드 설정 확인
```bash
# ios/App/App/Info.plist 확인
CFBundleIdentifier: com.zellyy.finance
CFBundleDisplayName: Zellyy Finance
CFBundleShortVersionString: 1.0.0
CFBundleVersion: 10000
```
## 4. GitHub Actions용 인증서 내보내기
### 인증서를 P12로 내보내기
```bash
# 키체인 접근에서:
# 1. iOS Distribution 인증서 선택
# 2. 개인키와 함께 내보내기 선택
# 3. .p12 파일로 저장
# 4. 내보내기 비밀번호 설정
```
### Base64로 인코딩
```bash
# P12 파일을 base64로 인코딩
base64 -i ios-distribution.p12 | pbcopy
# 결과를 IOS_CERTIFICATES_P12_BASE64 시크릿에 저장
```
### 프로비저닝 프로파일 내보내기
```bash
# ~/Library/MobileDevice/Provisioning Profiles/ 에서 찾거나
# Apple Developer Portal에서 다운로드
base64 -i ZellyyFinance_AppStore.mobileprovision | pbcopy
```
## 5. GitHub Secrets 설정
### iOS 관련 시크릿들
- `IOS_CERTIFICATES_P12_BASE64`: P12 인증서 파일의 base64 인코딩
- `IOS_CERTIFICATES_P12_PASSWORD`: P12 파일 내보내기 시 설정한 비밀번호
- `IOS_PROVISIONING_PROFILE_BASE64`: 프로비저닝 프로파일의 base64 인코딩
### App Store Connect API 시크릿들
- `APPSTORE_ISSUER_ID`: App Store Connect API 발급자 ID
- `APPSTORE_KEY_ID`: App Store Connect API 키 ID
- `APPSTORE_PRIVATE_KEY`: App Store Connect API 개인 키 (.p8 파일 내용)
## 6. ExportOptions.plist 설정 확인
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
<key>provisioningProfiles</key>
<dict>
<key>com.zellyy.finance</key>
<string>Zellyy Finance App Store</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Distribution</string>
<key>signingStyle</key>
<string>manual</string>
</dict>
</plist>
```
## 7. 로컬 빌드 테스트
### 릴리즈 빌드 테스트
```bash
# 웹 앱 빌드
npm run build:prod
# Capacitor 동기화
npm run mobile:sync
# iOS 프로젝트 열기
npm run ios:open
# Xcode에서 Archive 빌드
# Product > Archive 선택
# Archive 성공 시 Organizer에서 확인
```
### 명령어로 빌드 테스트
```bash
cd ios/App
# CocoaPods 의존성 설치
pod install
# 릴리즈 빌드
xcodebuild -workspace App.xcworkspace \
-scheme App \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath App.xcarchive \
archive
# IPA 내보내기
xcodebuild -exportArchive \
-archivePath App.xcarchive \
-exportPath ./build \
-exportOptionsPlist ExportOptions.plist
```
## 8. TestFlight 배포 설정
### 자동 업로드 설정
```bash
# fastlane 설치 (옵션)
gem install fastlane
# TestFlight 업로드
xcrun altool --upload-app \
--type ios \
--file "App.ipa" \
--username "your-apple-id@example.com" \
--password "app-specific-password"
```
### GitHub Actions 통합
```yaml
# .github/workflows/mobile-build.yml에서 사용
- name: Upload to TestFlight
uses: Apple-Actions/upload-testflight-build@v1
with:
app-path: ios/App/build/App.ipa
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
```
## 9. 보안 고려사항
### 인증서 관리
- P12 파일 및 프로비저닝 프로파일은 git에 커밋하지 않음
- Apple Developer 계정의 2단계 인증 활성화
- App Store Connect API 키는 최소 권한으로 설정
### CI/CD 보안
- GitHub Secrets로 모든 민감 정보 보호
- 릴리즈 브랜치에서만 서명된 빌드 생성
- 빌드 로그에서 민감 정보 노출 방지
## 10. 문제 해결
### 일반적인 오류들
- `Code signing error`: 인증서 또는 프로비저닝 프로파일 문제
- `Bundle ID mismatch`: Bundle Identifier 불일치
- `Provisioning profile expired`: 프로비저닝 프로파일 만료
- `Team ID not found`: Apple Developer 팀 설정 오류
### 디버깅 명령어
```bash
# 코드 서명 정보 확인
security find-identity -v -p codesigning
# 프로비저닝 프로파일 확인
ls ~/Library/MobileDevice/Provisioning\ Profiles/
# Xcode 빌드 로그 확인
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release build | xcpretty
```
### 유용한 도구들
- [iOS App Signer](https://github.com/DanTheMan827/ios-app-signer): GUI 코드 서명 도구
- [fastlane](https://fastlane.tools): iOS 배포 자동화 도구
- [xcpretty](https://github.com/xcpretty/xcpretty): Xcode 빌드 로그 포맷터