14

私のアプリケーションは、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 ファイルの場所が変更されたのではないかと思います。同じ問題に直面している人はいますか?

ありがとう。

4

2 に答える 2

6

これは私がアップルから得た答えです:

残念ながら、これらのファイルはパブリック API として文書化されておらず、サードパーティのアプリで使用することを意図したものではありませんでした。多くの場合、iOS サンドボックスによって技術的に、またはアプリ レビューによって管理的に、このような制限が適用されます。ただし、これらのプロセスはどちらも完璧ではなく、アプリが実行すべきではないことを実行してしまう場合もありますが、残念ながら、今回のケースのように、施行が改善された場合、これらのアプリは難しい立場に置かれます。

直接的な回避策に関しては、実際にはありません。iOS の唯一のパブリック テレフォニー API は、コア テレフォニー フレームワークによって提供されます。その CTTelephonyNetworkInfo クラスは、ユーザーがローミングしているネットワークではなく、ユーザーの「ホーム」セルラー サーバーに関する情報を提供します。」

彼らは、geo-ip チェックを使用することをお勧めします。

于 2012-09-26T14:49:40.333 に答える
1

そのバージョン/var/mobile/Library/Preferences/com.apple.operator.plist sym-link はもはや元に戻せないため、iOS6 ベータ 1 以降、ここで同じ問題に直面しています。

現在、他のデバイスのみの方法は公開されていませんが、Trausti Thor が言ったように、geo-ip を介して IP を確認するか、単一のキャリア向けのアプリを開発している場合はip クラスを確認するというユニークな解決策があります。

于 2012-10-03T10:35:14.227 に答える