XCODE 中Version 和 Build的区别

from: https://stackoverflow.com/questions/6851660/version-vs-build-in-xcode

Apple sort of rearranged/repurposed the fields.

Going forward, if you look on the Info tab for your Application Target, you should use the "Bundle versions string, short" as your Version (e.g., 3.4.0) and "Bundle version" as your Build (e.g., 500 or 1A500). If you don't see them both, you can add them. Those will map to the proper Version and Build textboxes on the Summary tab; they are the same values.

When viewing the Info tab, if you right-click and selectShow Raw Keys/Values, you'll see the actual names areCFBundleShortVersionString(Version) andCFBundleVersion(Build).

The Version is usually used how you appear to have been using it with Xcode 3. I'm not sure on what level you're asking about the Version/Build difference, so I'll answer it philosophically.

There are all sorts of schemes, but a popular one is:

{MajorVersion}.{MinorVersion}.{Revision}

Major version- Major changes, redesigns, and functionality changes

Minor version- Minor improvements, additions to functionality

Revision- A patch number for bug-fixes

Then the Build is used separately to indicate the total number of builds for a release or for the entire product lifetime.

Many developers start the Build number at 0, and every time they build they increase the number by one, increasing forever. In my projects, I have a script that automatically increases the build number every time I build. See instructions for that below.

Release 1.0.0 might be build 542. It took 542 builds to get to a 1.0.0 release.

Release 1.0.1 might be build 578.

Release 1.1.0 might be build 694.

Release 2.0.0 might be build 949.

Other developers, including Apple, have a Build number comprised of a major version + minor version + number of builds for the release. These are the actual software version numbers, as opposed to the values used for marketing.

If you go toXcodemenu >About Xcode, you'll see the Version and Build numbers. If you hit theMore Info...button you'll see a bunch of different versions. Since theMore Info...button was removed in Xcode 5, this information is also available from theSoftware > Developersection of theSystem Informationapp, available by openingApplemenu >About This Mac>System Report....

For example, Xcode 4.2 (4C139). Marketing version 4.2 is Build major version 4, Build minor version C, and Build number 139. The next release (presumably 4.3) will likely be Build release 4D, and the Build number will start over at 0 and increment from there.

The iPhone Simulator Version/Build numbers are the same way, as are iPhones, Macs, etc.

3.2: (7W367a)

4.0: (8A400)

4.1: (8B117)

4.2: (8C134)

4.3: (8H7)

Update: By request, here are the steps to create a script that runs each time you build your app in Xcode to read the Build number, increment it, and write it back to the app's{App}-Info.plistfile. There are optional, additional steps if you want to write your version/build numbers to yourSettings.bundle/Root*.plistfile(s).

This is extended from the how-to articlehere.

In Xcode 4.2 - 5.0:

Load your Xcode project.

In the left hand pane, click on your project at the very top of the hierarchy. This will load the project settings editor.

On the left-hand side of the center window pane, click on your app under theTARGETSheading. You will need to configure this setup for each project target.

Select theBuild Phasestab.

In Xcode 4, at the bottom right, click theAdd Build Phasebutton and selectAdd Run Script.

In Xcode 5, selectEditormenu >Add Build Phase>Add Run Script Build Phase.

Drag-and-drop the newRun Scriptphase to move it to just before theCopy Bundle Resourcesphase (when the app-info.plist file will be bundled with your app).

In the newRun Scriptphase, setShell:/bin/bash.

Copy and paste the following into the script area for integer build numbers:

buildNumber=$(/usr/libexec/PlistBuddy-c"Print CFBundleVersion""$INFOPLIST_FILE")buildNumber=$(($buildNumber+1))/usr/libexec/PlistBuddy-c"Set :CFBundleVersion $buildNumber""$INFOPLIST_FILE"

As @Bdebeez pointed out, theApple Generic Versioning Tool(agvtool) is also available. If you prefer to use it instead, then there are a couple things to change first:

Select theBuild Settingstab.

Under theVersioningsection, set theCurrent Project Versionto the initial build number you want to use, e.g.,1.

Back on theBuild Phasestab, drag-and-drop yourRun Scriptphase after theCopy Bundle Resourcesphase to avoid a race condition when trying to both build and update the source file that includes your build number.

Note that with theagvtoolmethod you may still periodically get failed/canceled builds with no errors. For this reason, I don't recommend usingagvtoolwith this script.

Nevertheless, in yourRun Scriptphase, you can use the following script:

"${DEVELOPER_BIN_DIR}/agvtool"next-version-all

Thenext-versionargument increments the build number (bumpis also an alias for the same thing), and-allupdatesInfo.plistwith the new build number.

And if you have a Settings bundle where you show the Version and Build, you can add the following to the end of the script to update the version and build.Note: Change thePreferenceSpecifiersvalues to match your settings.PreferenceSpecifiers:2means look at the item at index 2 under thePreferenceSpecifiersarray in your plist file, so for a 0-based index, that's the 3rd preference setting in the array.

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

If you're usingagvtoolinstead of reading theInfo.plistdirectly, you can add the following to your script instead:

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

And if you have a universal app for iPad & iPhone, then you can also set the settings for the iPhone file:

/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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容