作为苹果在iOS 5之后重点打造的核心服务之一,iMessage的功能在iOS 8中得到了大幅度增强,不管是单纯的文字,还是多媒体照片、语音,甚至是视频,iMessage都能完美地hold住。本章的iMessage检测与发送虽然仅仅是所有iMessage操作的冰山一角,但都已经要在IDS、ChatKit和IMCore这3个模块间来回切换了,可见整个iMessage系统的复杂度之高。从上面的分析过程中可知道,负责管理iMessage发件人的是IMAccountController,作为发送人的我们是一个个IMAccount;收件人是一个IMHandle;一条对话就是一个IMChat或CKConversation;IMChatRegistry管理所有的对话;一条iMessage就是一个IMMessage或CKComposition。对于那些有意涉足即时通信的开发者来说,iMessage的这些设计方式非常值得借鉴。如果你对iMessage很感兴趣,觉得本章的内容仍意犹未尽,不妨尝试分析笔者留下的下面3个“隐藏关卡”,它们由易到难,运用本章的所用到的逆向思路和技巧,就可以各个击破。
·搞定SMS的发送(提示:只要更换IMServiceImpl对象即可);
·用ChatKit类搞定iMessage发送(提示:CKConversation对象可以由IMChat对象生成);
·把发送iMessage的操作移植到SpringBoard进程中(提示:在SpringBoard中调用[IMChat sendMessage:IMMessage]之所以无效,是因为SpringBoard缺少某种“capabilities”)。
如果本章的内容你能完全吃透,并“脱稿”完成,那么恭喜你,你已经是一名优秀的iOS逆向工程师了,可以朝着更高的目标(比如越狱?)迈进了。在开始新的征程前,先来我们的论坛http://bbs.iosre.com ,与各位同好分享这份喜悦吧!