iOS9対応のために、IPv6 only NetworkでのiOSアプリの動作テスト方法を調べてみた



##概要
IPv6環境でのiOSアプリの動作テストを、Appleの公式ドキュメントを読んでやってみました。その設定方法をまとめた記事となります。ただし、2015年夏にまとめた情報ですので、今はもっといい方法が出てるかもしれません。

##背景
2016年6月1日以降、iOS9ではIPv4だけでなくIPv6環境で正しく動作するかを審査でチェックされます([2016/5/4 Supporting IPv6-only Networks](https://developer.apple.com/news/?id=05042016a))。
なお、IPv6対応の全体像は、以下の記事をとても参考にさせていただきました。ご参照ください。
[[Qiita]iOS9 で必要な IPv6 only Network への対応](http://qiita.com/shao1555/items/4433803419dfc72bf80b)

##iOSデバイスをIPv6で接続するようにする設定手順
以下の図([Apple公式ドキュメントより](https://developer.apple.com/library/prerelease/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html))のように、外部ネットワークからMacまでは有線でつなぎ、MacからiOSデバイスの間をDNS64/NAT64により、IPv6に変換してテストを行います。

![image](https://qiita-image-store.s3.amazonaws.com/0/57284/9d87572b-4242-a2c2-ce47-c925f2f27fdd.png)

###事前準備
1.使用するMacをOS X El Capitan(エルキャピタン)にアップデートしましょう。それ以前のOSではできません。
2.Macを有線LANでなくて、Wi-Fi経由でインターネットにつないでいる方は以下の準備が必要です。

####普段接続しているWi-Fiにつながらなくする
iOSデバイスとMacの設定を後ほどWi-Fiにします。その際に、普段Macが接続しているネットワークに勝手につながってしまい、有線LAN経由にならないので、面倒ですが、いったん設定を削除します。(テストが終わったらまたパスワード入れる必要があって面倒です汗)
1.ネットワーク環境設定で、「詳細」をクリック
2.普段接続しているネットワークを選択して、「-」をクリックして、設定を削除

![image](https://qiita-image-store.s3.amazonaws.com/0/57284/8dd26e5f-b857-b57b-671c-737e6ddbf92e.png)


####有線LANに接続
USBかThunderbolt経由で有線LANに接続するアダプタを用いて、LANとMacを接続。

![image](https://qiita-image-store.s3.amazonaws.com/0/57284/15621168-88d3-1e2f-523c-88e8bd42ee54.png)


### 設定本編
1.MacをインターネットにWi-Fiを使わずに接続
2.システム環境設定を起動
3.Optionキーを押しながら、「共有」を選択。その後もOptionキーは押したまま。
4.「インターネット共有」を選択
5.Optionキーを離す
6.「NAT64ネットワークを作成」を選択
7.MacLANに接続している方は、「Thunderbolt Ethernet」を選択肢てください。
8. MacからiOSデバイスに接続する方法として、「Wi-Fi」を選択

![image](https://qiita-image-store.s3.amazonaws.com/0/57284/86531e60-f185-985b-c4fc-61c567ddeccb.png)

9.「Wi-Fiオプション」を選択。セキュリティを「WPA2パーソナル」に設定し、適当なパスワードを設定
![image](https://qiita-image-store.s3.amazonaws.com/0/57284/c4583aec-2f46-50eb-fc5b-ea9a76cabf9b.png)

10.「インターネット共有を選択」。「インターネット共有」の◯が赤から緑に変化。

![image](https://qiita-image-store.s3.amazonaws.com/0/57284/2fbd93ff-a36c-57c1-e9d1-27e712ceb467.png)

11.iOSデバイスを、Wi-Fiオプションで設定したネットワークに接続。パスワードは先程自分で設定した内容。

##iPhoneがIPv6で接続できているかどうかの確認
###あれ、IPv6で接続テストになっていない?
「IPv6 接続 確認」などでググると、自分がIPv6で接続しているかIPv4で接続しているかを判定してくれるサイトがいくつも出てきます。
結論から言うと、それらのサイトではIPv4で接続していると表示されます。

「あれ、今の設定をしたからIPv6で繋がるはずでは?」

と思って最初困惑したのですが、特に問題無いです。

### MacのDNS64/NAT64が、IPv4とIPv6の変換をしている
というのも、IPv6環境はあくまでもiOSデバイスとMacの間だけで、Macから外のネットワークはIPv4になっているからです。
なので、先述のサイトではIPv4と表示されてしまったのです。

###Stack Overflowでの質問
同様の疑問を持たれている方が質問している人がいるので、抄訳を行いました。
以下のやり取りにも有りますが、先述のようのIPv6で繋がっていないと判定されてしまうことは、問題無いです。

####[Setting up IPv6 environment using OSX 10.11 Beta 5 (El Capitan)](http://stackoverflow.com/questions/31735402/setting-up-ipv6-environment-using-osx-10-11-beta-5-el-capitan) Asked by at [AFresh](http://stackoverflow.com/users/5175696/afresh) at 2015/07/30

>Appleのドキュメントの[Test for IPv6 DNS64/NAT64 Compatibility Regularly](https://developer.apple.com/library/prerelease/ios/documentation/ーNetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW16)の通りに設定したのに、IPv6を確認するサイトにアクセスしてみると、IPv6を使ってないと表示されてしまったよ。ちゃんと設定しているはずなのにおかしいな。誰か僕と同じようにはまってしまってる人はいないかな??

####Answer by [Sander Steffann](http://stackoverflow.com/users/813192/sander-steffann) at 2015/07/13
>君の設定は何も間違ってないと思うよ。NAT64を使うことで、内部のIPv6接続は外部のIPv4接続に変換している。だからIPv6接続のテストサイトではIPv6を使っているとは表示されていないんだ。

##実際にアプリで動作を確認する
ここまで設定を行えば、iOSデバイスがIPv6環境でインターネットに接続されています、この状態で動作の確認をすることでIPv6できちんと動作するかどうかを検証することができます。ちなみに私が関わっているアプリは問題なく動きました(^O^)
他の有名所のアプリも試してみましたけど、動かないものはみつからなかったです。意外と何も対応しなくても大丈夫なのかもです(私見)。