RubyMotion 用の CoreData ラッパー gem である CoreDataQuery を先日から使い始めた。当初は理想の gem に出会ったと思っていたが、使っているうちに気に入らない箇所がちらほら。
自分は Named Scope が使いたいので多少の不満には目を瞑っている。でも人によっては我慢ならない、そもそも CoreData のラッパー gem を使いたくない、Objective-C のライブラリを使いたい、っていう人もいるだろう。そんな人でも ruby-xcdm は使った方が良い。
ruby-xcdm は CoreDataQuery が利用している gem。Ruby で書いた CoreData のスキーマ定義から、xcdatamodeld ファイルを生成する機能はこの ruby-xcdm が担っている。RubyMotion で CoreData を使うためには Xcode Data Modeler で xcdatamodeld ファイルを作成する必要があるけど、それすら Ruby で書けるようになるわけだ。
RubyMotion プロジェクトの Gemfile に下の1行を追加して、bundle install を実行するだけでインストールは完了。
gem 'ruby-xcdm'
Ruby で CoreData のスキーマを定義できる。RubyMotion プロジェクトのルートに schemas ディレクトリを作成し、その下にスキーマファイルを作成。
# coding: utf-8 schema "001" do entity "Entry" do string :title string :content boolean :draft datetime :published_at datetime :created_at datetime :updated_at end end
あとは Rakefile に
task :"build:simulator" => :"shema:build"
と追加すれば OK。これで rake でシミュレータを起動するときに、自動で resources ディレクトリの下に『アプリ名.xcdatamodeld』が出力される。
手動で xcdatamodeld ファイルを出力したい場合は
bundle exec rake schema:build
を実行すればいい。