3

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

整个想法如下:我想发布一个带有单元测试的开源项目。我的测试需要像“登录”和“密码”这样的敏感数据,所以我不能对它们进行硬编码。我想通过进程环境传递登录以便能够执行以下操作:

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

我找到了如何将变量从构建设置环境传递到测试过程的方法:选择“测试”方案,转到环境变量并添加一个名为“登录”和值“$(登录)”的新值。如果我在构建设置选项卡中为“登录”设置值 - 就像我预期的那样,它将可以从 ProcessInfo 访问。

但我想要的是从项目的根文件夹脚本文件“SetupCreds.sh”中设置“登录”,该文件位于 .gitignore 中,因此将登录名和密码保存在其中是安全的。所以这个想法是:

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

如果我添加echo ${login}一个构建阶段脚本,它会告诉我“登录”确实具有值“MyLogin”。但是这个导出不会影响 Build Settings 环境,只会影响 Build Phase 脚本环境。

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

4

1 回答 1

1

我已经复制了此处评论中提到的@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”网址。
于 2019-11-20T09:33:43.243 回答