如何将Cocoa应用程序分解为可重用的功能部件?

Ste*_*eAp 1 macos service soa cocoa objective-c

假设我想将应用程序分解为功能部分.例如,客户数据管理部分,文本格式化部分,发票部分.我更喜欢这样的部分在某种程度上简单但完整的应用程序.

此外,假设我想设计零件,可以在新的或其他应用中重复使用.例如,客户数据部分可以在CRM解决方案中使用,但也可以在发票应用程序中使用.

我正在寻找像复合文档 架构这样的东西.

问题...

  • 我应该使用哪种Apple/Cocoa技术来创建这样的功能部件?
  • 是否可以将数据存储和UI包含在功能部分中?
  • 如果是,如何在另一个应用程序中使用一个应用程序/部件的UI?
  • Cocoa是否存在此类基础架构/框架/技术?

可能更简单的问题......

假设我有两个应用程序AB.为某些相关数据B 提供编辑器B.假设B编辑器完全包含在NSView子类中.因此,编辑控件完全包含在子类中.

  • 我可以以某种方式让B的NSView的子类实时出现在A的窗口中.

我的目标是不是住嵌入任意的东西BA.可以通过仪器AB某种通用协议进行检测.

出于兴趣...

我知道Cocoa的分布式对象技术,它允许应用程序相互通信,即使它们在不同的计算节点上运行.但由于DO只提供传输机制,因此它不是我的高级分解问题的解决方案.

虽然应用程序可以注册要从其他应用程序调用的URL方案,但它们不能提供足够的功能 - 因为URL是从调用者到被调用者的一种方式.看到这里这里.

Apple提供了此Plug-In Architectures文档 - 但重点关注一个应用程序自己的插件.此外,Apple的CFPlugin文档也可能是有意义的(仍然有效吗?).

Matt Gallagher简要概述了在Cocoa中聆听,观察和通知的五种方法中的各种选项.除了通过NSDistributedNotificationCenter发送通知,所有选项都是应用程序本地的.因此,Apple文档通知编程主题是有意义的,但更多的是作为al ow-level对象传输机制.

我很确定,几年前,一群软件开发商/公司试图在Cocoa级别实现某种动态数据交换.他们的框架并非来自Apple.不幸的是,我不记得他们的框架名称.

如何在OS X上的现有NSView中打开新应用程序?

被影响...

我的问题受到Android SDK 意图影响.引文:

'Intent提供了一种工具,用于在不同应用程序中的代码之间执行延迟运行时绑定.它最重要的用途是发起活动,它可以被认为是活动之间的粘合剂.它基本上是一个被动数据结构,包含要执行的动作的抽象描述.

非常松散的相关......

sta*_*atz 5

如果您使用的是OSX Lion 10.7,则应尝试查看XPC服务.您可以在同一个Xcode项目中拥有不同的XPC服务和主应用程序可执行文件.我们的想法是模块化您的设计,并为每项服务提供自己的系统权限.您还应该能够在项目之间共享这些XPC服务.应用程序通过Grand Central Dispatch通过进程间通信与XPC服务进行通信.

事实上,如果您要创建一个您打算在App Store中销售的应用程序,Apple会鼓励您使用XPC进行权限分离.有一个Apple沙箱教程可以帮助您开始使用XPC的示例项目,如果您从一开始就遵循,那么您将获得一个很好的示例.

https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW2

当然,权限分离并不是分解应用程序以使用这些服务的唯一原因.我认为它非常适合你想要实现的目标.我认为可以将UI放入服务中,但从未尝试过.我想,无论用户界面如何,在服务和应用程序之间来回交谈应该是一样的.

创建XPC服务 https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html