我经常与开发服务器一起处理 iOS 项目,开发服务器始终在我用来构建应用程序的同一台机器上运行。一个典型的场景是我有一个在 http://localhost:3000
上运行的 Rails 应用程序,我正在设备上进行测试。为了在设备上进行测试,我需要一个已解析的 IP 地址,以便我的应用程序可以与本地网络上的开发服务器通信。
我知道我可以使用 GCC_PREPROCESSOR_DEFINITIONS
将一些环境变量设置到预处理器宏中,我知道我可以通过运行 ifconfig | 获取构建机器的 IP 地址grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'
在 bash 脚本中。
我想做的是在 GCC_PREPROCESSOR_DEFINITIONS
中使用 '@"http://${BUILD_MACHINE_IP_ADDRESS}:3000"' 之类的值定义
,但我不知道如何使用上面的 MY_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}`
在运行脚本 构建阶段,但不会产生结果。
最佳答案
这样做的一种方法是有一个运行脚本构建阶段,该阶段编写一个 .h 文件,该文件包含 #define
宏并包含您的源代码。
我认为在构建期间编写 .xcconfig 不会对该构建产生任何影响。
由于多种原因,无法从运行脚本构建阶段导出环境变量。首先,环境变量可以从build设置中创建,但反过来就不行了。其次,即使他们这样做了,子进程也不能在其父进程中设置环境变量。
完全是另一种方法,您是否考虑过使用开发机器的 .local 主机名而不是数字 IP 地址?检查“系统偏好设置”的“共享”面板,它会显示您系统的域名。
关于ios - 在 Xcode 中创建动态预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755233/