在构建应用程序之前从Info.plist文件中删除一个简单的密钥

时间:2014-08-04 10:49:26

标签: ios objective-c xcode

实际上基于配置我要删除并在Info.plist中添加一个键。使它充满活力。我已经采取了添加脚本来实现这一目标的方法。

我尝试了什么,我遇到了什么问题。

添加了构建脚本:使用编辑器添加脚本 - >添加构建阶段 - >添加运行脚本。

输出:我可以看到密钥在Xcode文件中被删除但是当我要在iPA中看到密钥时,密钥仍然存在。所以,我相信Build系统在删除密钥之前复制了该文件。看起来像执行脚本的顺序问题。

行动前制定计划看起来很有希望。

问题:我在Pre-Action脚本中添加了简单的echo语句。但我无法看到它的输出。关于堆栈溢出的几个问题,我发现我们可以在console.app上看到它。但我尝试了很多,我无法在Console.app中看到它。我正在使用Xcode 5.1.1。

任何人都可以指出我在哪里可以看到我的预操作脚本的输出?

外部构建系统:我还尝试了这个Running script only for an 'Archive' build in Xcode 4

上述链接中提供的解决方案中的问题

  1. 不确定如何提供相对于项目的脚本文件路径
  2. 无法找到类似$ {INFOPLIST_File}
  3. 的环境变量

1 个答案:

答案 0 :(得分:1)

使用外部构建系统模板创建新目标(并使其运行脚本)然后使app / library /依赖于此新目标的目标更好目标

这样它就会在Xcode甚至触及你的Info.plist之前运行,并且曾经存在Xcode的问题(如果我没记错的话,在4.2中)运行在构建阶段修改Info.plist的脚本会让它崩溃。

我使用这种方法使用TexturePacker命令行构建spritesheets并使用python脚本来修改我的内部版本号。

编辑以下是要使用的设置示例,假设脚本位于Xcode项目的同级目录中名为tools(我的首选位置)的目录中,所以:

MyProject/
    MyProject.xcodeproj/
    MyProject/
        (source files)
        MyProject-Info.plist
    tools/
        the_script.sh             (see below)

然后外部构建系统将配置为:

Build Tool: tools/the_script.sh
Arguments: MyTarget1/MyTarget1-Info.plist MyTarget2/MyTarget2-Info.plist
Working Directory: $(SRCROOT)

然后the_script.sh会将Info.plist路径作为唯一参数(在运行之前不要忘记chmod 0755):

#!/bin/sh

# Don't do anything when cleaning
if [ "$ACTION" = "clean" ]; then
    exit 0
fi

if [ $# -eq 0 ]; then
    echo usage: $0 info-plist \[ ... info-plist \]
    exit 1
fi

while (( "$#" )); do

    plist=$1

    # Do work
    /usr/libexec/PlistBuddy ... $plist

    shift
done