Xcode のObject Libraryペインにカスタム オブジェクトを追加するために、独自のカスタム Xcode .ideplugin を開発しました。IBMyCustomObject という名前のクラスに基づいたカスタム オブジェクト テンプレートがあり、これには、MyCustomObject という名前のクラスの runtimeClassName があります (ランタイム クラス名は、Xib ファイルが読み込まれるときに実行時にインスタンス化されるクラスの名前です)。 .
たくさんの研究の後、私はこれをうまく機能させることができました。カスタム オブジェクトを [オブジェクト ライブラリ] ペインから Xib ファイルに通常どおりドラッグ アンド ドロップし、インスペクタ ペインでオブジェクト プロパティを設定すると、他のすべてがうまく機能します。唯一の問題はコンパイル時にibtool
発生し、Xib ファイルのコンパイル時に Xcode で次のエラーが表示されます。
Exception name: NSInvalidArgumentException
Exception reason: Could not find class named MyCustomObject
完全な例外バックトレース ログは次のとおりです。
Exception backtrace:
0. CoreFoundation 0x0226d6d8 __exceptionPreprocess
1. libobjc.A.dylib 0x01fe98b6 objc_exception_throw
2. CoreFoundation 0x022fd721 -[NSException raise]
3. ??? 0x000116b8 [IBCocoaTouchToolObjectPackage initWithRequest:]
4. ??? 0x00010597 [IBCocoaTouchTool .cxx_destruct]
5. ??? 0x0000b63d [IBCocoaTouchTool compileNibForRequest:minimumCompatibility:layoutInfo:]
6. IBFoundation 0x00362c51 __72-[IBMessageReceiveChannel deliverMessage:toTarget:withArguments:result:]_block_invoke
7. IBFoundation 0x00362996 -[IBMessageReceiveChannel deliverMessage:toTarget:withArguments:result:]
8. IBFoundation 0x00362673 __80-[IBMessageReceiveChannel runBlockingReceiveLoopNotifyingQueue:notifyingTarget:]_block_invoke
9. libdispatch.dylib 0x029c2444 _dispatch_barrier_sync_f_slow_invoke
10. libdispatch.dylib 0x029d34b0 _dispatch_client_callout
11. libdispatch.dylib 0x029c1766 _dispatch_main_queue_callback_4CF
12. CoreFoundation 0x022d2b6e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
13. CoreFoundation 0x022137eb __CFRunLoopRun
14. CoreFoundation 0x02212bf3 CFRunLoopRunSpecific
15. CoreFoundation 0x02212a0b CFRunLoopRunInMode
16. Foundation 0x01c1fe55 -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
17. ??? 0x0003ac67 [IBAbstractCocoaTouchTool startServingReceiveChannel:]
18. ??? 0x0003ad62 [IBAbstractCocoaTouchTool startServingSocket:]
19. ??? 0x0003aec7 [IBAbstractCocoaTouchTool protocolCapabilities]
20. ??? 0x0001053e [IBCocoaTouchTool .cxx_destruct]
21. libdyld.dylib 0x9313d725 start
Exception info:{
}
Xcode (より具体的には ibtool) に MyCustomObject クラスを認識させて、コンパイル時に見つけられるようにする方法についてのアイデアはありますか? フレームワークに MyCustomObject を配置し、実行時にバンドルをロードするなど、多くのことを試しましたが、何も機能しませんでした。IBMyCustomObject の runtimeClassName を MyCustomObject の代わりに NSMutableDictionary (またはその他の Foundation または UIKit クラス) に置き換えると、すべてが完全に機能しますが、代わりに独自の MyCustomObject クラスを使用する必要があります。
PS: 同様のプラグインの開発に関心のあるすべての人のために、すべてを理解したら、sensiblecocoa.com (プラグインを使用するフレームワーク)の詳細なブログ投稿にすべての調査結果を掲載します。