我有一个使用App Center构建的Xamarin Forms应用程序。该应用程序包含一些类似于以下内容的代码:
var secret= "secretvaluegoeshere";
然后我使用密码与API进行通信。现在,我想从代码中提取该秘密,以免将其包含在源代码管理中,并在App Center上构建时将其注入。 Environment Variables似乎应该解决这个问题,但是文档中的示例并未提及如何进入代码(仅nuget和gradle配置)。是否可以使用环境变量来完成我想要的事情?还是应该以其他方式来做到这一点?
答案 0 :(得分:2)
您可以通过预构建脚本将其注入到您的项目中(直接在代码中替换一些占位符,创建一些资源文件等),然后在运行时从那里读取它。
答案 1 :(得分:2)
因此,通过执行以下步骤,事实证明这非常容易:
在项目中安装Mobile.BuildTools NuGet软件包。
在项目的根目录中添加secrets.json文件(应使用.gitignore将其从源代码管理中排除。)
将您的机密添加到secrets.json文件中,因此在我的情况下,我将添加SearchApiKey,显然,您可以根据需要添加任意数量的机密:
{
"SearchApiKey": "SUPERSECRETGOESHERE"
}
构建您的项目,这将生成一个带有属性SearchApiKey的名为Secrets的静态类,如果您想查看它,可以在obj文件夹下找到它。
您现在可以在代码中访问该类及其属性,所以我就可以这样做:
var secret = Secrets.SearchApiKey;
最后要将机密传递到AppCenter上的构建中,您需要添加一个与Secret_前缀的属性名称匹配的环境变量,因此在我的情况下,其名称为Secret_SearchApiKey并设置其值。
您可以查看Mobile.BuildTools GitHub存储库以获取更多信息。