这个可能是无法解决的问题,但我只是好奇想问一下...
我们有一个客户希望为OS X创建一个替代的消息应用程序。他们基本上想使用相同的账户、聊天记录以及其他内容,但是针对内置Messages应用程序提供完全不同的用户界面(适用于某些残疾人士)。由于主要服务iMessage在Messages.app中没有文档说明,因此使用第三方代码支持该服务几乎是不可能的,所以创建自己的消息应用程序也不可行。
在初步研究后,很明显充分记录的AppleScript方法可以提供可行但粗糙的解决方案,丢失了原始应用程序的许多功能(例如输入指示等),更何况它需要保持原始Messages应用程序运行,这会对用户造成干扰。
在那时,我们开始深入挖掘,发现 IMCore.framework
。 IMCore
基本上是 Messages.app 用来与各种服务通信的方式,其引擎是 imagent
,它似乎管理数据,并实际与各种即时消息服务器通信。 IMCore
是一个私有框架,显然使用它有一定风险(并且自动排除其应用程序进入App Store),但我们的假设是,在OS X上,我们仍然可以实现这一点,并且分发应用程序也不会太困难。
我们开始尝试使用 IMCore
(在反向工程 Messages.app 以查看它的使用方式时),并取得了一些进展。我们能够成功连接到 imagent 进程并执行几个配置操作,但然后发现数据模型基本为空——即使我们在用户的安全上下文中运行,也无法查看任何用户数据或与任何即时消息服务通信。
然后我们发现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
)。
我们恐惧地认为,苹果锁定了他们的私有权限,以便系统不接受使用它们的二进制文件,除非直接由苹果签名,但这显然只是一种理论。另一个问题是,imagent
如何知道我们的二进制文件是否具有这些权限?难道我们不能以某种方式欺骗这些权限吗?
就像我说的,感觉像是无助的情况,但谁知道呢。我猜在iOS上进行过极限越狱工作的人可能会有一两个想法,有人吗?