此工具已弃用,维护者将不再更新。
变量注入器是一个非常简单的项目,目标是在编译和持续部署到特定环境(开发、测试或生产)之前,将 CI 管道环境变量的值注入到 Swift 代码的静态值中。这样,我们可以为每个构建和部署定义注入的值,例如 App 使用的 API URL,该 URL 在每个环境中都不同。此外,它允许我们不在代码中静态地暴露我们的生产密钥和值。
该项目使用 SwiftSyntax 来可靠地将静态字面字符串替换为 CI 环境变量的值。
只需克隆 repo 并运行 make install
安装完成后,在我们的 bin
文件夹中,我们就可以使用它了。
有关使用此工具的详细示例,请查看 Medium 上的文章 Continuous Integration Environment Variables in iOS projects using Swift。
注意 如果您在使用 XCode 11 时遇到问题,请使用该工具的 0.3.3 版本。
您应该有一个 class
或 struct
,其中包含遵循 $(VAR_NAME) 模式的环境变量声明。 例如:
struct CI {
static var serviceAPIKey: String = "$(SERVICE_PROD_KEY)"
static var otherAPIKey: String = "$(OTHER_PROD_KEY)"
}
具有符合模式的环境静态声明
variable-injector --file ${SRCROOT}/Environment/CI.swift
如果在构建机器上为该管道定义了具有这些名称的环境变量,如示例中的 SERVICE_PROD_KEY
和 OTHER_PROD_KEY
,则注入器会将字符串字面量替换为环境变量值。
替换后文件的示例。
struct CI {
static var serviceAPIKey: String = "h344hjk2h4j3h24jk32h43j2k4h32jk4hkj324h"
static var otherAPIKey: String = "dsa76d7adas7d6as87d6as78d6aklre423s7d6as8d7s6"
}
您可以在构建阶段中添加用于变量替换的脚本调用。我们只需在本地机器上将我们的开发密钥设置为环境变量并构建项目即可。
重要提示:非常重要的一点是将此运行脚本阶段添加到“编译源文件”阶段之前。这样变量将被替换,然后进行编译:))
if which variable-injector >/dev/null; then
variable-injector --file ${SRCROOT}/YourProject/YourGroupFolderPath/File.swift --verbose # Pass your parameters
else
echo "Warning: Swift Variable Injector not installed, download from https://github.com/LucianoPAlmeida/variable-injector"
fi
我们可以忽略匹配 $(ENV_VAR) 的模式以避免替换。
variable-injector --file ${SRCROOT}/Environment/CI.swift --ignore OTHER_PROD_KEY
此外,要查看变量、值和源输出的日志,您可以使用 --verbose
重要提示 verbose 模式会将环境变量的值打印到日志中。因此,您可能需要小心,并且仅将其用于调试目的。
variable-injector --file ${SRCROOT}/Environment/CI.swift --verbose
之后,我们可以继续执行 CI/CD 管道的构建、归档和其他步骤。
变量注入器是在 MIT 许可证 下发布的。