이것은 내 첫 iOS 앱 제출이며 내 앱이 거부되는 것을 원하지 않습니다.
이것은 Apple Docs에서 가져온 것입니다.
CFBundleVersion (문자열-iOS, OS X)은 번들의 반복 (출시 또는 미출시)을 식별하는 번들의 빌드 버전 번호를 지정합니다. 빌드 버전 번호는 첫 번째 정수가 0보다 큰 음수가 아닌 세 개의 마침표로 구분 된 정수로 구성된 문자열이어야합니다. 문자열에는 숫자 (0-9) 및 마침표 (.) 문자 만 포함되어야합니다. 선행 0은 각 정수에서 잘리고 무시됩니다 (즉, 1.02.3은 1.2.3과 동일 함). 이 키는 지역화 할 수 없습니다.
CFBundleShortVersionString (문자열-iOS, OS X)은 앱의 릴리스 된 반복을 식별하는 번들의 릴리스 버전 번호를 지정합니다. 릴리스 버전 번호는 마침표로 구분 된 세 개의 정수로 구성된 문자열입니다. 첫 번째 정수는 새로운 기능 또는 주요 변경 사항을 구현하는 개정과 같이 앱의 주요 개정을 나타냅니다. 두 번째 정수는 덜 눈에 띄는 기능을 구현하는 개정을 나타냅니다. 세 번째 정수는 유지 관리 릴리스를 나타냅니다.
이 키의 값은 앱의 반복 (출시 또는 미출시)을 식별하는 ‘CFBundleVersion’의 값과 다릅니다. 이 키는 InfoPlist.strings 파일에 포함하여 지역화 할 수 있습니다.
하지만 조금 이상해 보입니다. 이에 대한 나의 해석은 두 값을 동일하게 두는 것입니다.
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
누군가 내가 넣어야하는 것을 100 % 확인할 수 있습니까?
답변
다음과 같이 생각해보십시오. “짧은 버전”( CFBundleShortVersionString
)은 공개 버전 번호입니다. “버전”( CFBundleVersion
)은 공개 “짧은 버전”보다 훨씬 더 자주 변경 될 수있는 내부 버전 번호에 가깝습니다. 개인적으로 나는 두 가지 모두에 동일하게 사용하지만 많은 사람들이 모든 빌드에서 “버전”을 업데이트합니다. 어느 쪽이든 일반적으로 Apple에 출시 할 때 “짧은 버전”을 업데이트합니다. “버전”을 업데이트하는 빈도는 귀하와 귀하의 필요에 달려 있습니다.
답변
CFBundleShortVersionString 은 앱 의 버전 을 제공합니다 . 일반적으로 앱을 App Store에 게시 할 때마다 증가합니다. 애플리케이션의 App Store 페이지에 대한 “버전”섹션에 표시되는 버전입니다.
CFBundleVersion 은 개발 및 테스트, 즉 “기술적”목적에 사용되는 빌드 번호 를 제공 합니다. 최종 사용자는 빌드 번호에 거의 관심이 없지만 개발 중에 각 빌드에서 개발되고 수정되는 내용을 알아야 할 수도 있습니다. 이는 일반적으로 내부 릴리스가 반복 될 때마다 증가합니다. Jenkins와 같은 지속적 통합 도구를 사용하여 각 빌드의 빌드 번호를 자동으로 늘릴 수 있습니다.
두 숫자는 서로 의존하지 않지만 혼동을 피하기 위해 병렬로 유지하는 것이 좋습니다. 앱이 App Store 검토를 통과하면 게시 여부에 관계없이 Phil 및 likeTheSky가 언급 한 빌드 번호를 늘려야합니다.
사용 사례 : 제출할 준비가 된 잘 테스트 된 빌드가 있다고 가정 해 보겠습니다. 버전 번호는 1.0.0 이고 빌드 번호는 1.0.0.32 입니다. 앱을 제출 한 후에는 버전을 1.0.1 로 업데이트 하고 빌드 번호를 1.0.1.0 으로 업데이트해야합니다 .
답변
rmaddy 의 대답 이 맞습니다. 두 가지 생각을 더 추가하겠습니다.
세 번째 버전 번호
앱 정의의 일부로 iTunesConnect 웹 사이트에 지정된 세 번째 버전 번호를 알고 있어야합니다. 이 번호가 Xcode의 두 번호와 다른 경우 Apple은 경고를 표시합니다. 경고를 무시할 수 있습니다 ( “오류”가 아님).
날짜-시간 (버전)
또한 구두점과 함께 세 개의 숫자를 사용할 필요가 없습니다. 전통적으로 첫 번째 숫자의 변화가 일반적으로 호환성에 영향을 미치는 일종의 극적인 변화를 나타내는 일부 앱에서는 의미가있을 수 있습니다.
다른 앱의 경우 ISO 8601 표준 형식 스타일 (YYYYMMDDHHMM) 의 날짜-시간 값을 사용할 수 있습니다 . 예 : 201606070620
. 연-월-일-시간-분의 순서는 계속 증가하는 숫자를 렌더링하며, 패딩 0으로 인해 항상 동일한 길이이며, 알파벳순으로 정렬 될 때도 시간순입니다.
iOS 7, 8, 9에서 작동하는 iOS 앱에서이 스타일의 버전 번호를 성공적으로 사용했습니다.
이 값의 생성을 자동화 할 수도 있습니다. 프로젝트의에서 Target
> Build Phases
> Run Script
패널 :
Shell
필드에 지정하십시오 ./bin/sh
- 아래에 표시된 다음 5 줄 스크립트를 붙여 넣습니다.
- (선택 사항) 체크
Show environment variables in build log
박스를 선택합니다. - 확인란을 선택 취소하십시오
Run script only when installing
.
빌드 할 때마다 UTC 시간대 의 현재 날짜-시간 이 캡처됩니다. -u
스크립트 의 플래그는 현재 기본 시간대가 아닌 UTC를 사용합니다. 일반적으로 프로그래머와 시스템 관리자가 현지 시간대가 아닌 UTC를 사용하고 생각하는 것이 가장 좋습니다.
#!/bin/bash
buildNumber=$(date -u "+%Y%m%d%H%M")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildNumber" "$INFOPLIST_FILE" # Version number
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" # Build number
echo "DateTime for app version number: $buildNumber"
또는 1.2.3
버전 번호에 대한 관습 과 빌드 번호에 날짜-시간을 사용하여 하이브리드를 수행 하십시오. 하이브리드를 수행하려면 앞에가 있는 CFBundleShortVersionString
줄을 주석 처리 하면 #
됩니다.
답변
나에게 가장 현명한 방법 CFBundleShortVersionString
은 실제 버전 번호에 버전 번호 (예 🙂 를 사용한 다음 빌드 번호 (예 CFBundleVersion
:)를 사용하여 App Store에 제출하는 것입니다. 따라서 문제가 없어서 다시 제출하지 않는 한이 숫자는 항상 1입니다. 새 릴리스의 경우 이전 버전이 TestFlight 테스트 또는 검토 중 문제가있는 경우 1로 재설정합니다.
빌드 번호는 특정 릴리스에 대해 제공하는 각 제출의 이름을 지정하는 방법을 제공합니다. 위의 정의에 설명 된대로 앱의 특정 버전에 대해 제공하는 모든 빌드 모음을 해당 버전의 ‘릴리스 트레인’이라고합니다. iOS 앱의 경우 빌드 번호는 각 릴리스 트레인 내에서 고유해야 하지만 서로 다른 릴리스 트레인에서 고유 할 필요는 없습니다 [제 강조점]. 즉, iOS 앱의 경우 원하는 경우 다른 릴리스 트레인에서 동일한 빌드 번호를 다시 사용할 수 있습니다.
답변
내가 사용 CFBundleVersion을 위한 내부 빌드 나타 내기 위해 CFBundleShortVersionString을 . 테스트 비행을 사용하여 테스터를위한 빌드를 제출하므로 이들 간의 차이가 매우 유용했습니다.
애플 문서는 CFBundleVersion가 “로 구성된 문자열이어야한다고 말했습니다 3 음이 아닌, 시대 구분의 정수”하지만 실제로이 될 수 MORE THAN (위의 대답 쇼 등) 3 부. 내 개발 빌드를 나타내는 데 사용합니다. 내 CFBundleShortVersionString이 1.0.0이고 CFBundleVersion에 1.0.0.11을 사용하여 릴리스 1.0.0의 11 번째 빌드임을 나타낼 수 있습니다.
앱 스토어에 제출 된 각 CFBundleVersion이 이전보다 커야합니다. 그렇지 않으면 오류 ITMS-90478 : “잘못된 버전입니다. 새 빌드 제출을 위해 최신 버전이 닫 혔기 때문에 버전이”xxx “인 빌드를 가져올 수 없습니다. 선택하십시오. 다른 버전 번호. “
CFBundleShortVersionString 은 세 부분 만 포함 할 수 있습니다. 그렇지 않으면 오류 ITMS-90060이 표시됩니다. Info.plist 파일의 키 CFBundleShortVersionString ‘xxx’값 은 최대 3 개의 음이 아닌 정수 로 구성된 마침표로 구분 된 목록이어야합니다 . “
그만큼 3 수의 예에 버전 번호 쇼 바질 우르 큐가 언급 한, iTunesConnect는 일이 복잡받을 수있는 곳입니다.
CFBundleShortVersionString 과 다른 iTunesConnect 번호를 사용합니다. 앱 스토어에 앱을 처음 제출했을 때 이미 많은 내부 릴리스가 있기 때문입니다. 그래서 iTunesConnect 번호에는 1.0을, CFBundleShortVersionString에는 5.x를 사용했습니다. 앱 스토어의 다음 릴리스에서는 앱 스토어에 최신 버전이 있는지 확인하는 기능을 제공했고, iTunesConnect 번호 만받을 수 있기 때문에 (사용 http://itunes.apple.com/lookup?bundleId=
) 문제가 있다는 것을 깨달았으므로 비교하기 전에 몇 가지 계산을해야합니다. CFBundleShortVersionString 번호로.
iTunesConnect 번호를 CFBundleShortVersionString으로 사용하여 문제를 해결하려고했지만 오류가 발생했습니다. 오류 ITMS-90062 : “이 번들이 잘못되었습니다. Info.plist 파일의 키 CFBundleShortVersionString [xxx]에 대한 값은 그보다 높은 버전을 포함해야합니다. 이전에 승인 된 버전 [xxx]. “
그래서 나는 그것들을 항상 동일하게 만들 것을 제안 할 것입니다.
답변
CFBundleVersion에서 각 필드의 최대 개수는 얼마입니까?
앱에서 CFBundleVersion을 1.1.1로 설정하고 “lsregister -dump”에서 버전의 16 진수 값을 살펴보면 첫 번째 필드의 최대 값이 (2 ^ 22) -1 또는 4194303이고 최대 값이 두 번째 및 세 번째 필드의 값은 (2 ^ 21) -1 또는 2097151입니다.
3 개 필드의 합은 최대 64 비트입니다.
이것은 날짜와 시간을 기준으로 CFBundleVersion을 사용하는 사람들에게 의미가 있습니다.
첫 번째 필드를 YYYYMMDD로 설정했습니다. 이것은 항상 최대 허용 버전보다 크며, 최소한 여러 버전이 설치되어 있고 ‘open -a Appname’과 같은 것을 사용하고있을 때 Launch Services가 실행할 앱 버전을 결정할 때 예측할 수없는 결과를 초래했습니다. ‘명령 줄에서.
이것을 널리 퍼뜨려주세요. 나는 많은 사람들이 이것에 얽매이지 않을 것이라고 확신합니다.
답변
현재 상태에 대한 Apple 문서CFBundleVersion
[강조] :
번들의 반복을 식별하는 빌드 버전입니다.
…
이 키는 10.14.1과 같이 마침표로 구분 된 1 ~ 3 개의 정수 로 구성된 기계 판독 가능 문자열 입니다. 문자열에는 숫자 (0-9)와 마침표 만 포함될 수 있습니다.
…
더 많은 정수를 포함 할 수 있지만 시스템은이를 무시합니다.
에 대한 CFBundleShortVersionString
[강조 광산]
번들의 릴리스 또는 버전 번호입니다.
…
이 키는 번들 버전 에 대해 사용자에게 표시되는 문자열입니다 . 필수 형식은 10.14.1과 같이 마침표로 구분 된 세 개의 정수 입니다. 문자열에는 숫자 (0-9)와 마침표 만 포함될 수 있습니다.
CFBundleVersion
각 빌드 (또는 TestFlight의 모든 릴리스)에 대해 자동으로 증가 하고 변경할 때마다 0으로 재설정하는 것이 좋습니다 CFBundleShortVersionString
.
에서 사용자 표시 버전을 업데이트하려면 명시 적으로 계획하거나 일관된 방법을 고안해야합니다 CFBundleShortVersionString
.