是的,这与this question非常相关,但我认为XCode 3已经充分回答了这个问题。不确定是否应该合并。
所以 - 使用那里的类似指令,我一直有很好的效果,即将编号编码到存档的.ipa文件中,这样Organizer会显示像“1.0.3281”这样的版本(其中3281是通过以下版本修改)附加到我的iOS目标的构建脚本):
REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
echo "REV=$REV"
echo "#define kRevisionNumber @\"$REV\"" > ${PROJECT_DIR}/revision.h
echo "INFOPLIST_PATH=${INFOPLIST_PATH}"
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${INFOPLIST_FILE}" | sed 's/,/, /g'`
echo "BASEVERNUM=$BASEVERNUM"
PLISTARG1="Set :CFBundleVersion $BASEVERNUM.$REV"
echo "PLISTARG1=$PLISTARG1"
/usr/libexec/PlistBuddy -c "$PLISTARG1" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
然而,XCode 4(我已经爱上了)显然需要进行一些调整,因为这种神奇的方式只能起作用。以下是上述脚本的结果。
REV=3281
INFOPLIST_PATH=Foo.app/Info.plist
BASEVERNUM=1.0
PLISTARG1=Set :CFBundleVersion 1.0.3281
我可以通过查看〜/ Library /.../ Foo.app/Info.plist看到是的,它确实更新了正确的版本:
<key>CFBundleVersion</key>
<string>1.0.3281</string>
显然有一个附加文件需要更新..也许在.xcarchive中?关于在哪里钻取的第一个建议?
答案 0 :(得分:5)
我不确定存档角度,但以下内容适用于Xcode 4(即我的应用程序在组织者中列为Foo 1.0.307)
手动将CFBundleShortVersionString
中的info.plist
(又名“捆绑版本字符串,简称”)值设置为major.minor
版本号(例如1.0)
使用以下脚本
为项目添加“运行脚本”构建阶段REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${INFOPLIST_FILE}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${INFOPLIST_FILE}"
清理并构建(Clean步骤强制Xcode重新处理info.plist)。
顺便说一下,您还可以使用[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]
答案 1 :(得分:0)
如果您的脚本更新了这两个字段 CFBundleVersion 和 CFBundleShortVersionString 然后 .xcarchive将显示正确的版本
但是你可能找到更好的方法吗? 我们赞赏没有更新CFBundleShortVersionString的方式。
答案 2 :(得分:0)
将在组织者中显示但是你的plist需要一个DDBundleBaseVersion键(我编写的一个键。它应该保存ShortVersionString的原始值)
PLIST=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH};
REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :DDBundleBaseVersion" "${PLIST}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${PLIST}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $BASEVERNUM.$REV" "${PLIST}"
不会在组织者中展示,但可以正常工作:
PLIST=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH};
REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PLIST}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${PLIST}"