Skip to content

iOS 앱에서 staging과 prod Firebase 프로젝트를 분리한다 #740

Description

@opficdev

배경

현재 앱은 하나의 Firebase project devlog-c87b6 안에서 Debug/Staging은 Firestore database staging, Releaseprod를 사용하고 Functions URL도 configuration별로 구분한다.

새 staging Firebase project devlog-staging에는 (default) Firestore와 공통 api 함수가 배포됐지만 iOS의 database ID, Functions URL과 Firebase plist 연결은 아직 기존 단일 project를 가리킨다. prod도 opficdev/DevLog_Firebase#53에서 기존 prod database를 (default)로 이전한 뒤 공통 api 구조로 전환할 예정이다.

TestFlight와 App Store가 인증, Firestore, FCM, Crashlytics, Analytics와 Functions를 포함해 서로 다른 Firebase project를 사용하도록 빌드 및 배포 경로를 분리한다.

PR #748에서 단일 App 구조, 환경별 plist 설치, 앱 환경 판별과 Firebase 필수 설정 처리를 먼저 구성했다. 남은 작업은 빌드 산출물 검증, staging 연결과 검증, prod 전환과 최종 격리 검증이다.

확정 구조

  • App target과 bundle ID opfic.DevLog 유지
  • 기존 App scheme 유지
  • Project.swiftApplication/App/Sources/Resource/GoogleService-Info.plist 단일 리소스 경로 유지
  • 로컬 Xcode 개발, CI, TestFlight는 staging Firebase project 사용
  • App Store 배포는 prod Firebase project 사용
  • staging과 prod는 각 Firebase project의 (default) Firestore 사용
  • 환경 구분은 database ID가 아니라 APP_ENVIRONMENT, PROJECT_ID, GOOGLE_APP_IDFUNCTION_API_BASE_URL의 조합으로 검증
  • GitHub Actions가 Fastlane 실행 전에 환경별 원본 plist 하나를 공통 GoogleService-Info.plist 경로에 설치
  • 기존 FirebaseApp.configure() 유지

완료된 기반 작업

남은 작업

진행 순서

  1. staging Firebase 프로젝트의 서버 자원을 구성한다 DevLog_Firebase#51 staging 서버 배포 결과 확인
  2. TestFlight와 App Store IPA의 Firebase 설정을 검증한다 #744 IPA Firebase 설정 검증 확장
  3. TestFlight를 staging Firebase 프로젝트로 전환한다 #745 TestFlight staging 연결과 빌드 검증
  4. staging Firebase 프로젝트의 서버 동작을 검증한다 DevLog_Firebase#52 staging 통합 검증
  5. opficdev/DevLog_Firebase#53의 prod 데이터 이전·서버 전환과 #746의 iOS prod 연결을 전환 순서에 맞춰 수행
  6. prod Firebase 프로젝트를 공통 Functions 구조로 전환한다 DevLog_Firebase#53 prod 통합 검증 완료
  7. iOS Firebase 프로젝트 분리와 rollback을 검증한다 #747 환경 격리와 rollback 최종 검증

제외 범위

  • 별도 App target 또는 bundle ID 생성
  • 별도 App scheme 생성
  • 별도 App Store Connect 앱 생성
  • 로컬 Xcode 또는 로컬 Fastlane용 Firebase 환경 전환 장치
  • Firebase project 생성과 서버 자원 배포
  • 기존 Firebase 함수 또는 데이터 삭제
  • 실행 시점에 Firebase project 선택

완료 조건

  • CI와 TestFlight 산출물은 staging Firebase project 설정과 FIRESTORE_DATABASE_ID=(default)를 포함함
  • App Store 산출물은 prod Firebase project 설정과 FIRESTORE_DATABASE_ID=(default)를 포함함
  • 환경별 Auth, Firestore, FCM, Crashlytics, Analytics와 Functions가 분리됨
  • 앱 번들에는 선택된 GoogleService-Info.plist 하나만 포함됨
  • 잘못된 plist, project ID, database ID 또는 Functions URL이 포함된 배포가 차단됨
  • rollback 절차와 기존 단일 project의 named database 및 staging 자원 제거 가능 시점이 기록됨

관련 이슈

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions