Skip to content

App Store와 TestFlight가 공유하는 build_for_store의 버전 조회 실패를 해결한다 #730

Description

@opficdev

배경

원인

  • Application/App/Sources/Resource/Info.plistFirebaseCrashlyticsCollectionEnabled 값에 #if CRASHLYTICS_COLLECTION_ENABLED, #else, #endif 전처리 구문이 포함됨
  • Application/App/Project.swiftINFOPLIST_PREPROCESS=YES를 설정하므로 Xcode 빌드 중에는 해당 구문이 처리됨
  • Fastlane의 get_version_number는 Xcode 전처리 전에 get_version_number_from_plist!xcodeproj/plist.rb를 통해 원본 Info.plist를 읽음
  • 원본 Info.plist의 전처리 구문이 XML 형식으로 해석되지 않아 CFFormatError가 발생함
  • 마케팅 버전은 이미 Application/Shared/Version.xcconfigMARKETING_VERSION으로 관리되지만, build_for_store는 원본 Info.plist를 통해 버전을 조회하고 있음

작업 범위

  • fastlane/Fastfile의 공통 build_for_storeApplication/Shared/Version.xcconfig에서 MARKETING_VERSION을 읽도록 버전 조회 경로 정리
  • 조회한 마케팅 버전을 App Store Connect의 최근 빌드 번호 조회에 사용
  • 버전 파일 누락, MARKETING_VERSION 키 누락, 빈 값 또는 형식 오류 발생 시 원인과 대상 경로를 확인할 수 있는 Fastlane 오류 제공
  • [#722](https://github.com/opficdev/DevLog_iOS/issues/722)에서 확정한 다음 동작 유지
    • Xcode 직접 빌드의 Crashlytics 기본 비활성화
    • TestFlight와 App Store 배포 빌드의 Crashlytics 활성화
    • 배포 빌드의 dSYM 생성·업로드와 UUID 목록 보존
    • 생성된 IPA의 Crashlytics 활성화 값 검증
  • App Store와 TestFlight의 build-only lane을 각각 검증

완료 조건

  • build_for_store의 마케팅 버전 조회가 원본 Info.plist를 파싱하지 않음
  • App Store와 TestFlight가 모두 Application/Shared/Version.xcconfigMARKETING_VERSION을 사용함
  • 버전 파일이나 키가 없거나 값의 형식이 올바르지 않으면 CFFormatError 대신 원인을 확인할 수 있는 Fastlane 오류로 실패함
  • bundle exec fastlane appstore_build_only가 버전 조회를 통과하고 App Store용 아카이브를 생성함
  • bundle exec fastlane testflight_build_only가 버전 조회를 통과하고 TestFlight용 아카이브를 생성함
  • 두 배포 빌드에서 Crashlytics 활성화, dSYM 생성과 기존 배포 검증 흐름이 유지됨
  • 앱이나 Simulator를 실행하지 않고 build-only 방식으로 검증함

제외 범위

  • Info.plist의 Crashlytics 활성화 정책 재설계
  • Xcode 직접 빌드와 스토어 배포 빌드의 Crashlytics 구분 변경
  • Fastlane 갱신
  • 인증서, 프로비저닝 프로파일, 코드 서명 문제 수정
  • App Store Connect 업로드 문제 수정
  • 앱 또는 Simulator 실행

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