nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

Xamarin.FormsでSQLiteのDBを埋め込んでアプリを配布する

teratailで3日かけて問答して回答し、サンプルコードまで書いたのでせっかくだからこっちでも共有しようかと。

teratail.com

例えば、アプリケーションで利用する大量のマスターデータを配布時にアプリケーションに添付して配布したい、みたいな時に使えます。
ただ、マスターの更新=アプリの更新になるの為、ケースによっては利用者に鬱陶しい思いをさせる可能性があります。
ネットワークからのダウンロードと組み合わせるとか、Azureのオフライン同期みたいのを使うとか、それらを組み合わせるとか検討が必要です。
用法容量を守ってご利用ください。

さて、実現するために幾つかの技術を組み合わせると比較的簡単に利用可能です。

具体的なコードは以下に公開しています。

github.com

せっかちな人はXFEmbeddSQLiteFile.slnを開いてApp.csクラスあたりを見てください。

SQLiteのDBファイルを「埋め込みリソース」としてプロジェクトへ登録する

とりあえず、何らかの方法でSQLiteのDBファイルを作成します。
作成したら、対象のファイルをPCLプロジェクトへ登録し、プロパティの「ビルドアクション」を「埋め込みリソース」へ変更しましょう。

f:id:nuitsjp:20161118082006p:plain

プロジェクトに必要なパッケージを追加する

今回は標準のXamarin.Formsに加えて以下を利用します。

コードを書こう!

以下のようなコードになります。
必要なコメントはコードに埋め込んでありますが、概要だけ説明しておきます。

  1. アプケーションの起動時にSQLiteファイルを保管して運用するパスを調べます
  2. ファイルが存在しなかったら初回起動と判断し空ファイルを作成します
  3. 作成した空ファイルに対して、埋め込んだリソースファイルの内容をコピーします
  4. あとは、初回も2回目以降も同じで利用するのみです

分かってしまえば簡単なものですね。

Use embedded sqlite database file in Xamarin.Forms

以上です。
それではまた!