一方面因为没什么时间,另一方面因为不敢做小白鼠,所以并没有很急着升级,昨天在家养病,看到目前各种信息比较具体完备了,就动手干了。我的整个环境是这样的:

  1. 我的iPhone是美版3G,升级前运行越狱的OS 2.2.1,baseband未升级。
  2. 我的电脑是MacBook Pro,运行Mac OS X 10.5.7。


首先,要说明2个升级3.0的原则/注意事项,下面的操作流程是基于这2点原则的。

  1. 很多先行者的教训告诉我们,升级并越狱之后用iTune backup恢复的话,有可能带来各种奇怪的问题,如信号不好、电量快速消耗等等,所以最好当作一部新机来重新安装和配置,这意味着原有的重要信息需要手工进行备份。
  2. Hactivated(使用jail-break工具伪激活)的iPhone将很大可能无法正常使用Push Notification这个3.0最重要的新功能,目前唯一的解决方案就是使用一张AT&T的卡进行官方激活——所有美版的iPhone都带有这个卡(你要是已经扔了那就找人借),这个方案只适用于iPhone 3G,2G版本目前无解,具体可以参见这里

Step 1 Backup

其实我没啥要备份的,联系人等信息都是以电脑的为准,一些游戏存档我不在乎重来一次,本来要备份Stanza里下载的书的,后来证明这个其实无法备份,最后还是重新下载了一堆,我做的备份包括:

  1. Cydia的源和软件包列表;
  2. iTune Backup。

最后这个虽然实际上用不到,但是还是留下以备万一。

Step 2 Restore, Jail-break & Activation

关机,取出原来的SIM卡,把AT&T原卡插进去,只要是AT&T 3G卡都可以,无论之前是否激活过,然后开机,连上电脑。

使用PwnageTool制作自定义固件来升级到越狱的OS 3.0,具体流程参见这个非常详细的指引,一些注意事项如下:

  1. 用redsn0w也能实现一样的目的,具体指引参见这里,但是我没试,下面的描述都是基于PwnageTool的。
  2. 无论哪种方式,都注意不要选择让它自动激活,因为要用官方激活才能正常使用Push Notification,在General Setting中不要选择”Activate the phone”选项即可。

通过DFU安装OS 3.0及固件并重启之后,进入iPhone的网络设置中关闭3G,否则之后某些SIM卡激活会失败。

当iTune提示时选择作为全新iPhone来重新设置,不要用2.*版本的备份来恢复,这会花去更多时间,但是值得。

接着iTune会尝试激活iPhone,iPhone上会显示”Waiting for activation”,看到这个提示其实就可以了,关掉这个提示,进入下一步。

安装ultrasn0w来进行软解:

  1. 首先进入网络设置,配置好WiFi和VPN(可选)并确保连接好;
  2. 启动Cydia,添加源:http://repo666.ultrasn0w.com
  3. 查找并安装:ultrasn0w
  4. 关机,取出AT&T的卡,将原来的SIM卡重新放进去;
  5. 重新打开iPhone,一切顺利,找到信号之后会弹出”iPhone has been activated”信息。

Step 3 Advanced Hacking

首先开启SSH和修改密码。

  1. 启动Cydia,查找和安装:OpenSSH
  2. 重启iPhone;
  3. 用SSH客户端连接到iPhone修改root和mobile用户的密码,root帐号原始密码是alpine,是的,3.0这个没改。

破解MobileInstallation,虽然我很少用破解的软件,但是一些比较贵的软件不试用下没法下决心买,所以这一步还是要做的。

  1. 启动Cydia,添加源:http://cydia.hackulo.us
  2. 查找和安装:AppSync for OS 3.0
  3. 重启iPhone。

然后是对付我的上古时代的SIM卡,让它能够显示漂亮的运营商图标,因为它返回的运营商标识符是”CT-GSM”,所以需要一些特殊处理。

  1. 启动Cydia,添加源:http://www.iphone.org.hk/apt
  2. 查找和安装:HK Carrier Firmware 3.0
  3. 用SSH或者SFTP连接到iPhone,找到并且修改这个文件:/System/Library/Carrier Bundles/CMCC_cn.bundle/carrier.plist,是的,3.0有中国运营商独立的bundle了,修改方法是:打开 StatusBarImages 节点,复制下面第一个item,将复制出来的item下面的 CarrierName 属性改为 CT-GSM,具体的截图可以参见我之前的2.2.*升级说明
  4. 重启iPhone,你会看到运营商图标。

Step 4 Install JB-ed Software

  1. 启动Cydia;
  2. 添加源:http://apt.ripdev.com
  3. 查找并安装:Icy
  4. 添加源:http://cydia.iclarified.com
  5. 查找并安装:MobileLog*;
  6. 查找并安装:MCleaner*;
  7. 查找并安装:SBSettings
  8. 查找并安装:WinterBoard
  9. 查找并安装:Deep
  10. 查找并安装:Cycorder
  11. 查找并安装:unzip
  12. 重启iPhone。

这些软件都支持OS 3.0,标记*号的是收费软件,其余免费。现在你可以进入WinterBoard设置启用Deep这个主题(或者你选择安装的任何其他主题)。

Step 5 iTune Sync & Final Setting

重新连接iPhone到iTune,设置好各种内容的同步设定,然后开始同步,我有超过10G的歌曲和视频,这部分我会放到最后,先把联系人、铃声、图片同步好,然后是选中的应用程序们,最后是歌曲和视频。这个过程用了近40分钟,完成之后16G容量只剩下1.4G,汗。

找个舒服的地方躺下来,开始进行最后的配置:

  1. 重新摆放应用程序,现在跨页拖放比以前好用,不用一页一页中转了,可以直接拖过好几页。
  2. 测试各主要应用程序,尤其是需要联网、需要填用户名密码啥的,都一一登录测试。
  3. 目前我用到的唯一支持Push Notification的软件是BeejiveIM,运行一次,登录,退出程序,从电脑另一个帐号发信息,可以看到信息推送工作正常;这时候进入系统设置会看到Push Notification的控制开关——在你运行一个需要Push支持的应用之前,这个开关不会出现!如果只是为了测试Push的话,没必要去买这个10美刀的昂贵东西,可以试试这个免费的AP Mobile

配置好上网参数:

  1. GPRS/Edge:我用 cmnet 接入点,关闭WiFi进行数据通信测试;
  2. MMS:APN=cmwap,MMSC=mmsc.monternet.com,Proxy=10.0.0.172,Max.=50000,找台别的手机测试彩信收发。

Conclusion: My Favorites of OS 3.0 Upgrade

  1. 有史以来iPhone 3G最完美的软解,这解决了以前卡贴带来的一系列问题:信号切换较慢;开启飞行模式之后无法正常恢复;GPS模块启动和定位缓慢甚至不能定位。
  2. 使用AT&T原卡激活之后可以正常的启用Push Notification。
  3. 待机时间变长,我睡觉8小时消耗电量为7%,以前约为10%;使用时候电量消耗未有大的变化。
  4. 可用内存增加,以我的机器为例,原来是30M左右,目前空闲内存一般都有40M。
  5. 由于使用了新的WebKit内核,Safari渲染速度明显提高;稳定性也得到加强,关闭窗口之后原窗口自动刷新的问题更少出现,这个怀疑和上述内存优化有关。
  6. Copy & Paste!! 是的,这个早就该有,但是终于还是有了,而且操作手感极佳,支持图片和格式化文本也是亮点。
  7. 新版的SBS非常漂亮强大,BossPrefs可以退休了;SBS可以打开内置的电量数值显示,很不错。
  8. 彩信、短信功能的加强和操作的一些细节优化也不错。

NOTE: About Cydia vs. Icy

从我第一次使用Icy开始就非常喜欢它简洁优雅的界面以及快速的启动,但是很遗憾这次升级时的试用让我对Icy有些失望,它对于一些关键性的包依赖居然出现了严重的问题。我最开始安装OpenSSH时候是用Icy做的,结果无法正常登录,报错是:

dyld: lazy symbol binding failed: Symbol not found: _login

这明显是依赖库缺失或版本冲突,我使用Cydia重新安装之后解决。

另外,在Cydia添加Icy的方法较好(见上),如果用越狱工具同时安装两套包管理则有可能出现一些微妙的问题。

所以目前我还是两者共存,一般的事情用Icy还是可以的,但是固件升级这样重大的改变或者一些关键包的更新,还是Cydia吧。期待Icy能够早日成熟起来,它的简洁和漂亮真是Cydia无法比拟的。

Other Useful Tips

3.0有个可耻的bug,那就是当你群发短信息的时候会被默认采用MMS来发,这个可以通过修改carrier.plist来修正,对于我来说仍然是这个文件:/System/Library/Carrier Bundles/CMCC_cn.bundle/carrier.plist,加入下图所示的这个节点即可:

help.BenN.at
各种运营商相关的网络配置生成器,可以帮助打开tethering功能,用iPhone的Safari访问这个地址。

最新版本的SBS(3.0.1)加入了一个实验性的新功能:Free Memory,强制回收空闲内存,但是可惜把一个文件放错位置了,导致这个功能实际上并没有生效,修复方法是用SSH进iPhone,以root权限运行:
mv /var/mobile/Library/Commands /var/mobile/Library/SBSettings/