콘텐츠로 이동

Unity iOS 빌드와 fastlane 연동 시 CFBundleVersion 충돌 피하기

iOS 빌드 파이프라인은 Jenkins Job 두 단계로 되어 있다. Unity CLI로 Xcode 프로젝트(.xcodeproj)를 뽑아내는 iOS Job이 끝나면, 트리거로 fastlane Job을 실행해 버전을 올리고 앱을 빌드한 뒤 .ipa를 업로드한다.

CFBundleVersion을 0으로 명시해 두면 .ipa를 뽑는 시점에 동적으로 버전이 매겨진다고 이해했는데, 우연히 타이밍이 맞았을 뿐 잘못된 가정이었다.

시험해 보니 아카이빙 후 Distribute App 시점에 CFBundleShortVersionString을 기준으로 CFBundleVersion을 가져와 .ipa에 값을 넣고 있었다. DistributionSummary.plist 역시 Xcode에서 Distribute한 뒤 만들어지는 보고서 파일이었다.

이 구성에서는 같은 앱의 서로 다른 빌드 Job 두 개가 동시에 돌면 CFBundleVersion이 같은 숫자로 나올 수 있다.

빌드 파라미터 USE_FASTLANE으로 경로를 나눴다.

  • USE_FASTLANE이 true: iOS Job은 Unity iOS 빌드(.xcodeproj 추출)까지만 수행한다. 이어서 TestFlight 업로드 Job이 CFBundleVersion을 최신 빌드 번호 기준으로 설정하고 build_app으로 .ipa를 뽑아 TestFlight에 업로드한다.
  • USE_FASTLANE이 false: iOS Job이 Xcode 빌드까지 수행하고 altool로 .ipa를 업로드한다.