ios - Version VS XCode中生成

  显示原文与译文双语对照的内容

我有一个用 XCode 3开发的应用程序,最近用 XCode 4开始编辑。 在目标摘要中,我有iOS应用程序目标表单: 标识符,版本,生成,设备和部署目标。 版本字段为空,生成字段为 3.4.0 ( 它与我在使用 XCode 3进行编辑时的应用程序版本相匹配) 。

我的问题是:

  1. 版本和生成字段之间的区别是什么?

  2. 升级到 XCode 4后,为何版本字段为空?

谢谢。

时间:

( 只留给我自己的参考。) 这将显示"版本"目标中的和"生成"字段的版本和构建:


- (NSString*) version {
 NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
 NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
 return [NSString stringWithFormat:@"%@ build %@", version, build];
}

在 Swift 中


func version() -> String {
 let dictionary = NSBundle.mainBundle().infoDictionary!
 let version = dictionary["CFBundleShortVersionString"] as String
 let build = dictionary["CFBundleVersion"] as String
 return"(version) build (build)"
}

如果内部版本号是浮点值,那么在上面的答案中递增内部版本号的脚本对我不起作用,所以我稍微修改了一下:


#!/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 为 Bug 和修正,以 1.0.1,1.0.2 。 这里数字面向发布和新功能。

内部版本号的,主要是内部已经在那之前所做的许多构建 。 但是有些使用了其它数字,比如仓库的分支号。 这个数字应该是独特的来区别不同的构建。

如你所见,该内部版本号不是必需的,它是由你,内部版本号你想使用。 因此,如果你将 Xcode 更新为一个主要版本,那么构建域是空的。 在 版本字段不能空白。 !


以使构建号在一个 NSString 变量:


NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

以使 版本号在一个 NSString 变量:


NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

在一个如果希望同时 :


NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

这是用 4.6.3 ( 4 h1503 ) 版测试的。 内部版本号通常用括号/大括号写。 内部版本号是十六进制或者十进制。

buildandversion


Xcode 可以 auto-increment 的内部版本号作为十进制数通过将下列 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"

对于十六进制的内部版本号,使用这里脚本


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"

project_settings

感谢 @nekno 和 @ale84的出色答案。

但是,我修改了 @ale84's 脚本很少增加浮点数的内部版本号。

包含的值可以根据你的浮动格式需求进行更改。 例如:如果包含=. 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"

...