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

标签 objective-c macos cocoa

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

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

最佳答案

一句话,不。

再多说几句:我看到有两个方法可以实现这一点:强制每个进程以某种方式 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 插件接口(interface)不是公开的,因此您已经处于不受支持、可能会从您之下更改的区域。

关于objective-c - 全局系统范围的 Cocoa 运行时库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18509886/

相关文章:

ios - 不相互 react 的不同触摸 objective-c

ios - MPmediaitempropertylyrics 返回零

objective-c - 保留计数为 0 的对象不会被释放

android - Mavericks 更新后 SDK 管理器损坏

cocoa - 如何通过编程更改 NSTextView 的文本值来实现撤消/重做?

ios - iOS 中的 TCP 套接字编程。服务器客户端响应

python - 导入错误: No module named app. core.admin.login

cocoa - 如何跟踪 NSMatrix 单元格中的鼠标悬停?

cocoa - 我应该如何从委托(delegate)方法返回 NSError 对象?

objective-c - EXC_BAD_ACCESS 信号