我有一个 Xamarin Forms 应用程序,正在使用应用程序中心构建。该应用程序包含一些如下所示的代码:
var secret= "secretvaluegoeshere";
然后我使用该密钥与 API 进行通信。现在,我想从代码中提取该秘密,以免将其置于源代码控制中,并在应用程序中心构建时将其注入。 环境变量似乎他们应该解决这个问题,但文档中的示例没有提到它们如何进入代码(只有 nuget 和 gradle 配置)。有没有办法用环境变量来做我想要的事情,或者我应该以另一种方式做这件事?
事实证明,按照以下步骤操作非常简单:
在项目中安装 Mobile.BuildTools NuGet 包。
在项目的根目录中添加一个 Secrets.json 文件(应使用 .gitignore 将其从源代码管理中排除)。
将您的秘密添加到secrets.json文件中,所以在我的例子中,我将添加一个SearchApiKey,显然您可以添加任意数量的秘密:
{
"SearchApiKey": "SUPERSECRETGOESHERE"
}
构建您的项目,这将生成一个名为 Secrets 的静态类,其属性为 SearchApiKey,如果您想查看它,可以在 obj 文件夹下找到它。
您现在可以在代码中访问此类及其属性,所以我只需这样做:
var secret = Secrets.SearchApiKey;
最后,要将密钥传递到 AppCenter 上的构建中,您需要添加一个与前缀为 Secret_ 的属性名称相匹配的环境变量,因此在我的例子中,它的名称是 Secret_SearchApiKey 并设置它的值。
您可以查看 Mobile.BuildTools GitHub 存储库以获取更多信息。
您可以通过预构建脚本将其注入到您的项目中(直接替换代码中的一些占位符,创建一些资源文件等),然后在运行时从那里读取它。
如果您不想使用额外的 nuget 包,您可以按照 GitHub 上官方 AppCenter 项目发布的示例
您需要做的是在 AppCenter 上创建一个新的环境变量,并使用您想要设置的值。然后将名为
appcenter-pre-build.sh
的文件保存在 .csproj
文件的同一位置,并像示例中那样创建您自己的代码。
将文件添加到存储库后,为了将检测到的脚本保存到构建配置中,您必须点击构建配置中的“保存”或“保存并构建”按钮
它刚才对我来说就像魅力一样,希望它能帮助别人!