Tom*_*ing 7 architecture plugins cocoa objective-c
我可能正在为Cocoa应用程序编写一个插件系统(Mac,而不是iPhone).
一种常见的方法是将每个插件作为捆绑包,然后将捆绑包注入主应用程序.我关注这样做的安全隐患,因为bundle可以完全访问Objective-C运行时.我特别关注一个插件可以访问处理注册和序列密钥的代码.
我们正在考虑的另一个插件系统基于分布式通知.基本上,每个插件都是一个单独的进程,它们只能通过分布式通知进行通信.
有没有办法安全地加载捆绑包(例如沙盒)?如果没有,您是否发现使用分布式通知有任何问题?还有其他任何插件架构会更好吗?
是的,OS X在每个进程级别上提供沙箱支持。我所知道的唯一开源第三方客户端是Chrome。您还可以研究包装器,例如Native Client。
也就是说,出于安全原因尝试沙箱插件确实没有意义,除非您通过网络(即网络浏览器)加载不受信任的插件或内容。如果有人想在本地破解您的应用程序,他们只需使用调试器、DTrace 等即可。
您在应用程序和插件进程之间使用的 IPC 机制实际上取决于您正在进行的通信类型。对于大多数用途来说,机器间分布式对象(我认为这就是您想要编写的内容)当然不是一个坏选择,但您不想通过它发送视频。您可以查看CoreIPC,正在开发中的WebKit2使用它;它通过马赫端口工作。