はじめに
Xamarin.iOS で iPhone アプリなどを作成する際、キーチェーンにパスワードなどの重要情報を保存するのは、Xamarin.Auth という NuGet パッケージを使用すれば割合簡単に行うことができます。
ですが、キーチェーンにアクセスする際には Visual Studio for Mac で設定が必要です。
まずは、その設定から行いましょう。
Entitlements.plist の設定
キーチェーンにアクセスするためには、まず Entitlements.plist で「キーチェーンを有効にする」にチェックを入れる必要があります。
プロビジョニングの設定がうまく行っていれば、キーチェーングループも表示されるはずですが、もし表示されない場合は以下の記事を参考にしてみてください。
そして、プロジェクトのオプションで、「カスタムエンタイトルメント」に「Entitlements.plist 」を設定します。
Xamarin.Auth のインストール
Xamarin.Auth を NuGet でインストールします。
これで準備は終了です。
実際の実装を見ていきましょう。
キーチェーンへの保存と読み込みに必要な定義
キーチェーンへの保存と読み込みでは、共通で以下の名前空間の使用を宣言しておきます。
System.Diagnostics
はデバッグ用なので本番ソースコードでは削除した方がよいですが。
using System.Diagnostics; using System.Collections.Generic; using System.Linq;
キーチェーンにパスワードを保存する
キーチェーンにパスワードを保存する方法は以下の通りです。Xamarin.Auth のおかげですが簡単ですね。
//パスワードをキーチェーンに保存する var prop = new Dictionary<string, string>(); prop["password"] = "password"; var account = new Xamarin.Auth.Account("userName", prop); var store = Xamarin.Auth.AccountStore.Create(); store.Save(account, "serviceId");
キーチェーンからパスワード読み込む
キーチェーンからパスワードを読み込む方法は以下の通りです。デバッグで取得したパスワードを出力しています。
//キーチェーンからパスワードを取り出す var store = Xamarin.Auth.AccountStore.Create(); var account = store.FindAccountsForService("serviceId") .SingleOrDefault(); var password = account.Properties["password"]; Debug.WriteLine(password);
おわりに
設定が正しくできていれば、Xamarin.Auth のおかげでかなり簡単にキーチェーンにパスワードなどの重要情報を保存できますね。
パスワードなどは暗号化したとしても暗号キーをどこに持つかという問題があります。
それをキーチェーンは解決してくれる訳ですね。