【发布时间】:2020-03-02 04:44:30
【问题描述】:
我在 CI/CD 平台上定义了一个 API 密钥,如下所示:
export API_KEY="XXXXXXXXXX"
有没有一种方法可以以某种方式在我的构建中编译这个变量,以便我可以在 Swift 中引用它,而不必担心在运行时在二进制环境中定义的变量?我显然不能使用ProcessInfo.processInfo.environment,因为API 密钥只在我的CI/CD 环境中定义。我想用密钥编译我的二进制文件,以便在分发我的应用程序时可以使用密钥。
我的用例是我想避免将 API 密钥放入我的 git 存储库,而是在生成构建时从 CI/CD 平台获取它。如果有办法注入一个环境变量,然后编译为二进制文件的一部分,那将是理想的。
【问题讨论】:
-
并非如此。无论哪种方式,您的应用都必须拥有它(以便能够将其传输到 API)
-
@Alexander 你可能误解了我的要求。我知道我的应用程序必须以某种方式拥有 API 密钥;我不是想避免这种情况。我只想在构建应用程序时从环境变量中获取它,并在可能的情况下将其与应用程序一起编译。
-
关于您的 CI 平台的 IDK,但在最坏的情况下,您可以编写一个脚本来读取 CI 环境变量,并将其存储到您的应用程序可以访问的位置。但是“不必担心在运行时在二进制环境中定义的变量”是不可能的。
-
@Alexander 明确一点,当我说“二进制环境”时,我的意思是我不想从二进制的运行目录定义环境变量(因为我无法控制存在的环境变量当应用程序分发时,并且不希望 API 密钥存储在我们的 git 存储库中)。例如,如果我能以某种方式将环境变量注入到某种 Swift 配置类中,并作为二进制文件的一部分进行编译,那将是一个理想的解决方案。
-
您的脚本可以将 api 密钥注入 Swift 类的占位符,就像 Sombre 的回答所示。你也可以将它写入一个 plist/xml/json/yaml/whatever 文件中,该文件将被捆绑到你的应用程序中,并在运行时从那里读取。
标签: swift xcode compilation api-key