在Xcode中创建一个动态预处理器宏

时间:2013-05-26 00:47:29

标签: ios xcode bash xcode4 environment-variables

我经常在iOS项目和开发服务器一起工作,开发服务器总是运行在我用来构建应用程序的同一台机器上。一个典型的情况是我在http://localhost:3000上运行了一个rails应用程序,我正在设备上进行测试。为了在设备上进行测试,我需要一个已解析的IP地址,以便我的应用可以与本地网络上的开发服务器通信。

我知道我可以使用GCC_PREPROCESSOR_DEFINITIONS将一些环境变量设置为预处理器宏,并且我知道我可以通过在bash脚本中运行ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'来获取构建机器的IP地址。

我想要做的是使用MY_SERVER_URL等值在GCC_PREPROCESSOR_DEFINITIONS中定义'@"http://${BUILD_MACHINE_IP_ADDRESS}:3000"',但我无法弄清楚如何设置${BUILD_MACHINE_IP_ADDRESS}上面的ifconfig脚本。

我已经考虑过使用运行脚本构建阶段来编辑配置文件,但是像这样的更改的后果令人恼火。例如,我不希望文件包含在源代码管理中,因为我的IP地址频繁更改,这会导致冲突。但我需要将它包含在项目文件中,以便应用程序可以访问它。这将导致项目构建所需的文件,但不包含在源代码控制中,这很难看。

我还尝试在运行脚本构建阶段运行export BUILD_MACHINE_IP_ADDRESS=`ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}`,但这不会产生结果。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用运行脚本构建阶段,该阶段会写入#define宏的.h文件,并包含在您的源中。

我不相信在构建期间编写.xcconfig会对该构建产生任何影响。

从运行脚本构建阶段导出环境变量不会因多种原因而起作用。首先,可以从构建设置创建环境变量,但不能以相反的方式工作。其次,即使他们这样做,子进程也不能在其父进程中设置环境变量。

对于另一种方法,您是否考虑过使用开发机器的.local主机名而不是数字IP地址?检查“系统偏好设置”的“共享”面板,它将显示系统的域名。