前提・実現したいこと
GitHubとVisual Studio App Centerを使用しています。
レポジトリに含めずにクラウドのAPIキー(FirebaseとVisual Studio App Centerのキー)を保管する方法を探しています。
詳細は以下の通りです。
- ソースコードはGitHubのリポジトリで管理しています。ブランチは
fix-key-ci
です。 - APIキーは
.gitignore
にバージョン管理に含めないように設定したC#のソースに隠しました。 - ローカルでのビルドでは当然ながら動きます。
- Visual Studio App Centerでは、当然APIキーを隠したC#のソースがないのでビルドが失敗します。
- dotenv.netを使うことを考えました。
.env
ファイルがiOS上で読めないというエラーが発生してしまいます。
発生している問題・エラーメッセージ
.env
が見つからない、とのことです。
System.IO.FileNotFoundException: An enviroment file with path ".env" does not exist. at dotenv.net.DotEnv.ConfigRunner (System.Boolean throwOnError, System.String filePath, System.Text.Encoding encoding) [0x00020] in <826db58b798e422cba1ad96b2a8aad6b>:0 at dotenv.net.DotEnv.Config (System.Boolean throwOnError, System.String filePath, System.Text.Encoding encoding) [0x00006] in <826db58b798e422cba1ad96b2a8aad6b>:0 at Gribouillage.App.OnStart () [0x00008] in /Users/yusuke/Projects/Gribouillage/Gribouillage.Mobile/Gribouillage/App.xaml.cs:40 at Xamarin.Forms.Application.SendStart () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Application.cs:305 at Xamarin.Forms.Platform.iOS.FormsApplicationDelegate.FinishedLaunching (UIKit.UIApplication uiApplication, Foundation.NSDictionary launchOptions) [0x00036] in <0aa4434e6c8849f1bca03cc1ef0ae57c>:0 at Gribouillage.iOS.AppDelegate.FinishedLaunching (UIKit.UIApplication app, Foundation.NSDictionary options) [0x00018] in /Users/yusuke/Projects/Gribouillage/Gribouillage.Mobile/Gribouillage.iOS/AppDelegate.cs:27 at at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr) at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/UIKit/UIApplication.cs:79 at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0002c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/UIKit/UIApplication.cs:63 at Gribouillage.iOS.Application.Main (System.String[] args) [0x00001] in /Users/yusuke/Projects/Gribouillage/Gribouillage.Mobile/Gribouillage.iOS/Main.cs:17
該当のソースコード
Gribouillage.Mobile/Gribouillage/App.xaml.cs
CSharp
1using Prism; 2using Prism.Ioc; 3using Gribouillage.ViewModels; 4using Gribouillage.Views; 5using Gribouillage.Models; 6using Xamarin.Forms; 7using Xamarin.Forms.Xaml; 8using Prism.Unity; 9using Microsoft.AppCenter; 10using Microsoft.AppCenter.Analytics; 11using Microsoft.AppCenter.Crashes; 12using dotenv.net; 13using System; 14 15[assembly: XamlCompilation(XamlCompilationOptions.Compile)] 16namespace Gribouillage 17{ 18 public partial class App : PrismApplication 19 { 20 public App() : this(null) { } 21 22 public App(IPlatformInitializer initializer) : base(initializer) { } 23 24 protected override async void OnInitialized() 25 { 26 InitializeComponent(); 27 28 await NavigationService.NavigateAsync("NavigationPage/LoginPage"); 29 } 30 31 protected override void OnStart() 32 { 33 base.OnStart(); 34 35 DotEnv.Config(); // ここでエラーが発生します 36 37 AppCenter.Start("ios=" + VisualStudioAppCenterToken.IOsKey + 38 "android="+ VisualStudioAppCenterToken.AndroidKey, 39 typeof(Analytics), typeof(Crashes)); 40 } 41 42 protected override void OnSleep() 43 { 44 base.OnSleep(); 45 } 46 47 protected override void OnResume() 48 { 49 base.OnResume(); 50 } 51 52 protected override void RegisterTypes(IContainerRegistry containerRegistry) 53 { 54 containerRegistry.RegisterForNavigation<NavigationPage>(); 55 containerRegistry.RegisterForNavigation<MainPage>(); 56 containerRegistry.RegisterForNavigation<LoginPage>(); 57 } 58 } 59}
Gribouillage.Mobile/Gribouillage/Models/VisualStudioAppCenterToken.cs
CSharp
1using System; 2using dotenv.net; 3namespace Gribouillage.Models 4{ 5 public static class VisualStudioAppCenterToken 6 { 7 public static string AndroidKey => Environment.GetEnvironmentVariable("VsacAndroidKey"); 8 9 public static string IOsKey => Environment.GetEnvironmentVariable("VsacIosKey"); 10 } 11}
試したこと
.env
ファイルはGribouillage.Mobile/Gribouillage
ディレクトリに埋め込みリソースで配置しました。
補足情報(FW/ツールのバージョンなど)
Xamarin.Forms 3.1.0.583994
とPrism.Unity.Forms 7.0.0.396
、Visual Studio for Mac 7.5.4を使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/06 07:56