iOS:在构build阶段更改info.plist

我正在尝试执行以下操作:

  1. 在构build阶段,打开一个纯文本文件并阅读文本
  2. 将info.plist中的属性值更改为步骤1中获取的值。

我可以写一个shell脚本吗?

如果有人能指导我实现这一点,那将是非常棒的。

是的你可以。 我会做三个步骤:

  1. 编写在第一个构build阶段之前运行的shell脚本。 让这个脚本设置一个环境variables。
  2. 为您的项目启用“在Info.plist中展开构build设置”
  3. 在plist文件中使用环境variables,如${MY_COOL_SETTING}

可能最简单的方法是使用PlistBuddy。 我有一个运行脚本阶段,看起来像这样:

 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开始,必须 “复制包资源”阶段之后运行此操作,因为Info.plist在此之前不会复制到目标位置,并且PlistBuddy将失败。)

编辑01/17:已更新,以避免不必要的复制或签署目标。 你不想触摸Info.plist,除非有真正的改变,否则Xcode会将其视为已修改的对象(以及目标)。 检查以前的值CFBundleVersion可以显着加快构build – 它节省了我几秒钟的noop构build。

@PeyloW提供了一种方法来做到这一点。 另一种方法是添加一个运行脚本构build步骤。 在这一步中,你可以重写你的Info.plist。 我一直这样做来设置svnversion。

我build议把你的脚本放在一个文件中,然后放入. myscript.sh 运行脚本阶段的. myscript.sh 。 这比将整个脚本直接放在Xcode中更容易理解和维护。

我有一个脚本文件,将一个内部版本号放入我的info.plist中的一个字段中。 我在项目中的info.plist中放置了一些占位符文本,然后脚本将其replace。 它只会增加发布版本上的内部版本号。 在开发构build它只是说,他们是一个发展build设。

  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 -es/BUILD_NUMBER_PLACEHOLDER/`cat build-number`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist else perl -pi -es/BUILD_NUMBER_PLACEHOLDER/`echo Development`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist fi