iOS:改变信息.构建阶段的Plist



我正在尝试做以下事情:

    在构建阶段,打开一个纯文本文件并读取文本
  1. 在info中修改属性的值。

我可以写一个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的。除非有什么真正的变化,否则Xcode将把它(因此目标)视为修改。检查以前的值CFBundleVersion可以显著加快构建速度-它节省了我在noop构建上的几秒钟。

可以。我会分三步来做:

  1. 编写shell脚本,在第一个构建阶段之前运行。让脚本设置一个环境变量。
  2. 启用"在信息中展开构建设置"。项目列表
  3. 使用plist文件中的环境变量,如${MY_COOL_SETTING}

@PeyloW提供了一种方法。另一种方法是添加Run Script构建步骤。在这个步骤中,你可以重写你的信息。随便你怎么写。我一直这样做来设置svnversion.

我建议将脚本放在一个文件中,然后将. myscript.sh放在Run script阶段。这比将整个脚本直接放在Xcode中更容易理解和维护。

我有一个脚本文件,将构建号放入我的info.plist中的一个字段中。我在信息里放了一些占位符。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

最新更新