依存ファイルの自動解決に失敗したときは motion-require

RubyMotion は Smart File Dependencies 機能があるので、依存ファイルを自動で解決してくれる。 でも、たま~に解決できなくて定数未定義エラーに遭遇するときがある。

そんなときは Rakefile で files_dependencies を記述すればいいんだけど、 依存しているファイルの指定は、できれば使っている箇所のすぐそばに書きたいよね。

そこで motion-require の出番。

インストールは Gemfile に

gem 'motion-require'

を書いて bundle install すればおk。

motion_require メソッドを使って、 Ruby の require みたいに、依存しているファイルを記述できるようになる。

motion_require "bases/base_list_view_controller"

class EntryListViewController < BaseListViewController
end

という風に依存ファイルを指定し、Rakefile

# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template.ios'

begin
  require 'bundler'
  Bundler.require
rescue LoadError
end

# これを追加
Motion::Require.all

Motion::Project::App.setup do |app|
  # ...
end

と書いておけば、ビルド時に motion_require をもとに依存関係をかき集め、 プロジェクトに設定してくれる。

ソースコードを読めば分かるけど、motion_require はただのマークであって、 実際にファイルを読み込んだりはしない。

通常は RubyMotion の Smart File Dependencies にまかせておいて、 失敗する箇所にだけ motion_require を使うのがお勧めかな。