ダーヤス.com プレミアム

ダーヤス.comにようこそ。プレミアムな情報で、ワークライフバランスの充実を図りませんか。

IPv6に接続したiOSでクラッシュする理由でアプリリジェクト(Xcode)

      2018/02/14

3年前のアプリの修正をして審査に提出していたら、見たこともない理由で拒絶を食らってそれを解決できないでいますので、とりあえずメモ。

IPv6に接続した環境でクラッシュするとリジェクト

理由はこんな感じです。

Performance - 2.1

Your app crashed on iPad and iPhone running iOS 10.1.1 connected to an IPv6 network.

Specifically, the app crashed when we tapped the Take a Photo button.

We have attached detailed crash logs to help troubleshoot this issue.

Next Steps

Please revise your app and test it on a device while connected to an IPv6 network (all apps must support IPv6) to ensure that it runs as expected.

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking.

For information on how to symbolicate and read a crash log, please see Tech Note TN2151 Understanding and Analyzing Application Crash Reports.

If you have difficulty reproducing this issue, please try testing the workflow described in Testing Workflow with Xcode's Archive feature.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
- complete details of your rejection issue(s)
- screenshots
- steps to reproduce the issue(s)
- symbolicated crash logs - if your issue results in a crash log

crashlog-E0F18A10-35A0-4F82-B0DE-AB54AECB9243.txt
Screenshot 1112 124607.png
crashlog-9A726B41-4FFB-496E-8832-6BEACD258869.txt

クラッシュのログとか、どのボタンを押した瞬間にクラッシュするとか、テンプレート的な文章の中に具体的な内容も盛り込まれていて、ちゃんとテストして審査してくださっているのでしょう。

どうもIPv6に接続した環境でも動作しないとダメですよ、ということらしい。

それで、ご教示いただいたリンク先を読んでみると、IPv6のテスト環境というのは作れるらしい。

しかしながら、MacBook Airをwifiではなく、有線でネットに接続しなければならないようでした。

私はEthernet等の有線LANの環境を持っておらず、wifiのみしか所有していません。

詰んだか、、と思ったのですが、そうだUSBを介して私のwifi機器(WiMAX2+ Speed Wi-Fi NEXT WX02)と接続すればいいんじゃないか。

IPv6のテスト環境の構築

WX02を有線で接続

こうやってWX02を有線でUSBポートに接続。

そしてMacの「システム環境設定」-「ネットワーク」を開くと、「Wi-Fi接続済み」に加え、「WX02接続済み」という項目が表示された。

IPv6のテスト環境の構築

おお、なんかLANケーブルとかを使わなくてもいけそうな感じではないか?

この後、「システム環境設定」の「共有」をoptionキーを押しながら開く。

「共通する接続経路」としてWX02が設定されている。

IPv6に接続したiOSでクラッシュする理由でアプリリジェクト(Xcode)

ここで「インターネット共有」、ポートに「Wi-Fi」、「NAT64ネットワークを作成」にチェックを入れると、「インターネット共有:入」となる。

アイコンの形がこういう風に矢印のようになる。

ネットワーク共有時のアイコン

今度は、テストに使うiPhoneかiPadのiOS端末上で「設定」ー「Wi-Fi」を選択すると、「ネットワークを選択」欄に、MacBook Airの名前が出るので、それを選択。

すると、NAT64によってIPv4からIPv6にアドレス変換された内部ネットワーク環境にiOS端末が接続することになる。

iOS端末側でのDNSがIPv6アドレスを表示している。

IPv6のテスト環境の構築

多分これでIPv6環境は設定できたのではないのかなあと思うのだけど、どうだろう?

とりあえず審査官から送られてきた公式のIPv6設定環境のやり方通りにはしたつもりだけど。。。

それで再度アプリを実験してみると、特にクラッシュすることもなく、問題なく動作した。

こういった経緯を、iTunes Connectのアピールで説明してみた。スクリーンショットも交えながら。

アピールしても無駄だった

すると次の日に返事が来た。

新規のアプリ申請ではin Reviewになるまでに5日くらいはかかるけど、更新だと審査が開始されるまでの時間も、こういったメッセージでのやり取りも、若干レスポンスが早いきがする。

2. 1 PERFORMANCE: APP COMPLETENESS
Hello,

Thank you for your response.

We reviewed the Take a Photo feature and the app still crashes.

Performance - 2.5.5

Please ensure that your app is compatible with IPv6 networks.

The easiest way to test your app for IPv6 compatibility is to set up a local IPv6 network on your Mac. You can then connect to the network from your iOS devices to test IPv6 compatibility.

Please follow the step-by-step instructions provided in Supporting IPv6 DNS64/NAT64 Networks.

For additional information about supporting IPv6 networks, please refer to Supporting IPv6-only Networks.

Best regards,

App Store Review

いや、そのリンク先の手法通りに試してみたんだ、って丁寧に説明したじゃん。。。

なんでまた同じことを繰り返してくるんだ。。。

というわけで、「そのやり方を試してみたところこっちでは上手くいったのだから、これ以上こちらで何か対応しようがない。どうすればいいか助けてください」といった内容のメッセージを送ったところ、これが急に音信不通になるっていう。

しかしまあ、仮にIPv6テスト環境で動かなかったら具体的にどうやって修正していいのか、解決方法がわからないなあ。。

何しろ、私のアプリ、ネットワークに接続するアプリではないから、外部の環境がIPv4だろうがIPv6だろうが関係ない気がするのだけど、それでも外部のネットワーク環境によって左右されるものなのだろうか。

それとも、使っちゃいけない構文とか使っちゃってるのだろうか。

そもそもobjective-cで書いてると、iOS10とかでエラーが起きるとか?

Apple Developer Technical Supportを紹介される

そして音信不通になったと思ったら以下のようなメッセージが来ました。

Thank you for contacting App Review. We are unable to offer technical support, however, you may wish to contact Apple Developer Technical Support for assistance.

技術的なことはApple Developer Technical Support に聞け、と。

まあ聞いても無駄か。

例えばバイナリを全部このテクニカルサポートに全部送ったら直してくれるのだろうか。そんなことはないだろうし。

最初から書き直すかなー。でもまた同じ理由でリジェクトになったら手の打ちようがないしなあ。

アプリ開発は予期せぬエラーに悩まされます。

アピールすれば審査通過する場合もある

以下、2018年2月にアプリ申請したところ、またIPv6環境でクラッシュするからだめ、みたいなリジェクト理由をもらいました。

しかし、「いや、私は大丈夫だから、もう一度審査して見てください」とアピールしたところ、そのまま通過しました。

とりあえず駄目元でも、諦める前に「審査通過させてください」とお願いするメッセージを送ってみるといいかもしれませんね。

具体的には、まず以下のリジェクトメッセージを受信。

Guideline 2.1 - Performance -
App Completeness


Your app crashed on iPhone and iPad running iOS 11.2.5 connected to an IPv6 network when we tapped pins on the Map.



This occurred when your app was used:


- On Wi-Fi



We have attached detailed crash logs to help troubleshoot this issue.



Next Steps



To resolve this issue, please revise your app and test it on a device to ensure that it runs as expected.



Resources

For information on how to symbolicate and read a crash log, please review Tech Note TN2151 Understanding and Analyzing Application Crash Reports.


それに対し、私がこう返信。

Dear app review team,

Thank you for the message.
We have test it on iPhone with iOS 11.2.5 connected to our wifi.


However, we did not confront any errors.
Could you review it again?


Thank you in advance.



Best regards,


***

私の方ではクラッシュしないのでとりあえずもう一度審査してみてください、と。

そしたら以下のOKメッセージをいただきました。

Thank you for providing this information.



Upon further review, we have determined that your app no longer crashes.


特にバイナリの再提出とかもしてないのですが、先方では、クラッシュしなくなった模様。

なので、先方のインターネット環境によってクラッシュしてしまうこともあるのかも。

こればかりは運だと思うので、粘り強くやるしかないです。

だとしたら、仮にメッセージ送ってダメでも、とりあえずバージョンだけアップさせたバイナリを再提出して審査にかけてもらえば、今度はうまくいく場合もありうるということか。

あるいは、私はこの件に関して、別の方法も考えていたのですが、今回はすんなり通過してしまったので、その手法を試す機会はありませんでした。

 - アプリ開発