对于很多中国小白用户而言,买iPhone == 越狱 == 免费安装付费软件 + 免费内购。在这个越狱率高达90%、越狱之后还安装iApCracher(内购破解插件)的神奇国度里,国内很多AppStore开发者对越狱深恶痛绝而又无可奈何。在写这篇文章对时候,我特地看里下中国区免费排行前25名,里面就有4个网游类游戏。近期大量免费网游类游戏上架,大都粗劣不堪,我就像看到近几年大量AKB48之流充斥日本歌坛、oricon前三名的演唱者加起来超百人一样痛心。AppStore游戏正和国内PC游戏同质化,里面有开发者被迫转型的无奈。了解更多,可以看看雷锋网的这篇文章:《宫爆老奶奶一周销售日记:还原真实的iOS游戏血泪史》

刚买iPhone,我是那骄傲的10%,而且和组里那铁杆果粉一样坚决不越狱。看到喜欢的游戏,我也会花个6块钱买下来。完全可以肯定,假如没有那些意外,现在我的iPhone安装的应该是iOS6.0 beta。那时我的iPhone稳定而又简单,唯一的一次卡死需要硬启动解决问题的,是用手机QQ看图片的时候(老版本的手机QQ点击查看图片奇卡无比,严重时能卡死iPhone,至今我都佩服不已)。对于iPhone的用户程序(就是那些长按能出现叉叉删除的,当然这是最简单的判别方法,不过这种方法已不可靠,如越狱版360),最糟糕的情况莫过于闪退。稍微有点iOS开发经验的人都知道,这是程序由于各种原因(野指针,内存警告,等等)而崩溃了。而对于系统程序(就是那些删不掉的),苹果公司保证它们稳定不出意外,在非越狱机上能看到它们出现崩溃或者异常,那真是你三生修来的福分。

这就是iOS的简单。系统升级一键完成,用户无需担心坑爹的某些安卓机的兼容问题或者根本无法升级(想到Lumia我又想笑了);iTunes管理着包括媒体、应用程序共享资料以及备份还原的繁杂事务;AppStore作为用户程序唯一的官方发布渠道,使用严格的签名机制让破解程序无用武之地;用户程序一旦进入后台,除了少量的行为,如音乐播放、定位、通知等能影响到用户之外,程序的行为就基本受控于用户和系统了。设计的简单,并不意味着设计者技术的平庸。简单甚至傻瓜式的用户体验,依靠的是强大的技术支撑和对用户需求的准确把握。

对于开发者而言,刚接触iOS,特别是像我从其他平台(如Android)转过来的,最大的感受就是开发中遇到的大量的系统限制。用“沙盒”来形容这种境况最为贴切:程序能掌控的东西,包括资源和文件系统,都在于一个类似于“沙盒”的封闭空间中,在系统看来,这个沙盒就是一个后缀名为.app的文件夹,系统会用严格的权限限制确保程序的活动范围只在这个文件夹中;各个程序互不相关,互不打扰;用户若想删除程序,系统无非就是把这个文件夹彻底删除,干净且彻底。当然,对于一些公用资源,如通讯录、相片、音乐、定位服务、电话服务等,系统提供里部分接口供开发者能够突破沙盒来获取。不过这是需要条件的:首先,有些情况是需要用户确认的,如定位服务;其次,获取到的资源是不完整,受到的限制要远远大于系统程序。使用私有API可以解决这个问题,但是严格的审核机制终止了任何开发者想使用私有API的想法。

这些东西,在我转为越狱tweak开发之前,也只是书本里的马列主义,背背也就算了,并无真正确实的理解。因为不越狱,即使作为一个开发者,眼界也是小得可怜。iOS用严格的权限限制了任何人获取其文件系统的举动。举个例子,同样是手机,Android用数据线插到电脑里,用户可以清楚地看到所有的东西(当然各类程序也肆无忌惮地修改着文件系统,每次看到Android一团糟的文件目录都有一种撞墙的冲动),而iPhone插到电脑,即使用了iTunes,也只能访问到音乐、照片这些简单到东西,甚至连照片都是只读不可写的。

这就是越狱的第一点——越狱开放了iOS的文件系统,使得用户一下子获得了root权限,获得了整个iOS系统的掌控大权。越狱之后用iFunBox等工具可以可简单地看到iOS的整个文件系统,因此也可以修改系统UI、铃声,或者当U盘用。同样的,越狱之后安装的一些程序,也同样突破了沙盒的限制,甚至获得root权限,程序的行为可以不受用户和系统的限制。权利和责任的对等的,获得了root权限的用户就必须对这个系统对安全和完整性负责。可惜的是很多人越狱了,但又抱怨iPhone出现的耗电、卡机、白苹果等等现象。目测很多Android和越狱用户,确实没这个能力去负起这个责任。

越狱第二点——cydia。基本所有人都把它当作越狱的显性标志。cydia表面上看来就是一个AppStore,实际上利用了另外一套软件管理系统——“Debian Package ”,也就是常说的dpkg,使用的安装包是deb,在Ubuntn上很是常见。deb的安装和卸载依靠的是一套完整的脚本,用control作为软件的标识信息,数据用tar压缩。另外,cydia还有软件源这个机制,由于我没搭过源服务器,完全不懂其中原理。

越狱第三点——MobileSubstrate。这是越狱必装插件,也是tweak开发的前提。那些让iPhone能拦截黑名单电话的,或者让时间能显示年月日的,或者在状态栏添加个天气图标的程序,基本都依赖与此。事实上,MobileSubstrate包含了三大组件。

  • MobileHooker

俗称钩子。这把存在于内存里的钩子能钩住任何想钩住的系统方法,并替换成自己的实现方法。举例而言,黑名单的电话能被挂断,是因为在接通的那个系统方法里,并替换掉且不执行原有的方法,所以接通电话的事件也就被中断了。当然,那些奇怪问题诸如白苹果等事件基本都是由这个引起的。

  • MobileLoader

钩子能够加载进内存并动态替换内存,靠的就是这个。其中编写.plist文件来限制加载范围必不可少。

  • Safe mode

越狱后的机子基本都经历过安全模式,当SpringBoard崩溃时会自动进入安全模式,靠的就时这个的功劳,不然,这世界上不知又要多了多少部白苹果。

若想了解更多MobileSubstrate,可以点这里

何为越狱已经结束,为何越狱也就明朗起来了。

  • 想掌握iOS的整个文件系统,把iPhone当U盘使。
  • 为了获得更好等功能,如电话增强功能、flash等
  • 搞一些修改系统的行为,如更换UI、铃声、图标,等等
  • 工作需要(比如说我)
  • 安装免费软件(我故意放到最后的)

最后提醒一句,在非越狱机上,AppStore上的那些来电归属地,透视镜,指纹锁,基本都是假的,看完这篇文章,原因读者大概也能略知一二了。而那些省电、清内存之类的,反正我是不用,这些东西交给系统就行了,反正我上没见过iPhone4或4s会卡到游戏玩不了需要硬启动的。用户程序要操心这些东西,说真的,有心无力。有钱的话,买买几个正版的单机游戏,购买一次还提供永久的免费升级,也挺值了。