有什么办法可以检测iOS 6上的漫游状态吗?

我的应用程序使用下面的方法来检测在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),我想这可能是由苹果公司更改的plist文件位置,任何人都面临同样的问题,任何人都可以帮助我吗?

谢谢。

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

“确实,不幸的是,这些文件从未被logging为公共API,因此从来没有打算被第三方应用程序使用。在很多情况下,这些限制是强制执行的,无论是技术上的iOS沙箱还是App Review的pipe理。然而,这两个过程都不​​是完美的,有时候应用程序最终会做不该做的事情,不幸的是,这种情况下,这些应用程序在执行改进时处于困难的位置。

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

他们build议你使用地理ip检查。

从iOS6 beta 1开始就面临同样的问题,因为该版本的/var/mobile/Library/Preferences/com.apple.operator.plist sym-link是不可逆的

目前没有任何其他设备的方法是公开的,同时独特的解决scheme是通过geo-ip来检查ip,正如Trausti Thor所说的那样,或者如果您正在开发一个单一运营商的应用程序,则检查ip class