Есть ли способы определить статус роуминга на 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, сталкивается ли кто-нибудь с той же проблемой, может ли кто-нибудь помочь мне в этом?

Спасибо.


person JoanneWong    schedule 18.09.2012    source источник
comment
такая же проблема для меня! если кто-нибудь нашел решение. operatorPListSymLinkPath равен нулю, причина: ошибка 257, операция не разрешена.   -  person Vassily    schedule 18.09.2012
comment
возможный дубликат Есть ли способ определить, iphone в роуминге?   -  person Black Frog    schedule 18.09.2012
comment
это не дубликат (старого) связанного вопроса, так как этот вопрос касается iOS 6, где решение связанного вопроса больше не работает.   -  person Nate    schedule 19.09.2012


Ответы (2)


Это ответ, который я получил от Apple:

"Действительно. К сожалению, эти файлы никогда не были задокументированы как общедоступный API и, как таковые, никогда не предназначались для использования сторонними приложениями. Во многих случаях такие ограничения применяются технически песочницей iOS или административно App Review. Однако ни один из этих процессов не идеален, и бывают случаи, когда приложения в конечном итоге делают то, чего не должны делать. К сожалению, это ставит эти приложения в затруднительное положение, когда улучшается контроль, как это произошло в этом случае.

Что касается прямых обходных путей, то на самом деле их нет. Единственные API-интерфейсы общедоступной телефонии на iOS предоставляются платформой Core Telephony. Его класс CTTelephonyNetworkInfo предоставляет вам информацию о «домашнем» сотовом сервере пользователя, а не о сети, в которой он находится в роуминге ».

Они предлагают вам использовать проверку гео-IP.

person Trausti Thor    schedule 26.09.2012

Столкновение с той же проблемой здесь, начиная с бета-версии 1 iOS6, поскольку эта версия /var/mobile/Library/Preferences/com.apple.operator.plist больше не является обратимой.

В настоящее время нет никаких других общедоступных способов использования только устройств, а пока уникальное решение состоит в том, чтобы проверить IP-адрес через гео-IP, как сказал Траусти Тор, или проверить класс IP, если вы разрабатываете приложение для одного оператора.

person Matteo Crippa    schedule 03.10.2012