ios - 在 Xcode 中创建动态预处理器宏

标签 ios xcode bash xcode4 environment-variables

我经常与开发服务器一起处理 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/

相关文章:

bash - 检索脚本的父目录

ios - 根据swiftui中单击的切换按钮从数组中删除数据

linux - 如何在shell中找到某个字符的位置

bash - Dockerfile RUN 命令是否在登录 shell 环境中运行?

ios - 只有实例方法可以声明@IBAction

xcode - 多个目标具有相同的产品名称、相同的 bundle ID,这可能吗?

ios - 如何平均固定宽度?

iphone - 如果要弹出操作表,请关闭键盘

ios - Swift 项目在启动时崩溃 - 适用于 Objective-C

ios - 无法在 uicollectionview 中显示 uimage 集