【问题标题】:How can I use set Environment Variables in Xamarin.Forms from App Center如何在 App Center 的 Xamarin.Forms 中使用设置环境变量
【发布时间】:2018-07-31 20:16:15
【问题描述】:

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

var secret= "secretvaluegoeshere";

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

【问题讨论】:

    标签: c# xamarin xamarin.forms visual-studio-app-center


    【解决方案1】:

    事实证明,按照以下步骤操作非常简单:

    在您的项目中安装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 存储库以获取更多信息。

    【讨论】:

    • 我还在一篇简短的博客文章中写了这篇文章,其中包含一些额外的细节sequence7.net/2018/09/21/…
    • 嗨亚当,但我们需要在我们的解决方案中添加这个文件,否则它会默认添加?
    • 你指的是哪个文件@soydachi? Secrets.cs 文件是自动生成的,您需要创建 secrets.json 文件
    • @Ishyc 你总是可以通过反编译获取信息。像 Proguard 这样的工具使这变得更加困难,但最终移动应用程序无法被信任。
    • AppCenter 中指定的插入机密工作已为您完成
    【解决方案2】:

    您可以通过预构建脚本将其注入您的项目(直接在代码中替换一些占位符,创建一些资源文件等),然后在运行时从那里读取它。

    【讨论】:

    • 您能否提供一些更具体的细节,说明我将如何使用 Xamarin 和 App Center Ivan 做到这一点?
    • 我的意思是没有针对 Xamarin 的特定方法。超过这个 var 将仅在构建时可用,但在运行时不可用。因此,如果您想在运行时访问它,您应该将其保存(通过 bash 脚本中的预构建步骤)以放置在运行时可访问的位置。最简单的方法 - 将其直接写入代码(一些 *.cs 文件),然后将其编译到您的应用程序中。例如,您可以通过正则表达式执行此操作。在此常量中保留一些占位符以简化搜索。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2016-02-04
    • 1970-01-01
    • 2019-01-27
    • 2015-10-24
    • 2012-11-22
    相关资源
    最近更新 更多