Yet another InputManager hole

March 25th, 2007

DYLDINSERTLIBRARIES で読み込まれて ~/Library/InputManagers2 に置いた SafariStand と Creammonkey を読み込める dylib が完成した。InputManager の口がふさがれても DYLDINSERTLIBRARIES が生きていれば、setenv して exec するのをどこにかますかって問題だけですみそうだ。

sel_getName に hook しなくとも、Objective-C でクラスをつくって、クラスメソッドの load を定義しておけばちゃんと呼ばれた。そこから直で NSBundle の principalClass を alloc, init すると NSAutoreleasePool まわりで怒られるので、NSApplicationDidFinishLaunchingNotification をもらって、そこで NSBundle を読み込んでいる。これでアプリケーションのメインループ(メインスレッドかも)の中で実行されてるはず。

まぁ Apple が思い直してくれるか、考慮済みでべつの口を用意してくれるのが一番良いですけど。あるいはそもそもデマとか。もし DYLDINSERTLIBRARIES もふさがれたりすると深刻。

h3. 追記

関数上書きが必要ないので DYLDFORCEFLAT_NAMESPACE もいらない。