きりかノート 3冊め

おあそびプログラミング

Interface Builderにカスタムクラスやアウトレットが表示されない

@casualconcさんからmentionで教えてもらった。Xcode 5.0.2の環境で、ruby側で定義したクラスやアウトレットがInterface Builderで表示されないとのこと。

ええとまあ、正直よく今まで動いてたなあ…って感じではあるのですが、内部的な仕組みとしてはこんなふうになってた。と思う。(このへん他の人がずっと担当してたからよーわからんのですよ)

  1. ユーザが、rubyコードを編集して保存する。
  2. Xcodeは編集されたコードについて、rb_nibtool.rbを呼び出す。
  3. rb_nibtool.rbはrubyコードを解析して、その結果をnibファイルのクラス定義に反映する。

"outlet rb_nibtool"あたりで検索してみると、MacRubyXcode 4.6.2で問題があったぽいissueがみつかった。MacRubyも同じような仕組みだったのでこのあたりから問題起きてたのかも。

で、課題は2つあって、

  • Xcodeからrb_nibtool.rbが呼び出されない。
  • rb_nibtool.rbがxib形式に非対応。

になる。前者はXcodeの動作なのでこっちから手は出せない。ただXcodeプラグインを自作することで対処できるかも。後者はxibのファイル内容を調べてそれに対応する、て感じでしょうか。

ただ、これって両者とも将来的な不安要素が満載(Xcodeプラグイン仕様やxibの内部形式の変更に追随する必要がある)なので、RubyMotion用のyury/ibのようにスタブのObjective-Cコードを生成してそれをXcodeに食わせる、という手法のほうがよさそう。