Jenkins에서 Unity 빌드 후 AppStore에 자동 업로드 환경 구축

·

· 최종 수정


미니어처 공장에서 나온 소포가 투명한 관을 타고 마을 위를 지나 작은 상점 우편함으로 가는 장면에 'Jenkins로 App Store 자동 업로드' 표제를 얹은 미니어처 사진풍 이미지

한눈에 보기

  • 무엇: Jenkins에서 Unity iOS 빌드가 끝나면 ipa를 App Store Connect(TestFlight)까지 자동으로 올리는 설정입니다.
  • 언제 쓰나: 빌드 서버를 따로 두고 있어서, 매번 xcarchive나 ipa를 열어 손으로 올리는 수고를 없애고 업로드 오류를 빌드 로그에서 바로 보고 싶을 때 씁니다.
  • 핵심 방법: Xcode 플러그인의 Export method를 app-store로 바꾸고, Apple 계정에서 앱 암호를 만든 뒤, 빌드 후 작업의 Execute Shell에서 xcrun altool --upload-app으로 올립니다. 2026년 10월 기준 Apple 안내서는 --upload-app 대신 --upload-package를 쓰라고 합니다.

확인한 환경: Jenkins Xcode 플러그인, Unity iOS 빌드, xcrun altool · 처음 쓴 날 2025-07-17 · 마지막 확인 2026-10-28

Jenkins에서 Unity 빌드를 돌리는 것까지는 꽤 오랫동안 잘 쓰고 있었습니다. 그런데 귀찮아서 AppStore와 GooglePlay에 자동으로 업로드하는 것까지는 만들지 않고 지냈습니다. 이번에 Jenkins 환경을 새로 꾸릴 일이 생겨서 작업하다 보니, 굳이 이걸 왜 안 하고 있었나 싶어서 업로드까지 자동화했습니다.

Jenkins 한 번 실행으로 Unity 빌드, 스토어용 ipa 내보내기, altool 업로드, TestFlight 확인까지 이어지는 네 단계 흐름도. 2단계 내보내기 방식과 3단계 업로드 명령이 이 글에서 자동화한 구간입니다.
Jenkins 한 번 실행으로 Unity 빌드부터 TestFlight 도착까지 이어집니다. 이 글에서 손댄 곳은 내보내기 방식(2단계)과 업로드 명령(3단계) 두 군데입니다.

Jenkins 빌드 후 시나리오

  1. App Store의 경우
    • ipa를 app-store용으로 빌드한 다음, 만들어진 ipa를 App Store Connect에 자동으로 올립니다.
    • 그 뒤 스토어 정보를 업데이트하는 건 직접 작성합니다.
    • fastlane 등으로 스토어 정보까지 업데이트하는 건 나중에 합니다.
  2. Google Play의 경우
    • aab를 빌드한 뒤, 만들어진 aab를 Google Play Console의 내부 테스트용으로 자동으로 올립니다.
    • 마찬가지로 스토어 정보를 업데이트하는 건 직접 작성합니다.

Jenkins 빌드 후 App Store IPA 업로드 자동화 3단계

1. AppStore 전용 ipa 빌드 만들기

먼저 Xcode 빌드 단계에서 app-store용 ipa를 만들도록 Job을 추가합니다. Jenkins의 Xcode 플러그인에서 Export method만 app-store로 바꿔 주면 끝입니다.

Export method만 app-store로 바꾸어 줌
Export method만 app-store로 바꾸어 줍니다.

2. Apple 계정에서 앱 암호(앱 전용 암호) 만들기

커맨드 라인에 개발자 계정과 비밀번호를 그대로 넣어 인증할 수도 있지만, 이건 너무 위험합니다. 그래서 앱에서만 쓰는 별도의 인증 암호(앱 전용 암호)를 만들어 씁니다.

https://appleid.apple.com/account/manage에 접속해 개발자 계정으로 로그인한 뒤, 터미널에서 쓸 앱 암호를 만듭니다.

2026년 10월 기준으로 Apple 지원 문서는 이 메뉴를 account.apple.com의 ‘로그인 및 보안 → 앱 암호’로 안내합니다. 앱 암호를 쓰려면 계정에 이중 인증이 켜져 있어야 합니다(Apple 지원: 앱 암호 사용하기).

앱스토어 계정에서 앱암호 만들기
앱스토어 계정에서 앱암호 만들기

‘앱 암호 생성’을 누르면 문구를 하나 입력해 앱 암호를 만들라고 합니다. 여기에는 앱 암호를 구별할 이름을 넣습니다. 우리는 ‘JENKINS’로 했습니다. 아래 화면처럼 암호가 만들어지면 잘 복사해 둡니다.

만들어진 앱 암호
만들어진 앱 암호

3. Jenkins의 ‘빌드 후 작업’에 ‘Execute Shell’ 명령 추가하기

이제 만든 앱 암호로, Jenkins에서 Xcode 빌드 명령 다음에 아래 Shell Script를 실행하게 하면 끝입니다.

Jenkins의 빌드후 작업에 Execute Shell 추가
Jenkins의 빌드후 작업에 Execute Shell 추가
# ipa 파일 경로 찾기
IPA_FILE=$(find build/ios/build/Release-iphoneos -name "*.ipa" -print | sort -t_ -k2,2nr | head -n 1)

# ipa 파일이 존재하는지 확인
if [ -z "$IPA_FILE" ]; then
  echo "IPA 파일을 찾을 수 없습니다. 빌드를 Unstable 상태로 설정합니다."
  exit 1  # 빌드를 Unstable로 설정
fi

# 빌드 업로드
xcrun altool --upload-app --type ios --file "$IPA_FILE" --verbose --username "애플 개발자 계정 이메일" --password "JENKINS용 앱암호"

위 스크립트의 ipa 파일 경로(build/ios/build/Release-iphoneos)는 각자 시스템에서 쓰는 Xcode build 폴더 이름에 맞게 바꿔 줘야 합니다.

위 스크립트로 ipa가 업로드되는 과정을 자세히 볼 수 있습니다. 업로드 중에 오류가 나면 Job이 실패하고, 콘솔 기록에서 자세한 내용을 확인할 수 있습니다.

빌드가 성공하면 App Store Connect에서 해당 앱의 TestFlight 항목에 들어가 업로드된 빌드를 확인할 수 있습니다.

2026년 10월 기준: Apple의 altool 안내서는 --upload-app을 더 이상 권하지 않는(deprecated) 명령으로 표시하고, 대신 --upload-package를 쓰라고 합니다. --upload-package는 앱의 Apple ID(--apple-id)와 번들 ID·버전 정보를 함께 넘겨야 하고, 인증은 앱 암호 대신 App Store Connect API 키(--apiKey, --apiIssuer)로도 할 수 있습니다.

새로 꾸민다면 API 키 쪽이 관리하기 편합니다. 앱 암호는 Apple 계정의 기본 암호를 바꾸면 모두 자동으로 무효화돼서 업로드가 갑자기 실패할 수 있지만(Apple 지원), API 키는 개인 계정에 묶이지 않는 팀 키로 만들고 역할을 골라 줄 수 있습니다(API 키 만들기). 그리고 2026년 4월 28일부터는 Xcode 26 이상, iOS 26 SDK로 빌드한 앱만 올릴 수 있으니 빌드 서버의 Xcode 버전도 확인하세요(Apple 업로드 요구 사항).

AppStore 업로드 자동화의 이점

ipa 업로드를 자동화하면, 빌드 서버를 따로 운영할 때 xcarchive나 ipa를 따로 열어 업로드하는 수고를 덜 수 있습니다. 더 나아가 업로드할 때 생기는 여러 문제가 빌드와 함께 묶이기 때문에, 업로드 문제를 바로바로 파악하고 고칠 수 있습니다. 업로드 단계에서 생기는 문제의 예는 Xcode 16에서 Facebook SDK의 BitCode 때문에 업로드가 실패하는 문제 글에서 볼 수 있습니다.

일단 ipa 업로드까지 자동화했으니, 다음에는 fastlane으로 앱스토어 정보 업데이트까지 한꺼번에 할 수 있게 해 볼 예정입니다.

자주 묻는 질문

xcrun altool –upload-app은 2026년에도 쓸 수 있나요?

Apple의 altool 안내서는 --upload-app을 deprecated(더 이상 권하지 않음)로 표시하고 --upload-package를 쓰라고 합니다. App Store Connect 도움말의 빌드 업로드 안내에는 아직 --upload-app 형식이 실려 있지만, 새로 꾸민다면 --upload-package로 옮겨 두는 편이 안전합니다.

Jenkins 업로드 인증은 앱 암호와 App Store Connect API 키 중 무엇이 좋나요?

둘 다 altool이 받는 인증 방식입니다. 앱 암호는 Apple 계정의 기본 암호를 바꾸면 모두 자동으로 무효화돼서 빌드 서버 업로드가 갑자기 실패할 수 있습니다. API 키는 App Store Connect의 사용자 및 액세스 → 통합 탭에서 팀 키로 만들고 역할을 골라 줄 수 있어서 서버용으로 관리하기 편합니다(Apple 문서).

앱 암호(앱 전용 암호)는 어디서 만드나요?

account.apple.com에 로그인한 뒤 ‘로그인 및 보안’의 ‘앱 암호’에서 만듭니다. 계정에 이중 인증이 켜져 있어야 하고, 이름(이 글에서는 ‘JENKINS’)을 붙여 두면 나중에 어느 암호인지 구별하기 쉽습니다(Apple 지원).

업로드한 빌드는 어디서 확인하나요?

업로드가 끝나면 App Store Connect에서 해당 앱의 TestFlight 항목에 빌드가 보입니다. 업로드 중에 오류가 나면 Jenkins Job이 실패하니, 콘솔 기록에서 원인을 확인하면 됩니다.

함께 보면 좋은 글

UNIT5 Dev Blog

Unity·모바일 게임 개발팀 UNIT5가 실제 개발 중 겪은 문제와 해결 과정을 기록합니다. 틀린 내용이나 더 좋은 방법이 있다면 댓글로 알려주세요. 블로그 소개 →

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최근 글