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

Mit*_*hin 21 xcode build ios

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

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

我可以为此编写一个shell脚本吗?

如果有人可以指导我实现这一点,那就太好了.

Vác*_*vík 20

可能最简单的方法是使用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
Run Code Online (Sandbox Code Playgroud)

(请注意,从Xcode 6开始,您必须在Copy Bundle Resources阶段之后运行它,因为Info.plist在此之前不会将其复制到目标位置,并且PlistBuddy将失败.)

编辑01/17:更新以避免不必要的复制或目标签名.你不想触摸Info.plist,除非真的发生了变化,否则Xcode会将它(以及目标)视为已修改.检查以前的值CFBundleVersion可以显着加快构建速度 - 它在noop构建上节省了几秒钟.


Pey*_*loW 15

是的你可以.我会分三步完成:

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

  • 关于如何让脚本设置环境变量的任何指导?另外,它不应该是$ {MY_COOL_SETTING}吗? (3认同)
  • 我不明白这是如何被接受的答案.如何从脚本阶段导出环境变量.(步骤1) (3认同)
  • 如果键是布尔值怎么办?它不会接受环境变量名称占位符。 (2认同)
  • 任何人都可以确认这适用于最新的Xcode 4吗?似乎对我不起作用(确实听起来不应该这样,毕竟它是一个子壳) (2认同)

Rob*_*ier 7

@PeyloW提供了一种方法.另一种方法是添加Run Script构建步骤.在该步骤中,您可以随意重写Info.plist.我一直这样做来设置svnversion.

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

  • +1用于将脚本放在单独的文件中.我曾经也重写了plist文件.但这样做往往会对源代码管理中的plist文件进行不必要的修改.所以我改为env-variable解决方案. (2认同)