基本的には、CoreDataをアプリのデータとして使っています。
ぼくは、MagicalRecordの力を借りることが多いです。
アプリの内容によっては、初期データを入れておくほうが良い場合もあります。
そういったときには、CoreDataのデータをSimulatorのディレクトリから抽出してアプリのバンドルに含める手法が一般的です。
ぼくは、基本的にはSQLでCoreDataをセットアップしていますので、その条件に沿った方法を共有したいと思います。
どこにSQLファイルがあるのかですが、これはXcodeのバージョンによって異なると思います。
Xcodeでは、~/Library/Developer/CoreSimulator/Devices/
の中に、01AXXXX-XXXA-4XXX-BXXX-02AXXXXX
というような名前でシミュレータごとに作られるディレクトリがいくつか入っています。
その中で、既にアプリを入れて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ディレクトリなどにコピーするなりして読み込めば初期データとして使えるはずです。
初期データを起動時に書き込むのは、データ量が少なければ問題ないですし、データをすぐ使うわけでもなければバックグラウンドで実行しても良いと思います。
でも、こうやって最初にデータを準備している方が動作も快適ですし、安心できるのでぼくはオススメです。