携帯キャリアの情報を取得する
CoreTelephony.framework を使えばできるらしい。知らなかった。
CTTelephonyNetworkInfo をインスタンス化して subscriberCellularProvider メソッドを呼べば CTCarrier でキャリア情報が取得できる。
CTCattier にはキャリア情報に関するいくつかのプロパティがあるが description で情報をまとめて見る事ができる。
description の例は以下
CTCarrier (0x1700598c0) {
Carrier name: [ソフトバンクモバイル]
Mobile Country Code: [440]
Mobile Network Code:[20]
ISO Country Code:[jp]
Allows VOIP? [YES]
}
デバイスを英語環境にしてもキャリア名は日本語名のまま表示されたので、常に現地語で表示されるかもしくはCountry Code準拠なのかも知れない。
currentRadioAccessTechnology メソッドでは LTE, Edge, CDMA など、どの通信規格に接続しているかが取得できる。定義のリストには WCDMA, CDMAEVDORev0, CDMAEVDORevA, CDMAEVDORevB などがあるので結構細かく取得できる模様。
キャリアの変更は subscriberCellularProviderDidUpdateNotifier プロパティのブロックで検出可能。
通信規格の変更は CTRadioAccessTechnologyDidChangeNotification で検出可能。
Twitter の DIGITS の様に、アプリ内に電話番号入力画面を用意する際の国番号のデフォルト値を設定するのに CTCarrier の情報が利用できそう。