CoreDataQuery は気に入らなくても ruby-xcdm は使ったほうがいい

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

を実行すればいい。