本サイトからスピンオフした姉妹サイトです。Xamarin2014年12月17日iOSのNSUserDefaultsやAndroidのSharedPreferenceではなく.NETのIsolatedStorageを使って、Xamarin.iOS/Androidでアプリの軽量データを保存する方法を解説する。→アプリケーションの設定情報など、軽量なデータを保存する方法は、iOSではNSUserDefaults、AndroidではSharedPreferenceが一般的に使用される。今回は、これらをXamarin.iOS/Androidで使用する方法、また同様の機能を提供する共通なAPIについて解説する。1iOSアプリでの設定ファイルの保存Xamarin.iOSではNSUserDefaultsクラスを使用する。NSUserDefaultsを用いたデータの保存は、以下のようになる。保存されたデータを読み出すコードは、以下のようになる。prefs.IntForKey("person_age");Xamarin.iOSアプリでNSUserDefaultsを使ったデータの取得このようにして保存したデータは、アプリケーションのデータ領域に格納される。iOSシミュレーターでは、以下のようなパスになる。実際にその場所にあるファイルをテキストエディターで見てみると、確かに保存されていることが確認できる。/Users/<Macユーザー名>/Library/Developer/CoreSimulator/Devices/<シミュレーターのGUID>/data/Containers/Data/Application/<アプリのGUID>/Library/Preferences2Androidアプリでの設定ファイルの保存Xamarin.AndroidではSharedPreferenceクラスを使用する。SharedPreferenceを用いたデータの保存は、以下のようになる。※上記のcontextは、Contextクラスのオブジェクトである。ActivityクラスはこのContextクラスのサブクラスになっているので、ActivityクラスのOnCreateメソッド内などでは、context.の部分はthis.もしくは省略して記述できる。保存されたデータを読み出すコードは、以下のようになる。0);Xamarin.AndroidアプリでSharedPreferenceを使ったデータの取得Androidでの設定情報の保存先は、以下の場所だ。エミュレーターでは、下記にアクセスできるので、ファイルを開いてみると、確かに保存されていることが確認できる。/data/data/<アプリのパッケージ名>/shared_prefs/pref.xml3IsolatedStorageによるiOS/Androidで共通な設定ファイルの保存IsolatedStorageFileクラス(System.IO.IsolatedStorage名前空間)を使うと、12で解説した設定ファイルの保存処理を共通化できる。Frameworkで古くから実装されている機能だ。.NETにおける分離ストレージについては、以下が詳しい。@IT「分離ストレージ」は、Xamarin.iOS/Androidでは「アプリケーション固有の」という意味で実装されているようで、IsolatedStorageFileは、NSUserDefaultsやSharedPreferenceと同じような使い方ができる。IsolatedStorageFileだけでは、12のようなKey-Value型の形式を提供しないので、ここではJSONを使用することにする。Xamarin.iOS/AndroidでJSONを扱うには?(Json.NET使用)」で解説したので、参照してほしい。以下は、Json.NETパッケージが導入済みとして解説する。データクラスの作成まず、設定ファイルの項目を示すデータクラスPersonを以下のように準備する。PersonAge{get;set;}}データクラスの作成iOS/Androidアプリでの利用例IsolatedStorageFileを使ったアプリでのコード例は以下の通りだ。iOSもAndroidでも共通のコードだ。//<-4}Xamarin.iOS/AndroidアプリでIsolatedStorageを使ったデータの保存1は、Personデータクラスを生成し、JSON文字列に変換する処理だ。2で、分離ストレージを取得し、3で分離ストレージ内にファイルpref.jsonを作成する処理だ。4で、JSON文字列をファイルに書き出している。反対に、設定ファイルから読み出すコードは以下のようになる。person.Age.ToString());}Xamarin.iOS/AndroidアプリでIsolatedStorageを使ったデータの取得IsolatedStorageFileで保存したファイルは、iOSの場合:Application/<アプリのGUID>/Documents/.config/.isolated-storageAndroidの場合:/data/data/<アプリのパッケージ名>/files/.config/.isolated-storageに、それぞれ保存される。Taro","Age":29}という、PersonクラスのオブジェクトがJSON化された文字列として確認できる。まとめXamarin.iOS/Androidでの設定ファイルの保存は、ネイティブAPI(NSUserDefaultsやSharedPreference)でも可能だが、System.IO.IsolatedStorage.IsolatedStorageFileで共通化できる。Xamarin.iOS/Androidでソースコードを共有するには?(リンクファイル編)」参照)を使用することになる。最後に注意点として、今回解説したいずれの方法も、秘匿情報(パスワードや秘密鍵など)を保存することは推奨されていない。データが格納されるのはそのアプリにしかアクセスできない領域ではあるものの、データ自体が暗号化されているわけではないので、例えば、端末のROOT権限を所有している場合には、簡単に内容を参照することができてしまう。アプリの設定値など、漏れても害のない情報にとどめるべきだろう。※以下では、本稿の前後を合わせて5回分(第28回~第32回)のみ表示しています。INDEX]を参照してください。「Json.NET」というライブラリを使う方法を説明する。Xamarin.iOS/Androidでアプリのデータディレクトリを取得するには?アプリ固有のデータ領域のディレクトリパスを取得するため方法のうち、iOS/Androidで共通のコードの書き方を説明する。Xamarin.iOS/Androidでアプリの設定情報を保存するには?iOSのNSUserDefaultsやAndroidのSharedPreferenceではなく.NETのIsolatedStorageを使って、Xamarin.iOS/Androidでアプリの軽量データを保存する方法を解説する。Xamarin.AndroidでApplicationクラスを拡張するには?Applicationクラスを拡張すると、アプリケーションイベントの発生時に独自の処理を実行したり、アプリケーションオブジェクトに機能を追加したりできる。その基本的な実装方法を解説する。Xamarin.iOSでZipファイルを使用するには?(ZipFileクラス編)iOSアプリ開発標準のZipArchiveライブラリではなく、.NET標準のZipFileクラス編を使って、ZIPファイルの圧縮・展開を行う方法を解説する。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。