Skip to content

TestFlight와 App Store IPA의 Firebase 설정을 검증한다 #744

Description

@opficdev

상위 이슈: #740

배경

Fastlane은 현재 IPA 내부의 FIRESTORE_DATABASE_ID, FUNCTION_API_BASE_URL, Crashlytics 활성화 여부를 검증한다. 현재 기대값은 TestFlight staging, App Store prod이지만 Firebase project 분리 이후 두 환경은 각 project의 (default) Firestore를 사용한다.

PR #748에서 workflow가 환경별 GoogleService-Info.plist를 공통 경로에 설치하도록 구성했지만, IPA에 실제 포함된 Firebase project 식별자는 아직 검증하지 않는다. database ID만으로는 두 환경을 구분할 수 없으므로 앱 환경, Firebase project와 Functions URL을 함께 확인해야 한다.

목표

TestFlight와 App Store가 공유할 수 있는 IPA 검증기에 Firebase project 식별자, 앱 환경, (default) database와 공통 api URL 검증을 추가한다.

작업

  • IPA 내부 Info.plist에서 APP_ENVIRONMENT를 검증함
  • IPA 내부 Info.plist에서 bundle ID가 opfic.DevLog인지 검증함
  • IPA 내부 GoogleService-Info.plist에서 PROJECT_ID를 검증함
  • IPA 내부 GoogleService-Info.plist에서 GOOGLE_APP_ID를 검증함
  • IPA 내부 GoogleService-Info.plist에서 BUNDLE_IDopfic.DevLog인지 검증함
  • FIRESTORE_DATABASE_ID의 환경별 기대값을 검증 함수 입력으로 전달함
  • Firebase project 분리 이후 TestFlight와 App Store의 FIRESTORE_DATABASE_ID 기대값을 모두 (default)로 검증함
  • FUNCTION_API_BASE_URL이 해당 PROJECT_ID의 공통 api를 가리키는지 검증함
  • APP_ENVIRONMENT, Firebase 식별자, database ID와 Functions URL을 하나의 환경별 기대값 묶음으로 전달함
  • 확인되지 않은 project ID, app ID와 URL을 추측하거나 고정하지 않음
  • 누락 또는 불일치한 항목을 식별할 수 있는 오류를 출력함
  • build lane과 upload lane이 동일한 검증 함수를 사용하도록 함

이미 완료된 범위

  • App scheme의 Staging/Release configuration 빌드
  • 환경별 plist 선택과 공통 GoogleService-Info.plist 설치
  • APP_ENVIRONMENT=staging/prod 빌드 설정 주입
  • 기존 named database ID와 Functions URL 검증
  • 선택된 공통 plist를 이용한 Crashlytics dSYM 업로드

제외 범위

  • staging과 prod의 Firebase 식별자 및 공통 api URL 결정
  • Project.swift와 Fastlane의 환경별 실제 기대값 전환
  • workflow별 Firebase 환경 선택
  • 실제 IPA 업로드
  • Firebase Console 및 App Store Connect 변경

staging 기대값은 #745에서 연결하고 prod 기대값은 #746과 opficdev/DevLog_Firebase#53의 전환 과정에서 연결한다.

검증

  • ruby -c fastlane/Fastfile
  • 올바른 환경별 기대값을 전달한 IPA 검증 성공
  • APP_ENVIRONMENT 누락 또는 불일치 검증 실패
  • PROJECT_ID 누락 또는 불일치 검증 실패
  • GOOGLE_APP_ID 누락 또는 불일치 검증 실패
  • 앱과 Firebase plist의 bundle ID 불일치 검증 실패
  • database ID 또는 Functions URL 불일치 검증 실패
  • 서로 다른 PROJECT_ID에서 같은 FIRESTORE_DATABASE_ID=(default)를 사용하는 두 환경의 검증 성공
  • 전환이 끝난 환경에 staging 또는 prod named database ID가 남으면 검증 실패
  • build lane과 upload lane의 검증 경로가 일치함

완료 조건

  • Firebase project 설정이 잘못된 IPA를 업로드할 수 없음
  • database ID만으로 환경을 판별하지 않음
  • TestFlight와 App Store가 동일한 검증 함수를 공유함
  • 환경별 실제 기대값은 #745와 #746에서 독립적으로 연결할 수 있음

의존 관계

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