14

My application using below methods to detect roamming in iOS 4 and 5.

NSString *carrierPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.carrier.plist"; 
NSString *operatorPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.operator.plist"; 

NSFileManager *fm = [NSFileManager defaultManager]; 
NSError *error = nil; 

NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];     

NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];

return (![operatorPListPath isEqualToString:carrierPListPath]); 

But this code always return false on iOS6 (even i am not roaming, it always return false), i think it maybe the plist file location changed by Apple, does any one face the same issue, can anyone help me on this?

Thanks.

Black Frog
  • 11,595
  • 1
  • 35
  • 66
JoanneWong
  • 141
  • 1
  • 3
  • same probleme for me ! if anybody has found a solution. operatorPListSymLinkPath is nil cause : error 257, Operation not permitted – Vassily Sep 18 '12 at 09:01
  • possible duplicate of [Is there any way to determine if the iphone is roaming?](http://stackoverflow.com/questions/900547/is-there-any-way-to-determine-if-the-iphone-is-roaming) – Black Frog Sep 18 '12 at 12:51
  • 3
    this is not a duplicate of the (old) linked question, as this question is about iOS 6, where the solution in the linked question no longer works. – Nate Sep 19 '12 at 01:52

2 Answers2

6

This is an answer I got from apple :

"Indeed. Unfortunately these files were never documented as public API and, as such, were never intended to be used by third party apps. In a lot of cases such restrictions are enforced, either technically by the iOS sandbox or administratively by App Review. However, neither of these processes is perfect, and there are occasions where apps end up doing things they shouldn't be doing. Unfortunately this puts these apps in a difficult position when the enforcement improves, as has happened in this case.

As to direct workarounds there really isn't one. The only public telephony APIs on iOS are provided by the Core Telephony framework. Its CTTelephonyNetworkInfo class gives you information about the user's 'home' cellular server, not about the network that they are roaming on."

They suggest you use geo-ip check.

Trausti Thor
  • 3,722
  • 31
  • 41
1

Facing the same problem here since iOS6 beta 1, since that version /var/mobile/Library/Preferences/com.apple.operator.plist sym-link is no more reversable.

No other device-only way are public now, in the meanwhile the unique solution is to check for the ip via geo-ip, as Trausti Thor said, or checking for the ip class if you are developing an app for a single carrier.

Matteo Crippa
  • 121
  • 3
  • 10