2010-06-24

iPhoneアプリ開発: [[NSHost currentHost] addresses]の戻り値がiPhone SDK 4とiPhone SDK 3.1.3で異なる

iPhone SDK(iPhone OS/iOS)を3.1.3から4に更新したところ、iPhone実機におけるPrivate APIの[[NSHost currentHost] addresses]の戻り値が変更されていました。

変更点まとめ:
  • IPv4アドレスとともにIPv6アドレスも返すようになった
  • WiFiオン時は、今までのようにIPv4グローバルアドレスは返さず、IPv6グローバルアドレスを返すようになった

以下、試したことの詳細です。
NSLog(@"%@", [[NSHost currentHost] addresses]);
のデバッグコンソール出力結果は次の通り。

iPhone SDK 3.1.3 and Wi-Fi off:
(
    "126.247.76.201",
    "127.0.0.1"
)

iPhone SDK 3.1.3 and Wi-Fi on:
(
    "192.168.1.32",
    "126.247.76.201",
    "127.0.0.1"
)

iPhone SDK 4 and Wi-Fi off:
(
    "126.234.33.96",
    "::1", //IPv6 loopback address
    "fe80::1%lo0", //IPv6 link local address
    "127.0.0.1"
)

iPhone SDK 4 and Wi-Fi on:
(
    "fe80::fa1e:dfff:fe46:4f3%en0", //IPv6 link local address
    "2001:c90:308:67fa:fa1e:dfff:fe46:4f3", //IPv6 global address
    "192.168.1.33",
    "::1", //IPv6 loopback address
    "fe80::1%lo0", //IPv6 link local address
    "127.0.0.1"
)
※リンクローカルアドレスとは:
リンクローカルアドレスは一つのリンク(サブネット)内でしか一意でない。そのため、ホストから見た場合、何らかの方法でネットワークインターフェースを指定してリンクを特定しなければならない。アドレス末尾に % 記号を介してインターフェースの番号や名称を付加するのが一般的である。
( IPv6 - Wikipedia より引用)

0 件のコメント: