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 もいらない。
