きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット 2015-09-19

10.11GM上で10.10と同じようにテスト通る(既知の1F)まで持ってきた。

作業はビルドまわりとテストスクリプト側の修正でコアの方は手をいれてない。

  • 10.11ではRubyCocoa.frameworkは@excecutable_pathなしをデフォルトに。 (ceb7962)
  • 上述のDYLD_環境変数の件に対応。(c0bd8ae, 095de97)
  • CoreFoundationのretain countのテストが通らないのを修正。てか元のテストの意図がびみょーだったので消した。(56647a4)
  • KeyValueObvervingのテストで観測対象の値を初期化するように。一部のケースでKVO発火時に現在の値を取得するようになったぽい。実際には@value1だけ初期値が必要なんだけどそれも気持ち悪いのでひととおり入れてくようにした。(20133e6)

最初の@excecutable_pathは、OS添付のrubyコマンドから使うときに問題起きないようにするために変更した。

`ruby`から実行するとき、require 'osx/cocoa'でrubycocoa.bundleが読み込まれ、そこからリンクしているRubyCocoa.frameworkがロードされるという順になるのだけれど、このときバイナリに記録されているパスが@excecutable_pathを含んでいると"unsafe use of @executable_path"とのメッセージが表示されロードが中止されてしまう。ということで、/Library/Frameworksがデフォルトになるようにした。

その影響で、今後リリースするだろうパッケージからインストールしたRubyCocoa.frameworkをアプリケーションに同梱するときは単に.frameworkを.appにほうりこむだけではダメで、install_name_toolでライブラリのパスを変更する必要がある。standaloneify.rbを使っている場合はスクリプト側で対処する予定なので、従来どおり使えば問題ない。

現在の構成もわかりづらいしこういう問題もあるので、将来的には

  • rubyコマンドから使う場合はrubycocoa.bundleだけをロードする。
  • .appからはRubyCocoa.frameworkをロードする。

というように住み分けするようにしたほうがよいと考えている。前者だけgemで配布できるようになるし。