【问题标题】:How to change Xcode Build Settings environment vars from a Build Phase script?如何从构建阶段脚本更改 Xcode 构建设置环境变量?
【发布时间】:2019-06-10 14:56:45
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 可以选择使用 xcconfig 文件吗?否则,可能会将设置作为文件包含在测试包中。例如。在运行脚本构建阶段复制它。
  • 感谢您的回答。 1. "Xcconfig" 是一个很好的建议,但是我的配置是由 Pod 生成的。此外,如果我尝试在脚本中更改项目配置 - git 会注意到这一点。我试图弄清楚如何在没有 git 注意到的项目更改的情况下做到这一点。 2. 复制也会被 git 注意到。但我喜欢这个想法,并尝试了解如果该文件在构建时存在,是否可以选择将 git-ignored 文件添加到 Tests 目标,如果该文件丢失,则不会失败,然后在测试中获取该文件捆绑的方法。谢谢!
  • 是的,它有效。步骤: 1. 在“复制资源”脚本之后添加一个脚本阶段。 2. 脚本内容:``` file="${SRCROOT}/${Tests.cfg}" if test -f $file then copy_target="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.xctest/Tests.cfg" cp -r $file $copy_target echo "Tests.cfg 文件复制到 ${copy_target}" else echo "警告:未找到 Tests.cfg 文件。某些测试将被忽略。" fi ``` 3. 将“Tests.cfg”放入 gitignore。 4. 创建“Tests.cfg”文件并用敏感或配置特定的值填充它。 5. 在测试中使用Bundle.for(type(of: self).self) 获取“Tests.cfg” url。
  • 你能把你最后的评论作为答案吗?以现在的形式阅读起来相当困难。

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


【解决方案1】:

我在这里复制了 cmets 中提到的@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”网址。

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2012-04-20
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2011-09-25
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多