我一直在使用shell脚本作为Xcode构建过程的一部分,以增加plist文件中的内部版本号,但是这会使Xcode 4.2.1频繁崩溃(出现一个关于目标不属于某个项目的错误;我猜plist文件的更改在某种程度上会混淆Xcode )。
shell脚本这样做是为了当文件比plist文件新时,内部版本号才会按agvtool
递增(所以只是构建并不会递增该值):
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还包含一个有用的脚本,可以自动将第三方库捆绑到一个应用程序捆绑包中。
发布于 2012-02-15 22:12:35
如果我没理解错的话,您想修改Project-Info.plist
文件,它是Xcode标准项目模板的一部分?
我问这个问题的原因是,Project-Info.plist
通常处于版本控制之下,修改它意味着它将被标记为,嗯,修改。
如果您对此没有意见,那么下面的代码片段将更新内部版本号,并将该文件标记为在该过程中已修改,其中get_build_number
是某个脚本(即本例中的占位符),以获取您要使用的(可能递增的)内部版本号:
#!/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窗格和其他地方显示版本,您还可以查看设置CFBundleGetInfoString
和CFBundleShortVersionString
。
发布于 2014-07-15 13:24:45
关于这个问题,我花了很多心思,但没有一个能让我满意。然而,我最终想出了一个我真正喜欢的混合体!
我们只需将构建产品的版本号设置为Git提交的数量。这不会扰乱您的源代码控制,因为脚本只会改变构建的产品。
将这个“运行脚本”构建阶段添加到构建阶段的末尾:
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版本设置为您想要的任何版本,在构建发布版本时将永远不会使用它。我将我的设置为AUTOMATED
或DEVELOPMENT
,这样当我运行开发构建时就很清楚了。
就这样!构建的应用程序将有一个不断增加的构建数量。(只要您总是在同一分支上进行构建。)
我喜欢这个方法的原因:
其他注释:
发布于 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获取最新版本,而不是使用下面的
对于版本:
# 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}"
对于构建:
# 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}"
https://stackoverflow.com/questions/9258344
复制相似问题