这不是重复的问题。当前对该问题的“答案”使用的是Objective-C,它允许使用更多扩展的#Define
语句。现有建议的解决方案会导致文件中的IP地址直接更改 ;我试图避免的构建工件。
我目前正在为移动应用程序构建一些测试,该应用程序使用Xcode快速构建。此应用程序使用云服务获取项目状态,并存储/检索登录信息。
---------- ---------
| Server | ---> | Cloud |
---------- ---------
但是,在测试时,我使用在nodeJS上运行的虚拟服务器来提供预期的响应,因此,我不必每次都要进行UI测试时就注册一个帐户。检查注册过程。
---------- ---------
| Server | ---X | Cloud |
---------- ---------
| ----------
-------> | nodeJS |
----------
为了使其在iOS模拟器以及外部设备上都能正常运行,我需要指定nodeJS服务器的IP。我一直在手动执行此操作,但是我想使其自动执行。
这很麻烦:我希望能够在运行时或至少在构建时没有工件的情况下做到这一点。
我尝试过的解决方案:
PList变量
我在info.plist
中创建了一个名为TestServerIP
的变量。然后在构建时使用bash脚本将变量的值更改为我的en0
地址:
#!/bin/bash
localUrl=$(ipconfig getifaddr en0)
plutil -replace TestServerIP -string \"$localUrl\" $SRCROOT/gdocntl/Info.plist
问题是我的.plist文件中现在有一个硬编码的IP地址。
新的plist
文件
我只想用bash制作一个仅具有IP var的新plist
文件,但是您不能在xcode之外创建文件并将其轻松添加到捆绑软件中。我开始研究这个问题,但是很快发现我正在尝试进行XML搜索/替换... and we all know how well that works。
我一直在尝试实现(1)的变体,在其中我将TestServerIP
定义为类似于${NODE_JS_IP}
的东西,但是我不确定如何使用Xcode定义它。我走了几个兔子洞:
#if
语句,无用,因为在构建脚本运行之前未知我的IP) TL; DR:如何在构建时使用bash脚本定义自定义swift标志或编译器变量(可以在plist
中分配给变量的值)?