버전 vs X코드 내장
저는 Xcode 3으로 개발한 앱을 가지고 있으며, 최근 Xcode 4로 편집을 시작했습니다.타겟 요약에는 식별자, 버전, 빌드, 디바이스 및 배포 타깃 필드가 있는 iOS 애플리케이션 타깃 폼이 있습니다.버전 필드는 공백이고 빌드 필드는 3.4.0입니다(Xcode 3으로 편집하던 때의 앱 버전과 일치합니다).
질문은 다음과 같습니다.
버전 필드와 빌드 필드의 차이점은 무엇입니까?
Xcode 4로 업그레이드한 후 버전 필드가 공백인 이유는 무엇입니까?
Apple은 필드를 재배치/변경했습니다.
앞으로 응용 프로그램 대상의 정보 탭에서 "번들 버전 문자열, 짧은"을 버전(3.4.0 등)으로 사용하고 "번들 버전"을 빌드(예: 500 또는 1A500)로 사용해야 합니다.둘 다 표시되지 않으면 추가할 수 있습니다.[ Summary ]탭의 적절한 [Version]텍스트 박스와 [Build]텍스트 박스에 매핑됩니다.같은 값입니다.
[정보(Info)]탭을 표시할 때 오른쪽 버튼을 클릭하여 [원시 키/값 표시(Show Raw Keys/Values)]를 선택하면 실제 이름이 다음과 같이 표시됩니다.CFBundleShortVersionString
및 (버전)CFBundleVersion
(신호)
버전은 보통 Xcode 3과 함께 사용 중인 것처럼 보입니다.버전/빌드 차이에 대해 어느 정도인지 잘 모르기 때문에 철학적으로 대답하겠습니다.
여러 가지 방식이 있지만 일반적인 방식은 다음과 같습니다.
{MajorVersion}.{MinorVersion}.{리비전}
- 메이저 버전 - 주요 변경, 재설계 및 기능 변경
- 마이너 버전 - 약간의 개선, 기능 추가
- 리비전 - 버그 수정용 패치 번호
그런 다음 빌드는 릴리스 또는 전체 제품 수명 동안 총 빌드 수를 나타내기 위해 별도로 사용됩니다.
많은 개발자가 빌드 번호를 0부터 시작하여 빌드할 때마다 1씩 증가하여 계속 증가합니다.프로젝트에는 빌드할 때마다 빌드 수가 자동으로 증가하는 스크립트가 있습니다.자세한 내용은 아래 지침을 참조하십시오.
- 릴리스 1.0.0은 빌드 542일 수 있습니다.1.0.0 릴리스에 도달하려면 542개의 빌드가 필요했습니다.
- 릴리스 1.0.1은 빌드 578일 수 있습니다.
- 릴리스 1.1.0은 빌드 694일 수 있습니다.
- 릴리스 2.0.0은 빌드949일 수 있습니다.
Apple을 포함한 다른 개발자는 메이저버전 + 마이너버전 + 릴리즈용 빌드수로 구성된 빌드 번호를 가지고 있습니다.마케팅에 사용되는 값이 아닌 실제 소프트웨어 버전 번호입니다.
[ Xcode ]메뉴 > [ About Xcode ]순서로 이동하면 [Version](버전)과 [Build](빌드) 번호가 표시됩니다.추가 정보를 누르면...버튼에는 다양한 버전이 표시됩니다.상세 정보...Xcode 5에서 버튼이 삭제되었습니다.이 정보는 [Software]> [ Developer ]섹션에서도 이용할 수 있습니다.이 정보는 [About This Mac]> [ System Report ... ]를 열면 이용할 수 있습니다.
예를 들어 Xcode 4.2(4C139)와 같습니다.마케팅 버전 4.2는 메이저버전 4, 마이너버전 C 빌드 및 빌드 넘버 139입니다.다음 릴리스(4.3으로 추정)는 빌드 릴리스 4D가 될 가능성이 높으며 빌드 번호는 0에서 다시 시작하여 거기에서 증가합니다.
iPhone Simulator 버전/빌드 번호는 iPhone, Mac 등과 동일합니다.
- 3.2: (7W367a)
- 4.0: (8A400)
- 4.1: (8B117)
- 4.2: (8C134)
- 4.3: (8H7)
업데이트: 요청에 따라 Xcode에서 앱을 빌드할 때마다 실행되는 스크립트를 생성하여 빌드 번호를 읽고 증가시킨 후 앱에 다시 씁니다.{App}-Info.plist
file.를 「」에의 추가 .「 / 」 、 「 」 、 「 」Settings.bundle/Root*.plist
파일(들)을 클릭합니다.
이것은 여기의 사용법 기사에서 확장한 것입니다.
Xcode 4.2 - 5.0의 경우:
- Xcode 프로젝트를 로드합니다.
- 왼쪽 페인으로 계층의 맨 위에 있는 프로젝트를 클릭합니다.그러면 프로젝트 설정 편집기가 로드됩니다.
- 중앙 창 왼쪽에 있는 Targets(대상) 제목 아래 앱을 클릭합니다.각 프로젝트 대상에 대해 이 설정을 구성해야 합니다.
- 빌드 단계 탭을 선택합니다.
-
- Xcode 4의 오른쪽 아래에 있는 빌드 단계 추가 버튼을 클릭하고 실행 스크립트 추가를 선택합니다.
- Xcode 5 x 、 [ Editor ]메뉴 > [ Add Build Phase ]> [ Add Run Script Build Phase ]를 선택합니다.
- 새 스크립트 실행 단계를 끌어다 놓아서 번들 리소스 복사 단계 직전(app-info.plist 파일이 앱에 번들되는 시점)으로 이동합니다.
- 새로운 스크립트 실행 단계에서 Shell을 설정합니다.
/bin/bash
. 정수 빌드 번호의 스크립트 영역에 다음 내용을 복사하여 붙여넣습니다.
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
@Bdebeez가 지적했듯이 Apple Generic Versioning Tool (
agvtool
할 수 있습니다도 사용할 수 있습니다.대신 사용하는 경우 먼저 변경해야 할 사항이 몇 가지 있습니다.- 빌드 설정 탭을 선택합니다.
- Versioning 섹션에서 Current Project Version을 사용할 초기 빌드 번호(예: 1)로 설정합니다.
- 빌드 단계 탭으로 돌아가서 번들 리소스 복사 단계 후에 스크립트 실행 단계를 드래그 앤 드롭하면 빌드 번호가 포함된 소스 파일을 빌드 및 업데이트할 때 경쟁 상태가 발생하지 않습니다.
「 」에서는, 의 점에 해 주세요.
agvtool
메서드에서는 오류 없이 정기적으로 빌드 실패/실패가 발생할 수 있습니다. 때문에 저는 '아까', '아까', '아까', '아까'는 않는 것이 .agvtool
이 스크립트로.단, 스크립트 실행 단계에서는 다음 스크립트를 사용할 수 있습니다.
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
next-version
가 증가합니다(빌드 번호가 증가합니다).bump
같은 것에 대한 별칭이기도 합니다).-all
」Info.plist
새 빌드 번호를 입력합니다.버전 및 빌드를 표시하는 설정 번들이 있는 경우 스크립트 끝에 다음을 추가하여 버전을 업데이트하고 빌드할 수 있습니다.주의: 설정에 맞게 값을 변경합니다.즉, plist 파일의 배열 아래에 있는 인덱스2 의 항목을 참조해 주세요.따라서 인덱스가 0 인 경우, 이것이 어레이의 3 번째 프리퍼런스 설정입니다.
productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE") /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
★★★★★★★★★를 사용하고 있는 경우는
agvtool
읽는 대신Info.plist
대신 스크립트에 다음 항목을 직접 추가할 수 있습니다.buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse) productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1) /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
iPad & iPhone용 범용 앱이 있는 경우, iPhone 파일의 설정도 할 수 있습니다.
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist
(참고를 위해 여기에 남겨두겠습니다.)Xcode 타겟에 표시되는 "version" 및 "build" 필드의 버전과 빌드가 표시됩니다.
- (NSString*) version {
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
return [NSString stringWithFormat:@"%@ build %@", version, build];
}
인스위프트
func version() -> String {
let dictionary = NSBundle.mainBundle().infoDictionary!
let version = dictionary["CFBundleShortVersionString"] as? String
let build = dictionary["CFBundleVersion"] as? String
return "\(version) build \(build)"
}
빌드 번호는 앱의 현재 상태를 나타내는 내부 번호입니다.이는 일반적으로 사용자를 대상으로 하지 않는다는 점에서 버전 번호와 다르며 버전 번호와 같은 차이/기능/업그레이드를 나타내지 않습니다.
이렇게 생각해 보세요.
- 빌드(
CFBundleVersion
): 빌드 번호.보통 1부터 시작해서 각 앱 빌드에 따라 1씩 증가합니다.어떤 빌드가 더 최신인지 신속하게 비교할 수 있으며 코드베이스의 진행 상황을 나타냅니다.QA로 작업하고 올바른 빌드에 대해 버그가 기록되었는지 확인해야 할 때 이러한 기능은 매우 유용합니다. - 마케팅 버전(
CFBundleShortVersionString
): 이 버전의 앱을 나타내기 위해 사용하는 사용자용 번호입니다.일반적으로 Major.minor 버전 구성표(예: MyAwesomeApp 1.2)에 따라 어떤 릴리스가 더 작은 유지 보수 업데이트인지, 어떤 새로운 기능이 큰지 사용자에게 알립니다.
이를 프로젝트에서 효과적으로 사용하기 위해 애플은 다음과 같은 훌륭한 도구를 제공합니다.agvtool
. 이 방법은 plist 변경 내용을 설명하는 것보다 훨씬 간단하기 때문에 사용을 강력히 권장합니다.빌드 번호와 마케팅 버전을 모두 쉽게 설정할 수 있습니다.스크립팅 시(예를 들어, 각 빌드의 빌드 번호를 쉽게 업데이트하거나 현재 빌드 번호를 조회하는 경우)에 특히 유용합니다.빌드 번호를 업데이트하면 SVN 태그 지정과 같은 보다 이국적인 작업을 수행할 수도 있습니다.
사용방법:
- "Apple Generic"을 사용하도록 프로젝트를 Xcode의 Versioning에서 설정합니다.
- 터미널 내
agvtool new-version 1
1로 )(「1」)agvtool new-marketing-version 1.0
1. ( 1.0으로 설정)
man의 해 주세요.agvtool
위의 답변에서 빌드 번호를 자동으로 증가시키는 스크립트는 빌드 번호가 부동 소수점 값인 경우 작동하지 않아 조금 수정했습니다.
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=`echo $buildNumber +1|bc`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
마케팅 릴리즈 번호는 고객용 버전 번호입니다.1.0부터 시작하여 2.0, 3.0에 대한 메이저업데이트, 1.1, 1.2에 대한 마이너업데이트 및 1.0.1, 1.0.2에 대한 버그 수정의 경우 이 수치는 릴리즈 및 신기능에 대한 것입니다.
빌드 번호는 대부분 그때까지 작성된 내부 빌드 수입니다.그러나 일부에서는 저장소의 지점 번호와 같은 다른 번호를 사용합니다.이 숫자는 거의 동일한 빌드를 구별하기 위해 고유해야 합니다.
보시는 바와 같이 빌드 번호는 필요하지 않으며 사용할 빌드 번호는 사용자에게 달려 있습니다.이 경우,Xcode
메이저 버전의 경우 빌드 필드가 비어 있습니다.버전 필드는 비워 둘 수 없습니다!
빌드 번호를 로 가져오려면NSString
★★★★
NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
버전 번호를 로 가져오려면NSString
★★★★
NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
둘 다 하나로 하고 싶다면NSString
:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
이것은 Xcode Version 4.6.3(4H1503)에서 테스트되고 있습니다.빌드 번호는 종종 괄호/중괄호로 씁니다.빌드 번호는 16진수 또는 10진수입니다.
Xcode에서는 다음을 10진수로 입력하여 빌드 번호를 자동으로 늘릴 수 있습니다.Run script
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
16진수 빌드 번호의 경우 이 스크립트를 사용합니다.
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber))
buildNumber=$(($buildNumber + 1))
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
@nekno와 @ale84에게 훌륭한 답변을 주셔서 감사합니다.
그러나 @ale84의 스크립트를 수정하여 부동소수점 빌드 번호를 거의 늘리지 않았습니다.
enclude 값은 부동 형식 요건에 따라 변경할 수 있습니다.예: 포함 = 0.01인 경우 출력 형식은 ... 1.19, 1.20, 1.21이 됩니다.
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
incl=.01
buildNumber=`echo $buildNumber + $incl|bc`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
하나의 은 버전 를 '버전 번호'로 입니다.appDelegate
didFinishLaunchingWithOptions
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString * ver = [self myVersion];
NSLog(@"version: %@",ver);
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:ver forKey:@"version"];
return YES;
}
- (NSString *) myVersion {
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
return [NSString stringWithFormat:@"%@ build %@", version, build];
}
Xcode 14.2에 있으며 프로젝트 번들 내의 .sh 파일에 다음 bash 스크립트를 추가합니다.그런 다음 스크립트 실행 빌드 단계를 사용하여 이 스크립트를 호출합니다.프로젝트를 아카이브할 때 버전 및 번들이 몇 번 업데이트되었지만 증가하지 않았습니다.스크립트가 계속 증가하지 않는 이유에 대한 피드백이 있습니까?피드백 감사합니다.
currentVersionString=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$PROJECT_DIR/SupportingFiles/$INFOPLIST_FILE")
currentBuildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PROJECT_DIR/SupportingFiles/$INFOPLIST_FILE")
newBuildNumber=$((currentBuildNumber + 1))
IFS='.' read -ra version <<< "$currentVersionString"
version[2]=$((version[2] + 1))
newVersionString="${version[0]}.${version[1]}.${version[2]}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $newVersionString" "$PROJECT_DIR/SupportingFiles/$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $newBuildNumber" "$PROJECT_DIR/SupportingFiles/$INFOPLIST_FILE"
언급URL : https://stackoverflow.com/questions/6851660/version-vs-build-in-xcode
'programing' 카테고리의 다른 글
Swift 컴파일러 오류: 문자열 연결 시 "표현이 너무 복잡함" (0) | 2023.04.14 |
---|---|
Swift 배열에서 요소의 합계를 찾는 중 (0) | 2023.04.14 |
@IBDesignable 오류: IB Designables:자동 레이아웃 상태를 업데이트하지 못했습니다.인터페이스 빌더 코코아 터치 툴이 충돌했습니다. (0) | 2023.04.09 |
코드 골프:Excel 열 이름에 해당하는 숫자 (0) | 2023.04.09 |
커밋되지 않은 기존 작업을 Git의 새 분기로 이동 (0) | 2023.04.09 |