如何在 App Center 的 Xamarin.Forms 中使用 set Environment Variables

Ada*_*per 6 c# xamarin xamarin.forms visual-studio-app-center

我有一个使用 App Center 构建的 Xamarin Forms 应用程序。该应用程序包含一些如下所示的代码:

var secret= "secretvaluegoeshere";
Run Code Online (Sandbox Code Playgroud)

然后我使用该秘密与 API 进行通信。现在我想从代码中提取该秘密,以免在源代码管理中使用它并在 App Center 上构建时注入它。环境变量似乎应该解决这个问题,但是文档中的示例没有提到它们如何进入代码(只有 nuget 和 gradle 配置)。有没有办法用环境变量做我想做的事,还是我应该用另一种方式来做?

Ada*_*per 14

所以事实证明,通过以下步骤,这非常容易:

在您的项目中安装Mobile.BuildTools NuGet 包。

在项目的根目录中添加一个 secrets.json 文件(这应该使用 .gitignore 从源代码控制中排除)。

将您的秘密添加到 secrets.json 文件中,因此在我的情况下,我将添加一个 SearchApiKey,显然您可以添加任意数量的秘密:

{
  "SearchApiKey": "SUPERSECRETGOESHERE"
}
Run Code Online (Sandbox Code Playgroud)

构建您的项目,这将生成一个名为 Secrets 的静态类,其属性为 SearchApiKey,如果您想查看它,可以在 obj 文件夹下找到它。

您现在可以在您的代码中访问此类及其属性,因此我只需执行以下操作:

var secret = Secrets.SearchApiKey;
Run Code Online (Sandbox Code Playgroud)

最后,要将秘密传递到 AppCenter 上的构建中,您需要添加一个与前面带有 Secret_ 的属性名称匹配的环境变量,因此在我的情况下,它的名称是 Secret_SearchApiKey 并设置它的值。

您可以查看Mobile.BuildTools GitHub 存储库以获取更多信息。

  • 我还在一篇简短的博客文章中写了一些额外的细节 https://sequence7.net/2018/09/21/keeping-secrets-out-of-your-source-code-with-mobile-buildtools-and-应用中心/ (3认同)