Customize Carrier Logo on 1.1.3 for China Mobile

This is only for China Mobile users, the article is written in Chinese.

If you’re interested in why there’s an article specifically written for China Mobile users given the 1.1.3 has already natively supported customized carrier logos, please read the article Weird Carrier Operator Detection Issue in 1.1.3.

UPDATE: 对于Apple设计的Carrier Bundle的详细使用方法,请参看1.1.3定制运营商图标的通用方法(英文)

UPDATE: 以下介绍的方法不属于补丁,而属于修正系统的一个未知错误。对比上面的通用方法,可以看出除了对于中国移动手工添加了两个符号链接外(这两个符号链接本应由系统添加但由于未知问题实际并没有添加),所有其他涉及的部分均不予改动,因此100%符合Apple的规范,且适合于漫游等各种情况,所有相应的功能均不受影响,较之补丁有明显的优势(补丁必然对系统有影响,比如以前版本的补丁通过修改AT&T图标实现,就会导致真正的AT&T无法识别)。对于Carrier Bundles目录尤其不应该删除,否则将直接导致漫游时的运营商识别出现问题,变成丢了西瓜保了芝麻。

UPDATE: 另外一种可能的解决方案是让iPhone将SIM卡识别成Unknown,从而使用Unknown.bundle进行运营商相关设置,这时候需要修改的就是Unknown.bundle了,只是这种方法有局限性,看看Unknown.bundle就可以知道了。

怎样在1.1.3上定制中国移动运营商图标

在1.1.3版固件中已经内部直接支持定制运营商图标,服务电话,账号服务网站,以及EDGE账号等设置,是通过Bundle来实现的,只要按照要求做一个Bundle就可以实现定制。但是中国移动的SIM卡在1.1.3上有一个奇怪的问题(我用的卡后面写着神州行,不过印象中我一直就是全球通用户),这个问题从Natetrue 1.1.3时候就存在了,而且对目前所有的1.1.3都存在,这个问题就是:

iPhone无法正确检测到中国移动的服务提供商名字

在iPhone里与运营商相关的有两个相关术语:CarrierOperator(在Framework里面分别叫做OperatorProvider,不知为什么不统一名称)。简单的来说,Carrier表示签发SIM卡的机构,而Operator则表示目前对该SIM卡提供服务的机构。对于中国移动来说,这两个机构就是一个,而在国外则可能一个签发机构下面有多个服务提供商。iPhone的这种设计可以说非常合理,可以适应多个签发商之间以及同一签发商的不同服务提供商之间漫游的情况。

好了,现在的问题就是,签发机构可以识别出来,而服务提供商却无法识别出来,目前我还没有找到真正的原因,打算过几天开始逆向分析CoreTelephony或者CommCenter,看看是不是有Bug存在。这个问题导致的直接后果就是无法以Apple提供的合法方式来变更运营商图标。

经过很多天的反复讨论,我的一个朋友Arnaldo(在Hackint0sh论坛使用aviegas作为别名)提出了一个临时解决方案,其基本思路在于:

经过分析可以确定SpringBoard不是造成问题的原因,SpringBoard是可以显示定制运营商图标的,只要你提供正确的服务运营商配置。对于中国移动,由于没有被正确识别,指向相关配置的符号链接根本就没有创建,因此SpringBoard也就无从显示定制图标了。

相应的解决方法就是人为创建必要的符号链接。

临时的解决方法如下:

第一步:制作Carrier Bundle

请下载 为中国移动定制的Bundle,解压缩后会得到一个目录CHINA_MOBILE.bundle,把整个目录传到iPhone,放到下面目录中:

/System/Library/Carrier Bundles/

如果你想修改的话的话,看看其中的carrier.plist文件,可以根据自己喜好修改图标文件名,还有有关的服务商网站。我用的是 Default_CARRIER_MobileOSX.pngFSO_CARRIER_MobileOSX.png 两个图标文件,服务商网站是浙江移动的。注意: 如果修改plist文件,一定要保证文件是Unix格式的,否则就无效。

还需要建立一个MCC/MNC的符号链接,指向我们定制的Bunble。用SSH登录到iPhone(或者使用Term-vt100)后在命令行输入:

cd /System/Library/Carrier\ Bundles
ln -s CHINA_MOBILE.bundle 46000

注意:46000是中国移动的MCC/MNC,其中MCC=460,MNC=00;而对于中国联通是46001。

第二步:强制iPhone进行SIM卡识别

不要以为单纯切换SIM就可以完成这种识别了,一定要按下面步骤来进行:

1. 放入AT&T的SIM卡,重新启动机器,这时候iPhone会根据AT&T卡进行全系统的配置调整。
2. 取出AT&T卡,放入中国移动SIM卡,重新启动机器,iPhone会根据中国移动卡重新调整配置。

现在登录到iPhone,检查一下是否前面的操作正确。你应该在/var/mobile/Library中看到下面的符号连接:

Carrier Bundle.bundle -> /System/Library/Carrier Bundles/46000

而在/var/mobile/Library/Preferences里面应该有下面符号连接:

com.apple.carrier.plist -> /System/Library/Carrier Bundles/46000/carrier.plist

如果任何一项不对,都说明前面操作有错误,请回到第一步重新开始。

第三步:添加遗失的符号连接

现在需要手工加入两个未创建的符号链接。登录到iPhone,在命令行输入:

cd /var/mobile/Library
ln -s /System/Library/Carrier\ Bundles/46000 Operator\ Bundle.bundle
cd Preferences
ln -s /System/Library/Carrier\ Bundles/46000/carrier.plist com.apple.operator.plist

重新启动一次,定制的运营商图标就显示出来了。显示的效果如下:
Customized Carrier Logo on 1.1.3

注意事项

1. 这种修改不受重启动影响,但是不能切换SIM卡。切换卡将导致iPhone重新进行全局SIM卡配置,如果换入的SIM卡不是中国移动的,那么后面建立的符号链接就无效了,需要重新设定。

2. 对于中国联通的卡,我不知道会不会有这种无法识别运营商的问题,如果有的话,可以进行类似的操作,只是所有46000的地方全部改成46001,另外,carrier.plist中的CHINAMOBILE要改成CHINAUNICOM。当然也可以把中国移动和中国联通都写到同一个Bundle里面,至于怎么做,留给各位自己琢磨吧。

3. 由于链接不是自动生成的,因此有些小地方配置没有改过来,我目前发现的只有一个,就是Network的APN设置,不能自动选用Bundle提供的,需要手工修改一次就可以了。

Related posts


9 Comments

  1. magicwang002
    Posted February 13, 2008 at 11:22 pm | Permalink

    n000b大大
    你怎么不分析下最新4.6的破解原理啊
    很期待啊
    让我们也长长知识啊!

  2. Posted February 13, 2008 at 11:24 pm | Permalink

    有什么好分析的,他的BLOG上讲的很清楚了。

  3. Posted February 14, 2008 at 1:21 am | Permalink

    我的3.9BL用ZiPhone和Anysim1.3解锁后,中国移动变成了大写的。以前一直是是China Mobile,现在成了CHINA MOBILE

  4. magicwang002
    Posted February 14, 2008 at 1:04 pm | Permalink

    他的blog访问那叫一麻烦,而且E文不好也就看个大概………

  5. Posted February 14, 2008 at 1:07 pm | Permalink

    你不参与有关的开发以及逆向分析,其实没有必要了解技术细节的,了解了对你也没有任何帮助的。

    EdsonLuo, 顺便回答你的问题,其实一点也不奇怪,Apple可以根据自己需要任意修改运营商最后出现的名字,就好像Windows 2000后面版本不在叫Windows 2001,而改叫Windows XP一样,正常。

  6. justin
    Posted February 15, 2008 at 3:18 pm | Permalink

    请问大大
    现在网上流传着很多种1.1.2的软破方法,那种最好?
    就像你说的我们不了解技术细节所以只要专家告诉那种方法好就照办了

    我想把我的1.1.2重新刷一下,等待回复,谢谢

  7. Posted February 15, 2008 at 4:20 pm | Permalink

    对于Bootloader 4.6,用Zibri的方法进行Jailbreak和Activate,然后用Geohot的方法解锁,不要降级Bootloader,可能会出现针对BL4.6的更好的方法(取决于Geohto的进展)。

  8. Terry
    Posted February 16, 2008 at 2:27 am | Permalink

    the new version of NativeCn v3.01 is released it supports 113, did u have a try? do u recommend navtiecn over icosta ????since icosta has 内存泄漏 problem. i know nativecn may hv compatibility issues with furture firware, which one is better in yr opinion???

  9. Posted February 16, 2008 at 2:36 am | Permalink

    I didn’t give NativeCn 3.01 a try yet, so I can’t tell you which maybe better. But currently I’m quite satisfied by iCosta because of it’s fluent response and big characters, even though it has some memory leaks, it’s still a good IME and it’s implementation is universal which can be easily modified to suit the further firmware updates (if the overrided methods interfaces are changed) given Apple doesn’t refine UIKit massively.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*