【问题标题】:iOS: Changing info.plist during build phaseiOS:在构建阶段更改 info.plist
【发布时间】:2011-10-18 06:29:57
【问题描述】:

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

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

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

如果有人能指导我实现这一点,那就太好了。

【问题讨论】:

    标签: ios xcode build


    【解决方案1】:

    可能最简单的方法是使用 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 构建速度。

    【讨论】:

    • 我花了很长时间才弄清楚为什么我的脚本适用于常规构建但在归档构建中失败。它必须在复制捆绑资源之后运行。谢谢!
    • 你不需要 plist buddy,你可以使用标准的 defaults write 命令和自定义 plist 路径来设置 plist 值
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!但是在这个阶段我如何打开一个文件并从中读取文本呢?
    • 如果键是布尔值怎么办?它不会接受环境变量名称占位符。
    • 关于如何让脚本设置环境变量的任何指导?另外,它不应该是 ${MY_COOL_SETTING} 吗?
    • 任何人都可以确认这适用于最新的 Xcode 4 吗?似乎对我不起作用(确实听起来不应该,毕竟它是一个子外壳)
    • 我不明白这是如何被接受的答案。如何从脚本阶段导出环境变量。 (步骤#1)
    【解决方案3】:

    @PeyloW 提供了一种方法。另一种方法是添加一个运行脚本构建步骤。在该步骤中,您可以随心所欲地重写 Info.plist。我一直这样做是为了设置 svnversion。

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

    【讨论】:

    • +1 用于将脚本放在单独的文件中。我曾经也重写过 plist 文件。但是这样做往往会对源代码管理中的 plist 文件进行不必要的修改。所以我改用 env-variable 解决方案。
    • 环境变量解决方案很好,如果我构建另一个版本控制脚本,为了简单起见,我可能会切换到该方法。脚本更灵活。
    【解决方案4】:

    我有一个脚本文件,它将内部版本号放入我的 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
    

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 2011-03-06
      相关资源
      最近更新 更多