きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット 2013-10-27

リリースしたら手を入れようと思ってたとこなどいろいろぶっこんだ。コミットの単位小さめにしてるのもあるけど、記憶にある限りでは自分の1日のコミット数としては最大かも。

他にもignore整理したりコードスタイル直したりもしたけど、それはあんま意味ないので省略。

ReadMeを移動してmarkdownのテキストを設置

ReadMeは英語と日本語のHTMLファイルが置いてあったんだけど、直すのが大変なのとGithub上で表示されないのが悲しかったのでプレーンテキスト(markdown)ので差し替えた。w3m -dump大活躍。

今は自分のgithubのミラーリポジトリのほうにもちゃんとReadMeが表示されるようになった。

ruby-2.0対応用のコードを投入

9月あたりから作業してた、ruby-2.0用のコードをマージ。ヘッダファイルや関数・シンボルの非互換を調整してとりあえずコンパイルまで通るようにしたもの。#ifdef HAVE_RUBY_RUBY_Hがいっぱい入った。

まだ全然つかえない。テスト流すとごらんのありさま。

   .../osx/objc/oc_wrapper.rb:50:in `ocm_send': Can't get Objective-C method
   signature for selector '_:ocid::' of receiver #<NSString "<RBObject: 0x7f
   96aba2c0a0>"> (OSX::OCMessageSendException)
       from /.../RubyCocoa.framework/Resources/ruby/osx/objc/oc_wrapper.rb:5
   0:in `method_missing'

require "osx/cocoa"さえ実行できない。どうもクラスがRBObjectになってるみたいなんだけど理由がわからん。

古いシステム用(10.5以前)のコードを整理

10.4 Tigerと10.5 Leopardをサポート対象外にする決意をしたので、Xcode 2.x以前用のコードやリソースをばっさり削った。ちょっと気持ちが軽くなった気がする。。

standaloneify.rbがMavericksで動くように

standaloneify.rbがruby-2.0でsyntax errorになるのと、rubygemsの2.1でspecfileのパスが取れてないとこの修正。前者はブロックパラメータで既存の変数に値をいれてるっていう、1.8で使えたけど今はダメっていうやつ。後者は単にAPIが変わったぽいのでてきとうに対応を追加。

   opts.on(...) {|config.force|} # <= syntax error with ruby-2.0

Modules対応

先日の勉強会の発表で調べたときに、フレームワークのModules対応は簡単そうだったのでやってみた。

 @import RubyCocoa;
 @import RubyCocoa.RBRuntime;

とかで今までの#importの代用になる。main.mはテンプレートで対応してるとこでユーザはいじらないところだから、そんなにうれしくもないですね!

ちなみにMavericksの/System/LibraryのRubyCocoa.frameworkもmodule.mapが置いてあるので対応してるのだ。フィードバックしてくれよう>あっぷる…

作業的にはmodule.mapを入れるだけなんだけど、その手前の整備にけっこう手間取った感じ。

ふつーのフレームワークだとは、そのフレームワークが提供するクラスをひたすら#importするのが並んでる感じなんだけど、RubyCocoaはちがってて謎のクラスが定義されてる。

クラスメソッドでRubyCocoaの初期化やアプリケーションの起動ができるぽいんだけど、RBRuntime.hのランタイム関数使えば同等のことが問題なくできる。このクラスは廃止してふつーに#importが並んでるファイルに変更した。

サンプルでいくつか使ってるのがあるので、これらは直さなくちゃ。