Weird Carrier / Operator Detection Issue in 1.1.3

Apple has officially supported the customized carrier bundles since 1.1.3 (check This Article). However I’ve got a weird problem after upgrading to 1.1.3, the problem happened ever since days ago when I first tried to upgrade to 1.1.3 using leaked method, later I noticed same problem happened on dev team’s upgrade as well, and it still exists in real jailbreak 1.1.3.

The problem is: iPhone can’t detect my local operator, and it happened in the following combinations:

Natetrue Jailbreak 1.1.3 + Baseband 04.02.13_G
Dev Team Jailbreak 1.1.3 + Baseband 04.02.13_G
Dev Team Jailbreak 1.1.3 + Baseband 04.03.13_G
Zibri Jailbreak/Activation 1.1.3 + Baseband 04.03.13_G

I know this is abnormal and I have received success report that other operators don’t have this issue, but I do have this problem. I noticed this because I couldn’t let iPhone use my customized carrier logo by feeding it a new carrier bundle. So I fired up the following script to check what was wrong:

#!/bin/bash -x
Framework AppSupport CPPhoneNumberCopyActiveCountryCode
Framework AppSupport CPPhoneNumberCopyNetworkCountryCode
Framework CoreTelephony CTRegistrationCopyOperatorName
Framework CoreTelephony CTRegistrationCopyServiceProviderName
Framework CoreTelephony CTRegistrationGetStatus
Framework CoreTelephony CTSIMSupportCopyMobileSubscriberNetworkCode
Framework CoreTelephony CTSIMSupportCopyMobileSubscriberCountryCode

The returned information revealed that my iPhone couldn’t detect my local operator (CTRegistrationCopyServiceProviderName returns NULL) for some unknown reason:

root@n000b ~ # ./CheckCarrier.sh
+ Framework AppSupport CPPhoneNumberCopyActiveCountryCode
cn
+ Framework AppSupport CPPhoneNumberCopyNetworkCountryCode
cn
+ Framework CoreTelephony CTRegistrationCopyOperatorName
CHINA  MOBILE
+ Framework CoreTelephony CTRegistrationCopyServiceProviderName
  <-- Here's the problem
+ Framework CoreTelephony CTRegistrationGetStatus
kCTRegistrationStatusRegisteredHome
+ Framework CoreTelephony CTSIMSupportCopyMobileSubscriberNetworkCode
00
+ Framework CoreTelephony CTSIMSupportCopyMobileSubscriberCountryCode
460

Then I checked the /var/mobile/Library and the /var/mobile/Library/Preferences folders, there was only 1 symbolic link created in each folder while there should be 2 in normal cases, one is for carrier and the other is for operator:

/var/mobile/Library/Carrier Bundle.bundle
/var/mobile/Library/Operator Bundle.bundle <-- this was missing
/var/mobile/Library/Preferences/com.apple.carrier.plist
/var/mobile/Library/Preferences/com.apple.operator.plist <-- this was missing

UPDATE: I’ve repeated the above test on 1.0.2, 1.1.1, 1.1.2, and 1.1.3, none of which could detect my operator.

I’ve been fighting with this problem for days, my friend Arnaldo (Thank you!) is also trying to locate this for me, we still didn’t find out where the problem is.

A Temporary Workaround

Before the real reason which caused this weird operator detection failure is found, there’s a temporary workaround. This workaround is introduced by Arnaldo (known as aviegas at Hackint0sh forum) Thank you, you are a genius! The basic idea is:

If you feed SpringBoard the correct symbolic links, it’ll display the correct carrier logo.

Okay, here’s the workaround.

Step 1: Prepare bundle

1. Create the carrier bundle for your local carrier/operator. I’m using China Mobile, so I creat the following bundle:

/System/Library/Carrier Bundles/CHINA_MOBILE.bundle

The contents of the bundle is here: China Mobile Carrier/Operator Bundle
In the bundle, I used two customized logo: Default_CARRIER_MobileOSX.png and FSO_CARRIER_MobileOSX.png.

2. Create a symbolic link for MCC/MNC:

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

Step 2: Trigger SIM-based reconfiguration

1. Put the AT&T SIM into iPhone and reboot

2. Put local SIM into iPhone and reboot

Now check your /var/mobile/Library and /var/mobile/Library/Preferences, there will be one symbolic link in each folder:

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

Step 3: Add missing symbolic links

Now add the missing symbolic links for operator:

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

Reboot, voila! Customized logo! The following is my customized carrier logo:
Customized Carrier Logo on 1.1.3

NOTICE: This customized logo will stay effective after reboot. It’ll stay unless you switch SIM.


15 Comments

  1. NumberSix
    Posted February 11, 2008 at 1:05 am | Permalink

    I have seen a similar problem in 1.1.2 caused by a bug in Apple’s code. I don’t know if it was fixed in 1.1.3 so will have to check it.

  2. Posted February 11, 2008 at 1:11 am | Permalink

    I was speculating it might be a bug in code but didn’t take time to check it yet. If you could report what you have found, I’d be more than happy to hear. Thank you.

  3. NumberSix
    Posted February 11, 2008 at 1:35 am | Permalink

    I just checked and unfortunately for you the bug was fixed :(

  4. Posted February 11, 2008 at 4:06 am | Permalink

    Then there might be another bug out there, or maybe it’s just my local mobile carrier’s problem (they might not send some needed info).

  5. Alejandro
    Posted February 12, 2008 at 10:34 am | Permalink

    I’m having this problem, I did the jailbreak and unlock successfully but I’m getting the “No Service” message.
    Any idea on how to fix this problem?

    Thanks

  6. Posted February 12, 2008 at 9:55 pm | Permalink

    I am also having the problem i have tried every unlock method but still acting odd.

  7. Danny
    Posted February 13, 2008 at 4:13 am | Permalink

    I am also having this problem. It’s strange while first unlock it did detect the correct operator, and I can browse internet with edge gprs, but never after a phone restart. No operator was found. Checked the file system and yes the 2 operator symbolic links missing. Mine is 1.02 -> 1.1.3 with baseband upgrade to 04.03.13_G

  8. Danny
    Posted February 13, 2008 at 4:37 am | Permalink

    I finally fix the problem. Simply reset the settings in Settings->General->Reset. I did a network reset and now it works. I referred to hackintosh forum:

    http://www.hackint0sh.org/forum/showthread.php?t=29166&page=2

  9. Ross
    Posted February 13, 2008 at 5:34 am | Permalink

    That will work once but after a reboot it will stop working.

  10. Danny
    Posted February 13, 2008 at 11:38 am | Permalink

    um…actually I did a boss root clean before resetting (I saw < 2Mb left in /), dunno if it’s related. My “/” partition now got 7x Mb

  11. volkspost
    Posted March 3, 2008 at 6:59 am | Permalink

    You modified the carrier.plist for making use of your custom logo, right? In the section defining that, there in one more instance of CarrierName (one more on top). The one in here is not allowed to have a space, if so, the logo wont pop up and the bescribed behavior happens. I am playing with the files since 1.1.3 came up…
    So while you may enter China Mobile with space on top of the plist file, try ChinaMobile down in the StatusBarImages section.
    best
    volkspost

  12. Posted March 3, 2008 at 6:11 pm | Permalink

    @volkspost, I think you didnt get the point, the upper most CarrierName is only for display, it has nothing to do with carrier detection and logo display, I did use the CHINAMOBILE (btw, all uppercases) in the StatusBarImages if you check the attached bundle. It’s nothing about the bundle, it’s something else becase Framework didn’t return provider name.

  13. David
    Posted March 5, 2008 at 4:43 am | Permalink

    I’m having the opposite issue - I reliably get the Operator to point to the correct bundle, but my Carrier points to “Unknown”. Any idea what logic controls how the carrier gets identified?

  14. j
    Posted March 6, 2008 at 12:12 pm | Permalink

    Yes, CSL in Hong Kong has a similar problem
    and it cannot detect operator and no logo as a result
    The temporary workaround can fix it
    BTW
    Where can I get the Framework binary as per your shell script ?
    It is a convenient debug tool.

  15. Achim
    Posted April 4, 2008 at 2:01 pm | Permalink

    Hey,
    I’ve the same problem in Germany with 1.1.4 and T-Mobile network but ‘callmobile.de’ as operator/reseller. I’d setup all the symlinks and my own operator logos but it didn’t work. When I put my SIM into an SE K750i I can see that I’m logged in at callmobile. I also know about other user who have the same behaviour with e-plus network and ‘base’ as operator/reseller. How could I get the CheckCarrier.sh to check out what’s going on?

Post a Comment

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

*
*