![](/img/trans.png)
[英]The Copy Bundle Resources build phase contains this target's Info.plist file 'Info.plist' in xcode 6?
[英]iOS: Changing info.plist during build phase
我正在尝试执行以下操作:
我可以为此编写一个shell脚本吗?
如果有人可以指导我实现这一点,那就太好了。
可能最简单的方法是使用PlistBuddy。 我有一个Run Script阶段,如下所示:
BUILD_NUMBER=`git rev-list HEAD --count`
INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
if [ -f "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" ] ; then
oldversion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$INFO_PLIST"`
fi
if [ "$BUILD_NUMBER" != "$oldversion" ] ; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFO_PLIST"
fi
(请注意,从Xcode 6开始,您必须在Copy Bundle Resources阶段之后运行它,因为在此之前Info.plist
不会复制到目标位置,并且PlistBuddy会失败。)
编辑01/17:更新以避免不必要的复制或目标签名。 你不想触摸Info.plist,除非真的发生了变化,否则Xcode会将它(以及目标)视为已修改。 检查以前的值CFBundleVersion
可以显着加快构建速度 - 它在noop构建上节省了几秒钟。
是的你可以。 我会分三步完成:
${MY_COOL_SETTING}
。 @PeyloW提供了一种方法。 另一种方法是添加Run Script构建步骤。 在该步骤中,您可以随意重写Info.plist。 我一直这样做来设置svnversion。
我建议将脚本放在一个文件中,然后放入. myscript.sh
Run Script阶段的. myscript.sh
。 这比将整个脚本直接放在Xcode中更容易理解和维护。
我有一个脚本文件,它将内部版本号放入我的info.plist中的一个字段中。 我在项目的info.plist中放了一些占位符文本,然后脚本就会替换它。 它仅增加发布版本上的内部版本号。 在开发构建时,它只是说它们是开发构建。
if [ "$BUILD_STYLE" = "Release" ]
then
if [ ! -f build-number ]; then
echo 0 > build-number
else
expr `cat build-number` + 1 > build-number.new
mv build-number.new build-number
fi
perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`cat build-number`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
else
perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`echo Development`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
fi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.