这可能是一个失败的原因,但我会问,因为我真的只是好奇......
我们有一个客户想要为 OS X 创建一个替代的消息应用程序。他们基本上想要使用相同的帐户、聊天历史记录和所有内容,但为内置消息提供完全不同的 UI(对于某些残障人士) 。应用程序。鉴于 Messages.app 中的主要服务 iMessage 完全没有文档记录,因此创建自己的消息传递应用程序不会成功,因此使用 3rd 方代码支持它几乎是不可能的。
经过初步研究,很明显,有据可查的 AppleScript 方法将提供一个可行但粗略的解决方案,缺少原始应用程序的许多功能(例如打字时的指示等),更不用说它需要保留原始应用程序正在运行的消息应用程序会分散用户的注意力。
那时我们开始深入挖掘并找到了IMCore.framework
. IMCore
基本上是 Messages.app 用来与各种服务进行通信的工具,它的引擎是imagent
,它看起来像是管理数据,实际上是与各种 IM 服务器进行通信。IMCore
是一个私有框架,使用起来显然有些风险(并且会自动将他们的应用程序从 App Store 中排除),但我们的假设是,使用 OS X,我们仍然应该能够实现这一点并将应用程序分发到 App Store 之外,而无需困难重重。
我们开始尝试IMCore
(同时对 Messages.app 进行逆向工程以了解其使用方式),并取得了一些进展。我们能够成功连接到 imagent 进程并执行几个配置操作,但随后发现数据模型基本上是空的——我们无法看到任何用户的数据或与任何 IM 服务进行通信,即使我们'在用户的安全上下文中重新运行。
然后我们注意到 Messages.app 有一些非常奇怪的未记录权利,例如com.apple.private.imcore.imdpersistence.database-access
和com.apple.imagent
。在这一点上,我们假设这些权利是我们为了与imagent
. 我们已经尝试将这些权利添加到我们自己的应用程序中,并且能够成功地构建和共同设计它,但是当程序启动时,它在启动时崩溃并显示系统消息EXC_CRASH (Code Signature Invalid)
(Xcode 说Terminated due to code signing error
)。
我们可怕的假设是,Apple 锁定了他们的私人权利,因此系统不会接受使用它们的二进制文件,除非它是由 Apple 直接签名的,但这显然是一个理论。另一个问题是,如何imagent
知道我们的二进制文件是否具有这些权利?我们不能以某种方式欺骗这些权利吗?
正如我所说,感觉像是一个失败的事业,但谁知道呢。我猜那些在 iOS 上做过硬核越狱工作的人可能会有一两个想法——有人吗?