iPhoneのUSIM/e-SIM デュアルSIM構成では、APN構成プロファイルを有効にできない件
Backspace Dev-Teamでは、過去にiPhoneのAPN構成を改ざん可能にする『CommCenter* patch』というパッチを提供していました。iOS 7になったころより、公式にAPN構成プロファイルが安定して稼働するようになったのでその歴史に幕を閉じましたが、今でも古い端末で使っている方がいるようです。そんな中、とあるお問い合わせを受けまして、調査をした結果を記しておきます。
iPhone XSくらいの世代より、iPhoneは物理SIM (USIM)と電磁的SIM(e-SIM)のデュアルスロット構成となっており、デュアルSIMが可能となりました。e-SIMは旅行先などでデータ回線が必要な際などに、さっと契約できて使えるので便利なものではあります。USIM側とe-SIM側の両方でLTEを掴む、DSDLが可能です。
しかし、ひとつだけ問題があるようです。それは、USIM側にAPN構成プロファイルを適用していた場合、e-SIMがインストールされて有効になっていると、APN構成プロファイルが読まれずUSIM側のデータ通信が不能となる問題です。
これは、現在のiOSのCommCenterが以下のようなフローでAPNを処理していることが原因のようです。
- e-SIMのAPN構成をチェックし、APNがマニュアル入力されていればそれを優先して適用する。
- e-SIMのHNI (Home Network Identification)に合致するAPN構成が内蔵のものにあった場合、それを適用する。
- USIMの内蔵APN構成をチェックし、APNのマニュアル入力が許可されているHNIで、かつAPNがマニュアル入植されていればそれを優先して適用する。
- USIMのHNIに合致するAPN構成が内蔵のものにあった場合、それを適用する。
このフローの中で、APN構成プロファイルは1回も出てこないことがポイントです。本来、シングルSIMのSKUでは、以下のようなフローで優先順位が決められています。
- APN構成プロファイルがインストールされているかチェックし、存在していればそれを優先して適用する。
- USIMの内蔵APN構成をチェックし、APNのマニュアル入力が許可されているHNIで、かつAPNがマニュアル入力されていればそれを優先して適用する。
- USIMのHNIに合致するAPN構成が内蔵のものにあった場合、それを適用する。
なぜこのような優先順位になっているのでしょう? それは答えとしては簡単で、現在のAPN構成プロファイルにはHNIを決定する要素がひとつも含まれていないからです。
APN構成プロファイルを使用するのは、公式キャリアではない主にMVNO事業者などです。例えば、『LINEモバイル』に接続するための構成プロファイルの主要要素を抜き出すと、以下のようになっています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>APNs</key>
<array>
<dict>
<key>Name</key>
<string>line.me</string>
<key>Password</key>
<string>line</string>
<key>Username</key>
<string>line@line</string>
</dict>
</array>
<key>AttachAPN</key>
<dict>
<key>Name</key>
<string>line.me</string>
<key>Password</key>
<string>line</string>
<key>Username</key>
<string>line@line</string>
</dict>
<key>PayloadIdentifier</key>
<string>line.me</string>
<key>PayloadType</key>
<string>com.apple.cellular</string>
<key>PayloadUUID</key>
<string>C17AEA32-947E-4A8E-A020-E684F4B2D84B</string>
<key>PayloadVersion</key>
<real>1</real>
</dict>
</array>
</dict>
</plist>
これが例えば日本のソフトバンク回線のためのものであれば本来 HNI = 44020、すなわち MCC (Mobile Country Code) = 440, MNC (Mobile Network Code) = 20 という値が入っているべきです。そのような要素はどこにもなく、APNとユーザー名・パスワードだけが設定されているのです。
iOSはわりとセーフティに振られたOSで、ユーザー設定で曖昧な要素はそれを使わず、概ねシステム内蔵のものを信用して使用するように作られています。このため、先に述べたようにシステム側へのお伺いを立ててからユーザー設定を使用します。
e-SIMにもHNIがありますから、本来であればAPN構成プロファイル (※Apple公式には〝モバイル設定〟と呼ばれ、APNを構成するためだけのものではありません) にHNIの設定要素があり、そのHNIを元にUSIM/e-SIM双方のAPNを決定するフローになれば解決しそうな問題です。
パッチが作れるかどうかって? それは答えとしてはノーで、現在の単純なCommCenterの処理を鑑みるに、かなりのオーバーライドが必要となります。おそらく、APN編集可否のフラグを無視してAPN編集できるようにするほうが現実的でしょう(こうすればフロー的にも双方正しく読まれるようになる)。
そして、その前にjailbreakは全体的に下火となっており、昨今の強固なA1x/Txチップのセキュリティを突破できていません。我々の親愛なるAppleに、希望のフローを仕立て上げた嘆願書でも送りましょうか。