0

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

注意:我无法使用加载库,NSBundle因为我无权访问某些进程的代码。更具体地说,我试图让一些类可用于 Apple 的“Interface Builder Cocoa Touch Tool”过程。有关我为什么需要这个的详细信息,请参阅这篇文章

4

1 回答 1

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 插件接口是不公开的,因此您已经处于不受支持的、可能从您那里更改的领域。

于 2013-08-29T11:40:32.183 回答