Skip to content

TestFlight를 staging Firebase 프로젝트로 전환한다 #745

Description

@opficdev

상위 이슈: #740

배경

PR #748에서 CI와 TestFlight workflow가 staging 원본 plist를 공통 GoogleService-Info.plist 경로에 설치하도록 구성했다. App scheme의 Staging configuration, APP_ENVIRONMENT=staging과 선택된 plist를 사용하는 dSYM 업로드 구조도 준비돼 있다.

현재 iOS는 Debug/Staging에서 FIRESTORE_DATABASE_ID=staginghttps://asia-northeast3-devlog-c87b6.cloudfunctions.net/stagingApi/api를 사용하므로 기존 단일 project의 staging 자원을 가리킨다.

새 staging 서버는 devlog-staging project의 (default) Firestore와 api 함수로 배포됐다. iOS의 Firebase plist, database ID와 Functions URL을 이 자원에 연결하고 산출물을 검증해야 한다.

확인된 staging 기대값

  • PROJECT_ID: devlog-staging
  • GOOGLE_APP_ID: 1:686659799179:ios:eba4e86096153f0539ec8e
  • BUNDLE_ID: opfic.DevLog
  • FIRESTORE_DATABASE_ID: (default)
  • FUNCTION_API_BASE_URL: https://asia-northeast3-devlog-staging.cloudfunctions.net/api/api

목표

로컬 Debug, CI와 TestFlight 빌드가 새 staging Firebase project의 (default) Firestore와 공통 api만 참조하도록 구성하고 검증한다.

작업

  • staging 원본 GoogleService-Info.plist가 확인된 기대값과 일치하는지 확인함
  • Project.swiftDebugStagingFIRESTORE_DATABASE_ID=(default)를 주입함
  • Fastlane의 TestFlight database 기대값을 (default)로 변경함
  • Fastlane의 TestFlight Functions URL을 staging 공통 api URL로 변경함
  • #744의 공통 검증기에 staging 기대값 전체를 전달함
  • upload 비활성 상태로 TestFlight workflow build를 수행함
  • 생성된 IPA에 staging plist 하나만 포함됐는지 확인함
  • 생성된 IPA가 devlog-c87b6, 기존 stagingApi, prod app ID 또는 prod Functions URL을 포함하면 실패하도록 확인함
  • 별도 승인된 TestFlight 업로드 이후 staging Auth와 custom token 로그인을 확인함
  • staging Functions API와 (default) Firestore 읽기·쓰기를 확인함
  • staging FCM token 등록과 push 수신을 확인함
  • staging Crashlytics 대시보드에서 dSYM 연결을 확인함
  • 실패 시 기존 TestFlight 설정으로 되돌릴 기준을 기록함

이미 완료된 범위

  • testflight.ymlenvironment: staging 지정
  • App scheme과 Staging configuration 사용
  • APP_ENVIRONMENT=staging 주입
  • staging plist를 사용하는 Crashlytics dSYM 업로드 경로
  • devlog-staging의 iOS 앱 등록과 공통 api 배포

제외 범위

  • App Store prod 전환
  • staging Firebase project 생성과 Console 설정
  • Firebase Functions와 Firestore 서버 자원 배포
  • 별도 승인 없는 실제 TestFlight 업로드

서버 자원과의 교차 project 사용 여부는 opficdev/DevLog_Firebase#52에서 연계 검증한다.

검증

  • upload 비활성 TestFlight workflow build 성공
  • IPA의 APP_ENVIRONMENT=staging 확인
  • IPA의 PROJECT_ID=devlog-staging 확인
  • IPA의 GOOGLE_APP_ID=1:686659799179:ios:eba4e86096153f0539ec8e 확인
  • IPA와 Firebase plist의 BUNDLE_ID=opfic.DevLog 확인
  • IPA의 FIRESTORE_DATABASE_ID=(default) 확인
  • IPA의 FUNCTION_API_BASE_URL=https://asia-northeast3-devlog-staging.cloudfunctions.net/api/api 확인
  • devlog-c87b6, named database ID, 기존 stagingApi 또는 prod 식별자 사용 시 검증 실패
  • dSYM 업로드 명령이 빌드에 사용된 staging plist를 참조함
  • staging Auth, Functions, Firestore, FCM과 Crashlytics 연결 확인

완료 조건

  • 로컬 Debug와 TestFlight IPA가 devlog-staging 설정만 포함함
  • 로컬 Debug와 TestFlight가 devlog-staging/(default) Firestore를 사용함
  • TestFlight IPA가 staging의 공통 api URL을 사용함
  • 기존 단일 project 또는 prod Firebase project 설정이 포함된 빌드는 업로드 전에 차단됨
  • staging 앱과 서버가 같은 Firebase project를 사용함
  • staging Firebase 프로젝트의 서버 동작을 검증한다 DevLog_Firebase#52 통합 검증을 시작할 수 있음

의존 관계

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