XCode 4:插入Subversion版本号在Xcode
是的,这与this question非常相关,但我认为这个问题已经足够回答XCode 3.不知道这是否应该合并。XCode 4:插入Subversion版本号在Xcode
所以 - 从那里使用类似的指令,我很久以来就有将编号编码到归档的.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
我可以通过寻找在〜/库/.../ Foo.app/Info.plist,是的,它没有更新的正确版本,请参阅:
<key>CFBundleVersion</key>
<string>1.0.3281</string>
因此显然有一个额外的文件需要更新..也许在.xcarchive?关于何处首先钻取的任何建议?
我不知道关于存档的角度,但在Xcode 4为我工作(即我的应用程序中的组织者列为富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"]
如果你的脚本更新这两个领域 CFBundleVersion 和 CFBundleShortVersionString 然后 .xcarchive会告诉你正确的版本
但是可能你找到更好的方法? 赞赏不更新CFBundleShortVersionString的方式。
将显示组织者,但你的plist中需要DDBundleBaseVersion关键
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}"
不会显示在主办方但将正常工作(我编了一个关键应该保持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 :CFBundleShortVersionString" "${PLIST}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${PLIST}"
'DDBundleBaseVersion'? – *foe 2013-09-04 11:43:31
只是使这个关键了;)我需要一个新的关键来存储原始的shortVersion ...也许名称应该是不同的 – 2013-09-04 11:48:11
唉,这正是我正在寻找工作的归档方式,它仍然在XCode 3中工作,现在看起来并不在4中。请欣赏Jaysen的建议。谢谢。 – 2011-06-29 17:07:02
嗨Jaysen,工作就像一个魅力,但这个脚本当然会改变你的信息plist,你应该承诺,这会导致一个变化,你应该承诺,等等等等。也许最好是建立这样的一个svn或者git commit hook? http://svnbook.red-bean.com/en/1.2/svn.reposadmin.create.html#svn.reposadmin.create.hooks – 2011-12-13 11:34:48
根本不工作,因为路径是错误的。把一个工作版本放在下面。 @JohanPelgrim是可能会更好,但我太懒惰 – 2013-09-04 11:39:30