XCode 4:在Xcode中插入Subversion版本号

时间:2011-04-19 13:55:24

标签: iphone xcode xcode4

是的,这与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中?关于在哪里钻取的第一个建议?

3 个答案:

答案 0 :(得分:5)

我不确定存档角度,但以下内容适用于Xcode 4(即我的应用程序在组织者中列为Foo 1.0.307)

  1. 手动将CFBundleShortVersionString中的info.plist(又名“捆绑版本字符串,简称”)值设置为major.minor版本号(例如1.0)

    < / LI>
  2. 使用以下脚本

    为项目添加“运行脚本”构建阶段
    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}"
    
  3. 清理并构建(Clean步骤强制Xcode重新处理info.plist)。

  4. 顺便说一下,您还可以使用[[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}"