首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >增加内部版本号的更好方法?

增加内部版本号的更好方法?
EN

Stack Overflow用户
提问于 2012-02-13 17:43:27
回答 21查看 59.7K关注 0票数 136

我一直在使用shell脚本作为Xcode构建过程的一部分,以增加plist文件中的内部版本号,但是这会使Xcode 4.2.1频繁崩溃(出现一个关于目标不属于某个项目的错误;我猜plist文件的更改在某种程度上会混淆Xcode )。

shell脚本这样做是为了当文件比plist文件新时,内部版本号才会按agvtool递增(所以只是构建并不会递增该值):

代码语言:javascript
复制
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi

有没有办法增加内部版本号(在plist文件中或其他任何地方)而不破坏Xcode?

python FINAL EDIT:我现在使用刚刚在github上公开的脚本来做这类事情。它没有很好的文档记录,但应该不难解决。作为奖励,这个repo还包含一个有用的脚本,可以自动将第三方库捆绑到一个应用程序捆绑包中。

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2012-02-15 22:12:35

如果我没理解错的话,您想修改Project-Info.plist文件,它是Xcode标准项目模板的一部分?

我问这个问题的原因是,Project-Info.plist通常处于版本控制之下,修改它意味着它将被标记为,嗯,修改。

如果您对此没有意见,那么下面的代码片段将更新内部版本号,并将该文件标记为在该过程中已修改,其中get_build_number是某个脚本(即本例中的占位符),以获取您要使用的(可能递增的)内部版本号:

代码语言:javascript
复制
#!/bin/sh

# get_build_number is a placeholder for your script to get the latest build number
build_number = `get_build_number`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist

PlistBuddy允许您在plist文件中设置任何密钥,而不仅仅是版本号。您可以创建所有想要的plist文件,如果需要,可以将它们包含在资源中。然后可以从捆绑包中读取它们。

至于您需要在about窗格和其他地方显示版本,您还可以查看设置CFBundleGetInfoStringCFBundleShortVersionString

票数 29
EN

Stack Overflow用户

发布于 2014-07-15 13:24:45

关于这个问题,我花了很多心思,但没有一个能让我满意。然而,我最终想出了一个我真正喜欢的混合体!

我们只需将构建产品的版本号设置为Git提交的数量。这不会扰乱您的源代码控制,因为脚本只会改变构建的产品。

将这个“运行脚本”构建阶段添加到构建阶段的末尾:

代码语言:javascript
复制
if [ "${CONFIGURATION}" = "Release" ]; then
    buildNumber=$(git rev-list --count head)
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi

将项目中的Info.plist版本设置为您想要的任何版本,在构建发布版本时将永远不会使用它。我将我的设置为AUTOMATEDDEVELOPMENT,这样当我运行开发构建时就很清楚了。

就这样!构建的应用程序将有一个不断增加的构建数量。(只要您总是在同一分支上进行构建。)

我喜欢这个方法的原因:

  • Easy
  • Doesn't污染Git版本history
  • CFBundleVersion是完全自动的
  • ,漂亮的版本号可以随时修改我想要的

其他注释:

  • 如果您的项目中有应用程序扩展,只需在这些目标上也设置相同的构建脚本即可。这将保持所有版本号的自动化和同步。应用商店需要与您的主应用匹配的扩展版本。
票数 77
EN

Stack Overflow用户

发布于 2013-03-19 02:12:17

我已经使用了这个glist。它的工作方式与预期一致。https://gist.github.com/sekati/3172554 (所有功劳都归功于原作者)

我随着时间的推移修改的脚本。

xcode-versionString-generator.sh

xcode-build-number-generator.sh

由于这些要点对开发社区有帮助,因此我创建了GitHub项目。所以让我们好好开发它。下面是GitHub项目:https://github.com/alokc83/Xcode-build-and-version-generator

我已经更新了这两个脚本的代码,并进行了一些增强。从GitHub获取最新版本,而不是使用下面的

对于版本:

代码语言:javascript
复制
# xcode-version-bump.sh
# @desc Auto-increment the version number (only) when a project is archived for export. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Check the checkbox "Run script only when installing"
# 6. Drag the "Run Script" below "Link Binaries With Libraries"
# 7. Insure your starting version number is in SemVer format (e.g. 1.0.0)

# This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position.
VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'`
NEWSUBVERSION=$(($NEWSUBVERSION + 1))
NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"

对于构建:

代码语言:javascript
复制
# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below into new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9258344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档