【发布时间】:2011-10-18 06:29:57
【问题描述】:
我正在尝试执行以下操作:
- 在构建阶段,打开一个纯文本文件并阅读文本
- 将 info.plist 中某个属性的值更改为步骤 1 中获得的值。
我可以为此编写一个 shell 脚本吗?
如果有人能指导我实现这一点,那就太好了。
【问题讨论】:
我正在尝试执行以下操作:
我可以为此编写一个 shell 脚本吗?
如果有人能指导我实现这一点,那就太好了。
【问题讨论】:
可能最简单的方法是使用 PlistBuddy。我有一个运行脚本阶段,如下所示:
BUILD_NUMBER=`git rev-list HEAD --count`
INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
if [ -f "$INFO_PLIST" ] ; 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 构建速度。
【讨论】:
defaults write 命令和自定义 plist 路径来设置 plist 值
是的,你可以。我会分三步完成:
${MY_COOL_SETTING}。【讨论】:
@PeyloW 提供了一种方法。另一种方法是添加一个运行脚本构建步骤。在该步骤中,您可以随心所欲地重写 Info.plist。我一直这样做是为了设置 svnversion。
我建议将您的脚本放在一个文件中,然后将. 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
【讨论】: