有没有办法检测iOS 6上的漫游状态?

时间:2012-09-18 08:51:13

标签: ios jailbreak ios6 roaming

我的应用程序使用以下方法检测iOS 4和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]); 

但是这个代码总是在iOS6上返回false(即使我不漫游,它总是返回false),我认为它可能是由Apple更改的plist文件位置,任何人都面临同样的问题,任何人都可以帮我这个?

感谢。

2 个答案:

答案 0 :(得分:6)

这是我从苹果那里得到的答案:

“确实。不幸的是,这些文件从未被记录为公共API,因此从未打算被第三方应用程序使用。在很多情况下,这些限制是通过技术上由iOS沙箱或在行政上由App Review。然而,这些过程都不是完美的,并且有时应用程序最终会做一些他们不应该做的事情。不幸的是,这会使这些应用程序在执行改进时处于困境,就像在这种情况下发生的那样。

至于直接解决方法,确实没有一个。 iOS上唯一的公共电话API由Core Telephony框架提供。它的CTTelephonyNetworkInfo类为您提供有关用户“家庭”蜂窝服务器的信息,而不是它们正在漫游的网络。“

他们建议你使用geo-ip check。

答案 1 :(得分:1)

自从iOS6 beta 1以来面临同样的问题,因为该版本 /var/mobile/Library/Preferences/com.apple.operator.plist sym-link不再可逆。

现在没有其他只有设备的方式是公开的,同时唯一的解决方案是通过geo-ip检查ip,如Trausti Thor所说,或检查 ip class 如果你正在为单一运营商开发应用程序。