App Store 출시시 반드시 증가해야하는 iOS 앱 버전 / 빌드 번호는 무엇입니까?


107

iOS 앱의 버전 / 빌드 필드는 다음과 같습니다.

  • "Version" CFBundleShortVersionString (문자열-iOS, OS X)은 앱의 릴리스 된 반복을 식별하는 번들의 릴리스 버전 번호를 지정합니다. 릴리스 버전 번호는 마침표로 구분 된 세 개의 정수로 구성된 문자열입니다.

  • "Build" CFBundleVersion (문자열-iOS, OS X)은 번들의 반복 (출시 또는 미출시)을 식별하는 번들의 빌드 버전 번호를 지정합니다. 빌드 버전 번호는 첫 번째 정수가 0보다 큰 음수가 아닌 세 개의 마침표로 구분 된 정수로 구성된 문자열이어야합니다. 문자열에는 숫자 (0-9) 및 마침표 (.) 문자 만 포함되어야합니다. 선행 0은 각 정수에서 잘리고 무시됩니다 (즉, 1.02.3은 1.2.3과 동일 함). 이 키는 지역화 할 수 없습니다.

  • "iTunes Connect 버전 번호" : iTunes Connect 에서 새 버전의 앱을 생성 할 때 지정하는 버전 번호입니다.

내 질문은 :

새로운 버전의 앱이 iTunes Connect에 업로드되거나 App Store에 출시 될 때 어떤 버전 / 빌드 번호 를 증가시켜야 합니까?

앱 업데이트간에 "버전" CFBundleShortVersionString또는 "빌드" CFBundleVersion가 동일하게 유지 될 수 있습니까?

Apple 소스에 대한 추가 포인트 또는 잘못된 버전 / 빌드 번호를 업로드 할 때 iTunesConnect가 표시하는 정확한 오류 메시지.


Android / Google Play 참고 :

이 질문에 메시지를 표시 논의는 구글의 안드로이드 응용 프로그램의 공개 "버전"스토어는 않는 플레이한다는 것입니다 하지 증가 될 필요에 어떠한 방식으로 검증. 는 android:versionName, 릴리스간에 동일하게 유지 업그레이드, 다운 그레이드, 또는 임의의 문자열이 아닌 나타납니다 유효한 "버전 번호"가 될 것을 무언가가 될 수 있습니다.

android:versionName — 사용자에게 표시되어야하는 애플리케이션 코드의 릴리스 버전을 나타내는 문자열 값입니다.

값은 문자열이므로 애플리케이션 버전을 <major>.<minor>.<point>문자열 로 설명 하거나 다른 유형 의 절대 또는 상대 버전 식별자 로 설명 할 수 있습니다 .

Android에서 versionName과 versionNumber의 차이점

는 반면 android:versionCode증분-에 출시 정수로 적용됩니다.


Apple 문서

새로 승인 된 답변 에서 언급했듯이 Apple은 최근 버전 및 빌드 번호 체계를 자세히 설명하는 기술 노트를 게시했습니다.

Apple 기술 노트 TN2420-버전 번호 및 빌드 번호


스크린 샷을 포함한 자세한 답변 : stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

답변:


115

Apple 기술 노트 TN2420, 버전 번호 및 빌드 번호

요약:

  • 쌍 ( Version, Build number)은 고유해야합니다.
    • 시퀀스는 유효합니다 : (1.0.1, 12)-> (1.0.1, 13)-> (1.0.2, 13)-> (1.0.2, 14) ...
  • Version( CFBundleShortVersionString )은 오름차순이어야합니다.
  • Build number( CFBundleVersion )은 오름차순이어야합니다.

버전 번호 및 빌드 번호 체크리스트

다음은 App Store에 새 빌드를 제출할 때 확인할 수있는 몇 가지 사항입니다. 버전 번호와 빌드 번호를 올바르게 설정했는지 확인하면 앱이 잘못 구성되어 앱이 자동으로 거부되는 것을 방지 할 수 있습니다.

  1. 앱의 새 버전마다 새 버전 번호를 만들어야합니다. 이 번호는 마지막으로 사용한 버전 번호보다 커야합니다. 앱의 특정 릴리스에 대해 많은 빌드를 제공 할 수 있지만 앱의 새 릴리스마다 하나의 새 버전 번호 만 사용하면됩니다.
  2. 버전 번호는 재사용 할 수 없습니다.
  3. 제출하는 모든 새 빌드에 대해 값이 마지막으로 사용한 빌드 번호보다 큰 새 빌드 번호를 발명해야합니다 (동일한 버전에 대해).
  4. 다른 릴리스 트레인에서 빌드 번호를 재사용 할 수 있지만 동일한 릴리스 트레인 내에서 빌드 번호를 재사용 할 수는 없습니다. macOS 앱의 경우 릴리스 트레인에서 빌드 번호를 재사용 할 수 없습니다.

체크리스트에 따르면 다음 (Version, Build Number)순서도 유효합니다.

  • 사례 : Build Number다른 릴리스 트레인에서 재사용 . (참고 : 아닙니다 맥 OS 응용 프로그램)

    (1.0.0, 1)-> (1.0.0, 2)-> ...-> (1.0.0, 11)-> ( 1.0.1 , 1 )-> (1.0.1, 2)


혼란 스럽습니다. 조건 중 하나는 "버전 번호를 다시 사용할 수 없습니다."이지만 마지막 예에서는 빌드 번호가 증가하는 동안 버전 번호가 동일하게 유지됩니다. 내가 뭔가를 잘못 해석하고 있습니까?
Emil

@Emil, (버전, 빌드 번호) 쌍은 재사용 할 수 없다고 생각합니다.
AechoLiu

6
@EmilParikh 버전 번호는 출시 전에 Apple에 여러 번 업로드 할 수 있으며 각각 고유 한 빌드 번호가 있습니다. 그러나 일단 릴리스되면 해당 버전 번호를 다시 사용할 수 없습니다.
pkamb

1
TN2420은 "버전 번호와 빌드 번호는 마침표로 구분 된 최대 3 개의 구성 요소를 가질 수 있습니다."라고 말한 다음 다음과 같은 잘못된 예제 1.10000.1.5 를 제공합니다 . 그러나 크롬을 포함한 많은 앱 이 4 개의 구성 요소를 포함하는 버전 번호 (예 : 68.0.3440.83 )를 사용하는 것처럼 보입니다 . TN2420 페이지에 " 중요 :이 문서는 더 이상 업데이트되지 않습니다. "라고 언급되어 있다는 사실에 의해 설명 될 수 있습니다 . 그러나 새 규칙을 정의하는 업데이트 된 문서를 찾을 수 없었습니다. 다른 사람이 혼란스러워?
catanman

@catanman 나는이 시맨틱 버전을 좋아한다 . (major, minor, patch)매너 로 버전을 구성하자 . 그리고 이전에 4 개의 구성 요소를 사용했지만 App Store는 4 개의 구성 요소가있는 형식을 허용하지 않습니다.
AechoLiu

38

CFBundleShortVersionString당신이 아이튠즈에 연결을 줄 버전 번호와 일치해야합니다. 사용자가 App Store에서 앱을 볼 때 나타나는 버전 번호이기도합니다.

버전 번호는 스토어에 표시되며 해당 버전은 나중에 iTunes Connect에 입력 한 버전 번호와 일치해야합니다.

출처

CFBundleVersion앱 스토어에 표시되지 않지만 앱이 업데이트되면 결정하기 위해 아이튠즈에 의해 사용된다.

"버전 번호 및 빌드 문자열 설정"에 설명 된대로 빌드 문자열을 업데이트하면 iTunes는 빌드 문자열이 변경되었음을 인식하고 새 iOS App Store 패키지를 테스트 장비에 적절하게 동기화합니다.

출처

질문에 더 구체적으로 답변하는 중 ...

앱의 새 버전을 앱 스토어에 업로드 할 때 어떤 버전 / 빌드 번호를 증가시켜야합니까?

양자 모두. 하나는 App Store에 표시되고 다른 하나는 iTunes에서 앱을 업데이트하는 데 사용됩니다.

CFBundleShortVersionString 또는 CFBundleVersion이 앱 업데이트간에 동일하게 유지 될 수 있습니까?

아니요. (메타 질문, 사용 사례는 무엇입니까? 어떤 식 으로든 페이로드를 편집했다면 빌드가 달라지고 사용자가 이에 대해 알고 싶어 할 것입니다). 시도하면 아래와 같은 오류 메시지가 표시됩니다.

오류 메시지

아니면 새 버전의 앱에 더 많은 숫자가 업로드되도록하기 위해 이전의 각 숫자와 비교됩니까?

예. 은 Using semver.org 표준.

CFBundleShortVersionString 및 CFBundleVersion 번호가 어떤 식 으로든 서로 비교됩니까?

아니.


2
맞습니다, 두 숫자가 어떻게 사용되는지 압니다. 문제는 앱의 새 버전을 출시 할 때 둘 다 증분 되어야 한다는 것입니다.
pkamb

2
예, 둘 다 업데이트하지 않고 앱을 App Store에 푸시하려고하면 오류 메시지가 표시됩니다. 예 : stackoverflow.com/questions/19367893/…
Andy

감사합니다. 훌륭한 편집입니다. 특히 그 링크의 경우. 주최자의 유효성 검사기가 CFBundleVersion 및 CFBundleShortVersionString 모두에 대해 "상위 버전을 포함해야 함"오류를 표시합니다.
pkamb

1
+1 for SemVer 링크 ... 버전 번호 MAJOR.MINOR.PATCH가 주어지면 호환되지 않는 API 변경시 MAJOR 버전, 이전 버전과 호환되는 방식으로 기능을 추가 할 때 MINOR 버전, 이전 버전으로 만들 때 PATCH 버전을 증가시킵니다. -호환 가능한 버그 수정.
jeet.chanchawat

이와 관련 하여 사용 사례는 무엇입니까? 어떤 식 으로든 페이로드를 편집 한 경우 빌드가 달라지며 사용자는 이에 대해 알고 싶어 할 것 입니다. 내 사용 사례는 내 앱이 Apple에서 성공적으로 검토되었지만 이전에 App Store에 출시되지 않은 것입니다. 오류를 발견했고 변경하지 않고 버그를 수정하고 싶습니다 CFBundleShortVersionString. 이게 가능해? 내 앱을 거부하고 싶습니다.
테스트

31

CFBundleShortVersionString 은 버전의 공개 "이름"입니다 (예 : "2.5"또는 "3.8.1"). 릴리스 할 때마다 늘려야합니다 .

CFBundleVersion 은 비공개 빌드 번호입니다. AppStore에 표시되지 않습니다. 업로드 할 때마다 늘려야합니다 . 즉, 온라인 상태가되기 전에 바이너리를 거부하고 새 바이너리를 업로드하려는 경우 동일한 CFBundleShortVersionString을 가지지 만 더 높은 CFBundleVersion (예 : 공개 "2.5", 비공개 "2.5", 그런 다음 바이너리 거부 및 비공개 '2.5.1'다시 업로드)

2016 년 11 월 16 일 수정 :

/ ! \ CFBundleVersion 속성은 코드의 NSURLConnection 에서 보낸 헤더 에서도 CFBundleName 과 함께 사용됩니다 .User-Agent

예 : CFBundleNameMyApp 이고 CFBundleVersion 이 2.21이면 NSURLConnection 을 사용하여 코드에서 직접 보낸 프로그래밍 방식 HTTP 쿼리 에 헤더가 포함됩니다.

User-Agent: MyApp/2.21 CFNetwork/... Darwin/...

(UIWebView에 의해 자동으로 발행 된 요청에는 적용되지 않습니다.)


2
업로드 / 출시 요구 사항이 크게 다릅니다.
pkamb

@gabriel, 빌드 번호를 XX-rc2로 설정하려고 시도했지만 Organizer 유효성 검사기는 X, Y 및 Z가 정수인 XYZ와 다른 것을 설정할 수 없습니다 : S. -rc2 빌드 번호가 있으면 좋을 것입니다. 한 번의 릴리스를 제출할 수 있었습니까?
Néstor 2015 년

1
@nestor 당신이 맞아요, 내가 틀렸어요. 숫자 만 허용됩니다. 내 대답을 수정하겠습니다.
가브리엘

@gabriel, 나는 구문 분석 스크립트를 사용하여 X.X-rc2X.X.2 CI 시스템 buildNumber에서 iTunesConnect에 업로드하기 위해을 생성합니다 .
AechoLiu

5

CFBundleVersion 및 CFBundleShortVersionString은 앱의 마지막 버전 번호보다 커야합니다. 동일하게 유지하는 것이 좋습니다. -info.plist에서 찾을 수 있습니다.

Organizer에서 앱의 유효성을 검사하려고 할 때 둘 중 하나가 증가하지 않은 경우 오류가 발생합니다. 어젯밤 나에게 일어났다.


내 질문에서 두 가지 키를 모두 언급했습니다. 두 값이 모두 증가해야한다는 대답이 여기에 있습니까? 답변을 더 잘 지원할 수 있습니까?
pkamb

예, 둘 다 증분되어야합니다. 어젯밤에 증분하기 전에 제출을 시도했을 때 두 키에 대해 불평했습니다.
xoail 2014 년

추가 정보에 감사드립니다. 빌드를 업로드 할 때 경험을 추가하려면 답변을 편집해야합니다.
pkamb

6
"동일하게 유지하는 것이 좋습니다"-반드시 사실은 아닙니다. 앱에서 작업하는 테스터가있는 경우 변경 사항이 적용될 때 빌드 번호를 늘리지 만 버전 번호는 동일하게 유지하는 것이 좋습니다. 지속적 통합을 사용하면 예를 들어 테스터에게 배포하기 전에 빌드 번호를 업데이트하도록 할 수 있습니다.
Andy

@Andy 당신 말이 맞아요. 사용 사례를 알려 주셔서 감사합니다. 저는 단일 개발자 / 테스터 환경에 대해서만 생각했습니다.
xoail 2014 년

5

둘 다 CFBundleVersionCFBundleShortVersionString 필수App Store에 새 버전을 출시 할 때 증가 합니다.

또한 문자열 중 하나는 iTunes Connect에 지정된 버전과 일치해야합니다.

Xcode Organizer Validator 오류 : 버전 번호를 증가시켜야합니다.

이 질문은 때 응용 프로그램의 유효성을 검사 거부 Xcode의 주최자의 유효성 검사기의 위의 스크린 샷을 포함 CFBundleVersion하고 CFBundleShortVersionString증가되지 않은 있습니다.

  • 이 번들은 유효하지 않습니다. CFBundleVersionInfo.plist 파일의 키 [1.0]에 대한 값 은 이전에 업로드 된 버전 [1.134]보다 높은 버전을 포함해야합니다.

  • 이 번들은 유효하지 않습니다. CFBundleShortVersionStringInfo.plist 파일의 키 [1.0]에 대한 값 은 이전에 업로드 된 버전 [1.134]보다 높은 버전을 포함해야합니다.

유효성 검사기는 또한 문자열 중 하나가 iTunes Connect에서 만든 앱 버전과 일치해야한다는 오류를 표시합니다.

  • 버전 불일치. Info.plist의 CFBundleVersion [ '1.0'] 또는 CFBundleShortVersionString [ '1.0']이 iTunes Connect [ '1.4']에 설정된 앱 버전과 일치하지 않습니다.

2

현재 Apple Technical Note TN2420, 버전 번호 및 빌드 번호 에는 다음 같이 나와 있습니다.

  1. iOS 앱의 경우 다른 릴리스 트레인에서 빌드 번호를 재사용 할 수 있지만 동일한 릴리스 트레인 내에서 빌드 번호를 재사용 할 수 없습니다. macOS 앱의 경우 릴리스 트레인에서 빌드 번호를 재사용 할 수 없습니다 .

불행히도 이것은 Mac Catalyst에서 동일한 빌드를 릴리스하려고 할 때 iOS의 릴리스 트레인 번호를 추적하는 빌드 번호를 재사용 할 수 없음을 의미합니다.

예를 들어, 제 경우에는 이전 문제로 인해 iOS에서 1.0.2 (1)에 해당하는 Mac Catalyst 앱으로 1.0.2 (4)를 출시했습니다. 이제 둘 다에서 1.0.3 (1)을 릴리스하려고 할 때 빌드 번호로 인해 MacOS에서 앱이 확인에 실패하고 iOS에서 확인을 통과합니다.

이제 iOS와 MacOS에서 동일한 앱을 정기적으로 출시하고 있으므로 20200111과 같은 날짜에 해당하는 빌드 번호를 채택하고 특정 릴리스 내에서 빌드 번호를 변경해야하는 경우 소수점으로 증가 할 것입니다.


1

둘 다 증가시켜야 합니다. .

새 버전을 업로드 할 때 iTunes Connect에서 새 버전을 생성해야합니다.이 버전은 자동으로 이전 버전보다 높습니다. iTunes Connect의이 버전은 동일한 버전 번호의 바이너리를 예상하므로 CFBundleShortVersionString증분되어야합니다.

버전을 업데이트했지만를 올리지 CFBundleVersion않으면 업로드 중에 오류가 발생합니다. pkamb의 답변과 스크린 샷을 참조하십시오.

CFBundleShortVersionString및 에 대한 자세한 내용은 https://stackoverflow.com/a/31921249/936957을CFBundleVersion 참조하십시오.


1

두 가지 방법을 모두 시도한 결과 일련의 버전 및 빌드 번호가 다음과 같은지 확인할 수 있습니다.

1.0.0 (1)
1.0.1 (1)
1.0.2 (1)

... iOS 앱에서는 허용되지만 Mac (Catalyst) 앱에서는 다음 오류가 반환됩니다.

오류 ITMS-90061 : "이 번들은 유효하지 않습니다. Info.plist 파일의 키 CFBundleVersion [1]에 대한 값은 이전에 업로드 된 버전 [2]보다 높은 버전을 포함해야합니다."

Mac 버전 및 빌드 번호는 다음과 같이 이동해야합니다.

1.0.0 (1)
1.0.1 (2)
1.0.2 (3)

iOS의 경우 버전 번호와 네 번째 숫자로 빌드 번호를 입력했습니다.

1.0.0 (1.0.0.1)
1.0.1 (1.0.1.1)
1.0.2 (1.0.2.1)

...하지만 Mac 앱에서도 허용되지 않습니다. 첫 번째 Mac (Catalyst) 앱을 제출하려고 할 때 Apple은 세 자리 이하의 빌드 번호 만 허용합니다.

ERROR ITMS-9000 : "이 번들은 유효하지 않습니다. Info.plist 파일에있는 키 CFBundleVersion [1.0.0.1]의 값은 최대 3 개의 음이 아닌 정수로 구성된 마침표로 구분 된 목록이어야합니다."

그래서 저는 모든 빌드에 대해 증가하고 버전 번호에 걸쳐 계속 증가하는 단일 번호로 변경했습니다.


제공 한 오류 메시지가 있습니까? 그렇다면 인용하십시오!
pkamb

0

새로운 Mac App Store 앱 출시를 준비 중입니다. 사용 CalVer이 의 서식 YEAR.release (build).

: 나는 여러 빌드를 업로드 2020.0 (1), 2020.0 (2)등 나는 마지막으로 제출 2020.0 (8)앱 스토어 검토하십시오. 검토를 통과했으며 Pending Developer Release 상태입니다. 입니다.

릴리스 전에 몇 가지 사항을 수정하고 싶었으므로 동일한 릴리스 트레인에 새 빌드를 추가했습니다 2020.0 (9)..

그 결과 오류가 발생합니다.

App Store Connect 작업 오류

오류 ITMS-90062 : "이 번들은 유효하지 않습니다. CFBundleShortVersionStringInfo.plist 파일의 키 [2020.0] 값 은 이전에 승인 된 버전 [2020.0]보다 높은 버전을 포함해야합니다. 자세한 내용은 https : //CFBundleShortVersionString 에서 확인 하십시오. developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring "

2020.0버전이 실제로 출시 되지 않았기 때문에 짜증이납니다 . 이 질문에 대한 대답을 통해 앱 스토어에서 앱을 사용할 수있을 때까지 동일한 버전으로 새 빌드를 계속 출시 할 수 있다는 인상을 받았습니다.

해결책은 앱 상태가 Pending Developer Release 인 경우 "release train"(동일한 버전 + 새 빌드)을 업데이트 할 수없는 것 같습니다 . 기존 빌드를 릴리스 한 다음 버전을 높이거나 App Store Connect 에서이 릴리스취소하여이 릴리스 트레인에 대한 추가 업로드를 허용하십시오.


-2

AFAIK, 내 머리 꼭대기에서 빌드 번호를 증가시키기 만하면 CFBundleVersion됩니다. 짧은 버전 문자열을 늘릴 필요는 없지만 사용자에게 앱이 새 버전임을 알리기 때문에 늘려야 할 수도 있습니다. Apple은 번호 매기기가 기존의 소프트웨어 버전 지정 규칙을 따라야한다고 말하고 있지만 기존 버전을 다시 업로드하려고하면 iTunes Connect가 불평 할 수 있습니다.

간단히 말해서, 작동 할 수 있지만 아마도 그렇지 않을 것입니다.


증분 해야하는 권위있는 답변을 찾고 있습니다. CFBundleShortVersionString증분 할 필요가없는 경우 "동일한"사용자 용 버전을 App Store에 여러 번 업로드 할 수 있습니까?
pkamb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.