【发布时间】:2019-06-10 14:56:45
【问题描述】:
是否可以在脚本的构建阶段更改 Xcode BuildSettings 环境变量?
整个思路如下: 我想发布一个带有单元测试的开源项目。 我的测试需要像“登录”和“密码”这样的敏感数据,所以我不能对它们进行硬编码。 我想通过进程环境传递登录以便能够执行以下操作:
let login = ProcessInfo().environment["login"]!
我找到了如何将变量从构建设置环境传递到测试进程的方法:选择“Tests”方案,转到环境变量并添加一个名为“login”和值“$(login”的新值)”。 如果我在构建设置选项卡中为“登录”设置值 - 就像我预期的那样,它将可以从 ProcessInfo 访问。
但我想要的是从项目的根文件夹脚本文件“SetupCreds.sh”中设置“登录”,该文件位于 .gitignore 中,因此将登录名和密码保存在其中是安全的。 所以这个想法是:
- 添加构建阶段脚本
- 此脚本运行“SetupCreds.sh”
- “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