テクニカル ノートTN2277で、アプリがバックグラウンドになったときにあらゆる種類のネットワーク ソケットを閉じることが重要であると読みました。これには、おそらく GKSession も含まれます。
彼らは、バックグラウンドに移行するときに有効期限ハンドラーが必要であり、他のピアに「さようなら」と言わなければならない場合、ネットワーク コードを非同期的に呼び出す必要があると述べています。
GKSession sendData メソッドは非同期ですか、それともブロックですか?
iOS 6では、特定の状況でGKSessionがメインスレッドをブロックすることに問題があるようです。現時点では、エンタープライズGKSessionネットワーキングアプリでこれらのブロックの問題が発生しているため、iPadのプールをiOS 6に移動できません(ただし、iOS 5では発生しません)。またはそれ以前)。たとえば、サーバーiPadから同時に4つ以上のiPadにファイルを送信すると、動作がブロックされます。iOS 5では、接続されている最大15のクライアントに同時にファイルを問題なく送信できます。
また、最初のテストでは、iOS5と6のデバイスを組み合わせて使用すると、iOS5デバイスの後にiOS6デバイスが接続された場合、iOS6デバイスでメインスレッドがロックアップすることが示されました。
iOS Dev Centerでインシデントレポートを投稿しましたが、何も返事がありません...
11月30日更新:Appleから返信があり、iOS 6のGameKitのバグとして扱っており、調査中です。iOS 6(iOS 5以前ではない)でもGKSessionブロッキングの問題が発生している場合は、バグとして報告する必要があります。