Copy & Sendでは、データの送受信に、iPhone OS 3.0から追加されたGameKitを使用しています。当初はBluetoothのみのサポートだったのですが、iPhone OS 3.1からは、WiFi経由での通信もできるようになっていることは、あまり認知されていないように思います。われわれも、Copy & Sendアプリケーションを開発している過程で、偶然気付いたというのが正直なところです。
便利な機能なのですが、いくつか制約もあるので、そのときの経験を元に、概要をまとめておきたいと思います。
開発者向けのドキュメントには明記されていない
Appleから公開されているGameKitに関するドキュメントは、以下の2つですが、いずれにも、WiFi機能のサポートについては説明されていません。
Developer Forums の発言によると、これらのドキュメントは、いずれも3.0レベルのまま更新されていないので、3.1から追加されたWiFi通信機能のことが記載されていないだけのようです。
GKPeerPickerControllerを使った場合は、Bluetoothのみ使用可能である
なぜか、GKPeerPickerControllerクラスを使って接続を確立する場合は、Bluetooth通信のみが使用可能なようです。
WiFi通信を使うためには、GKSessionを使って、自分で接続相手を探して接続する必要があります。
BluetoothとWiFiのどちらを使用するのかを明示的に選択することはできない
WiFiとBluetoothの両方が有効な状態の場合、どちらを使って通信するのかということを、明示的に選択することはできません。Game Kit Frameworkが、勝手に選んでしまいます。GKPeerPickerControllerを使わないで実装した場合は、暗黙的にWiFiを使ってしまうわけですね。
裏を返せば、ドキュメントに記載されていないこととあわせて考えると、GKPeerPickerControllerを使わないで実装した場合にのみ、偶然この機能に気付くということにもなります。
WiFiとBluetoothの状態を検知できない
GKPeerPickerControllerを使う場合、Bluetoothが無効な場合に、以下のようなalertメッセージが出ます。

GKPeerPickerControllerを使わない場合は、WiFiとBluetoothの状態を検知することができません。
Bluetoothをサポートしていないデバイスでも通信できる
同一WiFiネットワーク内に限定されますが、iPod touch 1Gでも、通信することができるのは、メリットかなと思います。
あと、iPhone Simulatorとも通信できるで、iPhoneの実機が1台しかなくても、テストが可能になることもうれしいですね。
Copy & Sendアプリケーションへの影響
Copy & Sendでは、GKPeerPickerControllerを使わないで実装しているので、以下のような影響を受けています。
このあたりについては、ユーザのみなさんに不便を感じさせてしまうところだと思うので、もう少しきめ細かい制御ができるようになると、ありがたいところです。
Copy & Sendを使用して場合は、お手数ですが、WiFiとBluetoothを予めONにしていただくよう、お願いいたします。
便利な機能なのですが、いくつか制約もあるので、そのときの経験を元に、概要をまとめておきたいと思います。
開発者向けのドキュメントには明記されていない
Appleから公開されているGameKitに関するドキュメントは、以下の2つですが、いずれにも、WiFi機能のサポートについては説明されていません。
Developer Forums の発言によると、これらのドキュメントは、いずれも3.0レベルのまま更新されていないので、3.1から追加されたWiFi通信機能のことが記載されていないだけのようです。
GKPeerPickerControllerを使った場合は、Bluetoothのみ使用可能である
なぜか、GKPeerPickerControllerクラスを使って接続を確立する場合は、Bluetooth通信のみが使用可能なようです。
WiFi通信を使うためには、GKSessionを使って、自分で接続相手を探して接続する必要があります。
BluetoothとWiFiのどちらを使用するのかを明示的に選択することはできない
WiFiとBluetoothの両方が有効な状態の場合、どちらを使って通信するのかということを、明示的に選択することはできません。Game Kit Frameworkが、勝手に選んでしまいます。GKPeerPickerControllerを使わないで実装した場合は、暗黙的にWiFiを使ってしまうわけですね。
裏を返せば、ドキュメントに記載されていないこととあわせて考えると、GKPeerPickerControllerを使わないで実装した場合にのみ、偶然この機能に気付くということにもなります。
WiFiとBluetoothの状態を検知できない
GKPeerPickerControllerを使う場合、Bluetoothが無効な場合に、以下のようなalertメッセージが出ます。

GKPeerPickerControllerを使わない場合は、WiFiとBluetoothの状態を検知することができません。
Bluetoothをサポートしていないデバイスでも通信できる
同一WiFiネットワーク内に限定されますが、iPod touch 1Gでも、通信することができるのは、メリットかなと思います。
あと、iPhone Simulatorとも通信できるで、iPhoneの実機が1台しかなくても、テストが可能になることもうれしいですね。
Copy & Sendアプリケーションへの影響
Copy & Sendでは、GKPeerPickerControllerを使わないで実装しているので、以下のような影響を受けています。
- そのときの状況により、WiFiとBluetoothのどちらで通信されるのかを予測することはできません。
- WiFiとBluetoothの両方が無効な状態であっても、そのことをユーザに通知することができません。
このあたりについては、ユーザのみなさんに不便を感じさせてしまうところだと思うので、もう少しきめ細かい制御ができるようになると、ありがたいところです。
Copy & Sendを使用して場合は、お手数ですが、WiFiとBluetoothを予めONにしていただくよう、お願いいたします。
通りすがりの物ですが,ご教示いただけるとありがたいです.
上記の記事の中に "同一WiFiネットワーク内に限定" との記載が有りますが,これはやはり,それぞれの iPhone は AP に接続し,同一のネットワークにぶら下がっている状態での WiFi 接続が前提になるのでしょうか?
それとも,WiFi でも直接 iPhone 同士がアドホックで通信可能ということなのでしょうか?
TB3さん
コメントありがとうございます。Copy & Sendで実現できたことをベースに回答いたします。
> 上記の記事の中に "同一WiFiネットワーク内に限定" との記載が有りますが,これはやはり,それぞれの iPhone は AP に接続し,同一のネットワークにぶら下がっている状態での WiFi 接続が前提になるのでしょうか?
GameKitはBonjourベースなので、Bonjourで名前解決できることが前提ということになると思います。(原則、ルータを超えられないはずです)
ご参考: Bonjour - Wikipedia
Copy & Sendでは、同一WiFiネットワーク内にあるiPod touch 1Gや、iPhone Simulatorとの接続はできています。
> それとも,WiFi でも直接 iPhone 同士がアドホックで通信可能ということなのでしょうか?
GameKitには、WiFiでアドホックネットワークを作る機能はありませんので、Bluetoothでのみ可能ということになるかと思います。
以上、ご参考になれば幸いです。