Есть ли способ обнаружить статус роуминга на 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]);
Но этот код всегда возвращает false на iOS6 (даже я не роуминг, он всегда возвращает false), я думаю, что это может быть изменение местоположения файла plist от Apple, любой сталкивается с той же проблемой, может ли кто-нибудь помочь мне в этом
Спасибо.
Ответы
Ответ 1
Это ответ, который я получил от apple:
"Действительно. К сожалению, эти файлы никогда не были документированы как открытый API и, как таковые, никогда не предназначались для использования сторонними приложениями. Во многих случаях такие ограничения применяются либо технически с помощью изолированной программной среды iOS, либо в Обзор приложений. Однако ни один из этих процессов не является совершенным, и бывают случаи, когда приложения в конечном итоге делают то, что им не нужно делать. К сожалению, это затрудняет работу этих приложений, когда их действие улучшается, как это произошло в этом случае.
Что касается прямых обходных решений, на самом деле их нет. Единственные API общедоступной телефонии на iOS предоставляются базой Core Telephony. Его класс CTTelephonyNetworkInfo предоставляет информацию о сотовом сервере пользователя, а не о сети, в которой они находятся в роуминге.
Они предлагают вам использовать проверку гео-ip.
Ответ 2
Опираясь на ту же проблему здесь, начиная с iOS6 beta 1, поскольку эта версия /var/mobile/Library/Preferences/com.apple.operator.plist sym-link больше не обратима.
Никакой другой способ только для устройств не является общедоступным, в то время как уникальное решение - проверить ip через geo-ip, как сказал Траусти Тор или проверить класс ip, если вы разрабатывают приложение для одного оператора.