全局系统范围的Cocoa运行时库

时间:2013-08-29 11:35:47

标签: objective-c macos cocoa

是否可以创建一个系统范围的运行时库,使所有系统运行的进程都可以使用某组运行时类?这些类应该是可用的,因为从任何Cocoa进程调用类名的NSClassFromString将返回一个有效的类。

注意:我无法使用NSBundle加载库,因为我无法访问某些进程的代码。更具体地说,我正在尝试为Apple的“Interface Builder Cocoa Touch Tool”流程提供一些类。有关我需要的详细信息,请参阅this post

1 个答案:

答案 0 :(得分:1)

总之,没有。

再说几句:我看到两个向量来实现这一点:强制每个进程以某种方式对你的框架进行dyld,或修补现有的系统库,每个Cocoa进程都会加载它来包含你的类。除了“只在你的机器上”之外,这些解决方案都不会有用。

如果你想要一个“只在你的机器上”的解决方案,那么更容易的是编写一个脚本,诱导GDB / LLDB连接到进程,导致你的库被加载,然后分离。这将比上述任何一种假设方法容易得多。这样的过程可能如下所示:

your-machine:~ you$ lldb
(lldb) attach Finder
Process 331 stopped
Executable module set to "/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder".
Architecture set to: x86_64-apple-macosx.
(lldb) expr (char)[[NSBundle bundleWithPath:@"/Path/To/Your/Framework.framework"] load]
(char) $0 = '\x01'
(lldb) detach
Detaching from process 331
Process 331 detached
(lldb) quit
your-machine:~ you$ 

正如您必须已经知道的那样,Xcode插件界面不公开,因此您已经处于不受支持的状态,可能会在此处更改。