きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット 2012-09-17 standaloneifyが動くように

Xcode 4の謎実行パラメータに付き合わないために、1.0.4ではRubyCocoa自体はコマンドラインパラメータの解釈をせずにNSApplicationMain()にそのまま渡すようにした。んだけど、その副作用でstandaloneify.rbが動かなくなってしまった。

standaloneify.rbは実行時に必要なライブラリやフレームワークを判断するために、

   YourApp.app/Contents/MacOS/YourApp .../standaloneify.rb --standaloneify

という形式でアプリを実行し、アプリの実行をstandaloneify.rbで乗っ取るという手法をとっていた。これは、(1.0.2以前の)RubyCocoaが内部的に

  rb_main.rb [残りのパラメータ]

という形式でrubyインタプリタのオプションを処理していたためで、ここでパラメータにrubyスクリプトファイルを渡すと実行されるのがrb_main.rbでなくそのファイルになるというウラ技を応用したもの。

で、1.0.4でパラメータをruby側に渡す処理をまるごとやめた(2011-11)ために、standaloneifyが動かなくなっていたのだ。

でまあ対策としては、

  • アプリを実行する以外の方法で依存関係を取得する
  • 1.0.2以前のようにパラメータをrubyに渡せるようにする

のいずれかになる。本来は前者がスマートだし望ましいけれど、rubyスクリプト側でrequireしたやつもあるのでけっこうたいへんそうだ。ということで後者に。

ただし、ただ仕様を戻しただけではXcodeから実行したときにまたエラーになってしまう。ということで、

あとアプリ内にコピーしたライブラリのパーミッションがなぜか0700という問題があったので直した。(r2382)

であとstandaloneify.rbで残ってる作業は、

  • 必ず/System/LibraryのRubyCocoa.frameworkが優先されてしまうので選べるように
  • gemがうまくコピーできないことがあるらしいので、その調査と(必要なら)修正

あたり。

このへんの作業と、テンプレートの導入ツールを用意したら、1.0.5をリリースするつもり。