如何从Build Phase脚本更改Xcode Build Settings环境变量?

时间:2019-01-16 13:48:12

标签: xcode bash unit-testing build-settings sensitive-data

是否可以在脚本的构建阶段更改Xcode BuildSettings环境变量?

整个想法如下: 我想发布一个带有单元测试的开源项目。 我的测试需要敏感的数据,例如“登录”和“密码”,因此我无法对其进行硬编码。 我想通过流程环境传递登录信息,以便能够执行以下操作:

let login = ProcessInfo().environment["login"]!

我已经找到了如何将变量从构建设置环境传递到测试过程的方法:选择“测试”方案,转到环境变量,并添加名称为“ login”和值“ $(login)的新值。 )”。 如果我直接在构建设置选项卡中设置“登录”的值,则可以像我期望的那样从ProcessInfo进行访问。

但是我想要从.gitignore中项目的根文件夹脚本文件“ SetupCreds.sh”设置“登录”,因此可以安全地保留登录名和密码。 因此,想法是:

  1. 添加构建阶段脚本
  2. 此脚本运行“ SetupCreds.sh”
  3. “ SetupCreds.sh”由诸如export login="MyLogin
  4. 之类的导出行组成

如果我在构建阶段脚本中添加echo ${login},它将告诉我“登录”确实具有值“ MyLogin”。 但是此导出不会影响“构建设置”环境,只会影响“构建阶段”脚本环境。

如何进行导出以覆盖“构建设置”环境变量? 也许还有另一种方法可以做我想做的事?

1 个答案:

答案 0 :(得分:0)

我已经复制了此处评论中提到的@Vladex答案,因此更易于阅读。

  1. 在“复制资源”脚本之后添加以下脚本阶段。
    $file then
    copy_target="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.xctest/Tests.cfg"
    cp -r $file $copy_target echo "Tests.cfg file copied to
    ${copy_target}" else echo "warning: No Tests.cfg file found. Some
    tests will be ignored." fi 
  1. 将“ Tests.cfg”放入gitignore。
  2. 创建“ Tests.cfg”文件,并用敏感或 特定于配置的值。
  3. 在测试中,使用Bundle.for(type(of: self).self)获取“ Tests.cfg”网址。