2012-09-18 8 views
14

Moja aplikacja za pomocą poniższych metod do wykrywania roamming w iOS 4 i 5.Czy są jakieś sposoby na wykrycie statusu roamingu na iOS 6?

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]); 

Ale ten kod zawsze return false na iOS6 (nawet nie jestem w roamingu, to zawsze return false), myślę, że być może plist lokalizacja pliku zmieniona przez Apple, czy ktoś zmierzy się z tym samym problemem, czy ktoś może mi w tym pomóc?

Dzięki.

+0

problem dla mnie! jeśli ktokolwiek znalazł rozwiązanie. operatorPListSymLinkPath jest zerową przyczyną: błąd 257, Operacja niedozwolona – Vassily

+0

możliwy duplikat [Czy istnieje sposób sprawdzenia, czy iPhone jest w roamingu?] (http://stackoverflow.com/questions/900547/is-there-any-way- to-determine-if-the-iphone-is-roaming) –

+3

nie jest to duplikat (starego) połączonego pytania, ponieważ to pytanie dotyczy iOS 6, gdzie rozwiązanie w połączonym pytaniu już nie działa. – Nate

Odpowiedz

6

Jest to odpowiedź dostałem od Apple:

„Rzeczywiście Niestety, te pliki nigdy nie zostały udokumentowane jako API publicznej i jako takie nigdy nie były przeznaczone do wykorzystania przez aplikacje firm trzecich W wielu przypadkach.. takie ograniczenia są wymuszane, albo technicznie przez piaskownicę iOS, albo administracyjnie przez App Review, jednak żaden z tych procesów nie jest doskonały i są sytuacje, w których aplikacje kończą się robieniem rzeczy, których nie powinny robić. trudna pozycja, gdy egzekwowanie się poprawi, tak jak stało się w tym przypadku:

Jeśli chodzi o bezpośrednie obejście problemu, to naprawdę nie jest to jedyny. Jedyne API telefonii publicznej na iOS to p oferowany przez strukturę telefonii rdzeniowej. Jej klasa CTTelephonyNetworkInfo daje informacje o „domu” serwer komórkowym użytkownika, a nie o sieci, że są one w roamingu na „.

Sugerują użyć czek geo-IP.

1

obliczu tego samego problemu tutaj od iOS6 beta 1, ponieważ ta wersja /var/mobile/Library/Preferences/com.apple.operator.plist sym-link ma więcej odwracalny.

Żadne inne urządzenie tylko sposób są jawne teraz, w międzyczasie unikalnym rozwiązaniem jest sprawdzenie adresu IP za pomocą funkcji geo-ip, jak powiedział Trausti Thor, lub sprawdzenie klasy IP w klasie wyciągnięcie aplikacji dla pojedynczego operatora.