2013-05-26 140 views
3

我经常在iOS项目上开发一个开发服务器,它始终运行在我用于构建应用程序的同一台机器上。一个典型的情况是,我有一个轨道应用程序在http://localhost:3000上运行,并且正在测试设备。为了在设备上测试,我需要一个解决的IP地址,以便我的应用程序可以与本地网络上的我的开发服务器通信。在Xcode中创建一个动态的预处理器宏

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

我想要做的是使用一个值,如'@"http://${BUILD_MACHINE_IP_ADDRESS}:3000"'定义GCC_PREPROCESSOR_DEFINITIONSMY_SERVER_URL,但我想不通的是如何使用上述ifconfig脚本设置${BUILD_MACHINE_IP_ADDRESS}

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

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

+0

这个怎么样?'BUILD_MACHINE_IP_ADDRESS = $(ifconfig | grep -E'inet。[0-9]'| grep -v'127.0.0.1'| awk'{print $ 2}')' –

+0

@Jaypal yes我想要做什么,但我不知道*在哪里*我会这样做,以使编译时可用的变量。 –

+0

您可以在命令行上“导出”该变量,或者将其添加到您的配置文件中,使其每次打开终端时都可以全局使用。 –

回答

1

这样做的一种方法是运行脚本构建阶段,该阶段写入一个.h文件,该文件是#define的宏,并且包含您的源代码。

我不认为在构建过程中编写.xcconfig会对该构建产生任何影响。

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

对于完全的另一种方法,您是否使用开发机器的.local主机名而不是数字IP地址进行了研究?检查“系统偏好设置”的“共享”窗格,该窗格会显示您系统的域名。

+0

当我说问题中的配置文件时,我正在考虑更多的沿着.json或.plist文件的行,我应该可能更具体。使用机器的.local名称将适用于只有我工作的项目,但是只要您引入一个掉队的团队(每个团队都有自己的开发服务器)。我想没有理想的方法来做到这一点,我可能会去.h文件。谢谢:) –

+0

是“使用开发机器的.local主机名称而不是数字IP地址”。 –