CoreDataのSQLファイルを、初期データとして突っ込んでおく方法。

基本的には、CoreDataをアプリのデータとして使っています。
ぼくは、MagicalRecordの力を借りることが多いです。

アプリの内容によっては、初期データを入れておくほうが良い場合もあります。
そういったときには、CoreDataのデータをSimulatorのディレクトリから抽出してアプリのバンドルに含める手法が一般的です。

ぼくは、基本的にはSQLでCoreDataをセットアップしていますので、その条件に沿った方法を共有したいと思います。

どこにSQLファイルがあるのかですが、これはXcodeのバージョンによって異なると思います。
Xcodeでは、~/Library/Developer/CoreSimulator/Devices/の中に、01AXXXX-XXXA-4XXX-BXXX-02AXXXXXというような名前でシミュレータごとに作られるディレクトリがいくつか入っています。

Coredata sql

その中で、既にアプリを入れてCoreDataの初期データを登録済みのシミュレータを見つけます。
そしてさらに/data/Containers/Data/Application/まで辿って行き、該当のアプリのディレクトリを見つけます。これは、最終の変更の時間などから推測すれば良いと思います。

上記のように一から辿っていってもいいですし、シミュレータで動作するアプリで、以下の様なコードから直接ディレクトリのパスを得ることもできます。

println(NSFileManager.defaultManager().URLForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask, appropriateForURL: nil, create: true, error: nil))

とか、

println(NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first)

といった具合です。

こうして得たパスの中からSQLのファイルを見つけ出しましょう。恐らくDocumentsディレクトリにある
のではないかと思いますが、コードによって変わるため適当な場所を探しましょう。

ちなみに、AppGroupでのデータの共有スペースを使っている場合は、シミュレータのディレクトリまでのパス/data/Containers/Shared/AppGroup/の中にあるディレクトリの中から共有スペースを見つけましょう。

SQLのファイルは、CoreDataの設定にもよるのですがsqlの拡張子のもの以外にsql-shmとsql-walという2つのファイルの計3つのファイルを抽出します。

その抽出したファイルを、アプリのバンドルに含めて実行時にまずDocumentsディレクトリなどにコピーするなりして読み込めば初期データとして使えるはずです。

初期データを起動時に書き込むのは、データ量が少なければ問題ないですし、データをすぐ使うわけでもなければバックグラウンドで実行しても良いと思います。
でも、こうやって最初にデータを準備している方が動作も快適ですし、安心できるのでぼくはオススメです。

これからも更新を続けていきますので、Feedlyへの登録をお願いします!

follow us in feedly

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です