Description 배경
원인
Application/App/Sources/Resource/Info.plist의 FirebaseCrashlyticsCollectionEnabled 값에 #if CRASHLYTICS_COLLECTION_ENABLED, #else, #endif 전처리 구문이 포함됨
Application/App/Project.swift는 INFOPLIST_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.xcconfig의 MARKETING_VERSION으로 관리되지만, build_for_store는 원본 Info.plist를 통해 버전을 조회하고 있음
작업 범위
fastlane/Fastfile의 공통 build_for_store가 Application/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.xcconfig의 MARKETING_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 실행
Reactions are currently unavailable
You can’t perform that action at this time.
배경
a1f39082526f61dc081b86a41187045aa7cb64cd의Build for App Store단계에서 실패함bundle exec fastlane appstore_build_only가fastlane/Fastfile:185의get_version_number호출에서CFPropertyList ... Format error! (CFFormatError)를 반환함Info.plist에 전처리 분기가 추가됨appstore_build_only와testflight_build_only가 모두build_for_store를 호출하므로 TestFlight 배포 빌드에도 같은 문제가 발생할 수 있음원인
Application/App/Sources/Resource/Info.plist의FirebaseCrashlyticsCollectionEnabled값에#if CRASHLYTICS_COLLECTION_ENABLED,#else,#endif전처리 구문이 포함됨Application/App/Project.swift는INFOPLIST_PREPROCESS=YES를 설정하므로 Xcode 빌드 중에는 해당 구문이 처리됨get_version_number는 Xcode 전처리 전에get_version_number_from_plist!와xcodeproj/plist.rb를 통해 원본Info.plist를 읽음Info.plist의 전처리 구문이 XML 형식으로 해석되지 않아CFFormatError가 발생함Application/Shared/Version.xcconfig의MARKETING_VERSION으로 관리되지만,build_for_store는 원본Info.plist를 통해 버전을 조회하고 있음작업 범위
fastlane/Fastfile의 공통build_for_store가Application/Shared/Version.xcconfig에서MARKETING_VERSION을 읽도록 버전 조회 경로 정리MARKETING_VERSION키 누락, 빈 값 또는 형식 오류 발생 시 원인과 대상 경로를 확인할 수 있는 Fastlane 오류 제공완료 조건
build_for_store의 마케팅 버전 조회가 원본Info.plist를 파싱하지 않음Application/Shared/Version.xcconfig의MARKETING_VERSION을 사용함CFFormatError대신 원인을 확인할 수 있는 Fastlane 오류로 실패함bundle exec fastlane appstore_build_only가 버전 조회를 통과하고 App Store용 아카이브를 생성함bundle exec fastlane testflight_build_only가 버전 조회를 통과하고 TestFlight용 아카이브를 생성함제외 범위
Info.plist의 Crashlytics 활성화 정책 재설계