使用构建/编译器变量在构建时传递IP,而无需创建构建工件

时间:2019-02-07 18:43:04

标签: swift xcode compiler-flags

这不是重复的问题。当前对该问题的“答案”使用的是Objective-C,它允许使用更多扩展的#Define语句。现有建议的解决方案会导致文件中的IP地址直接更改 ;我试图避免的构建工件。

我目前正在为移动应用程序构建一些测试,该应用程序使用Xcode快速构建。此应用程序使用云服务获取项目状态,并存储/检索登录信息。

----------      ---------
| Server | ---> | Cloud | 
----------      ---------

但是,在测试时,我使用在nodeJS上运行的虚拟服务器来提供预期的响应,因此,我不必每次都要进行UI测试时就注册一个帐户。检查注册过程。

----------      ---------
| Server | ---X | Cloud | 
----------      ---------
     |         ----------
      -------> | nodeJS |
               ----------

为了使其在iOS模拟器以及外部设备上都能正常运行,我需要指定nodeJS服务器的IP。我一直在手动执行此操作,但是我想使其自动执行。

这很麻烦:我希望能够在运行时或至少在构建时没有工件的情况下做到这一点。

我尝试过的解决方案:

  1. PList变量
    我在info.plist中创建了一个名为TestServerIP的变量。然后在构建时使用bash脚本将变量的​​值更改为我的en0地址:

    #!/bin/bash
    localUrl=$(ipconfig getifaddr en0)
    plutil -replace TestServerIP -string \"$localUrl\" $SRCROOT/gdocntl/Info.plist
    

    问题是我的.plist文件中现在有一个硬编码的IP地址。

  2. 新的plist文件
    我只想用bash制作一个仅具有IP var的新plist文件,但是您不能在xcode之外创建文件并将其轻松添加到捆绑软件中。我开始研究这个问题,但是很快发现我正在尝试进行XML搜索/替换... and we all know how well that works

  3. 快速脚本
    然后,我尝试使用修改后的swift脚本在运行时从 https://stackoverflow.com/a/25627545/9952260。这里的问题是,当在物理iOS设备上运行时,它会获取iDevice而不是计算机的IP。

我一直在尝试实现(1)的变体,在其中我将TestServerIP定义为类似于${NODE_JS_IP}的东西,但是我不确定如何使用Xcode定义它。我走了几个兔子洞:

TL; DR:如何在构建时使用bash脚本定义自定义swift标志或编译器变量(可以在plist中分配给变量的值)?

0 个答案:

没有答案