先日、iOSアプリを審査に出したところ「iPadOSで起動時に通信エラーで進めない」とリジェクトされました。
これまでこのようなリジェクトを受けたことはなく、特にサーバーも問題なく動作していました。
では、なぜ審査落ちになったのでしょう。審査落ちのメッセージに添付されていたスクリーンショットを確認したところ、通信インジケーターが出ていませんでした。通常、ここにはWi-FiやCellularのアイコンが表示されているはずです。
一応この点について指摘してみましたが「このデバイスは正しくインターネットに接続している。詳しくは教えられない。」という回答があったのみでした。
iPhone/iPadに有線LANをつなぐ
Wi-FiやCellularの表示がなくても接続できる状況ってあるか…?いや、そういえばEthernetがありました。
実はiOS 9.3以降で、Lightning to USB3 Camera Adapterを使い、そこにUSB-Ethernetアダプタを繋ぐことでEthernet、つまり有線LANに繋ぐことができるようになっています。もちろん、USB-Cポートを備えたiPad Proであれば、直接USB-CにUSB-CのEthernetアダプタをつなぐこともできます。
なぜEthernetで通信エラーになっていたのか
LightningポートにEthernetを挿せるように環境を整えました。Ethernetアダプタをポートに接続すると、設定アプリにEthernetの項目が増えます。
この状態にすることで、問題を再現できました。
このアプリは通信前にFBNetworkReachabilityライブラリでインターネットの疎通をチェックしていますが、このライブラリはCellular接続でない場合はIPアドレスを検出する動作をしていましたが、これがEthernetの環境ではうまく動作していませんでした。
GitHubの最新のコードではこの問題は解消されていましたが、このバージョンはCocoaPodsにリリースされていません。
GitHubを直接参照する形で更新することもできましたが、ライブラリがObjective-Cで記述されていること、現在のアプリはiOS12以降対応になっている等を鑑みて、NWPathMonitorに置き換えて対応することにしました。
今後、通信の疎通にはEthernet接続もあるというのを考慮に入れるようにしたほうが良いと思いました。