CatHand Blog

アプリ開発やMac弄り

iOS14でMultipeerConnectivity.frameworkがエラーになる

近距離で P2P 通信ができる MultipeerConnectivity.framework ですが、iOS14 でエラーが発生する場合があります。

MCNearbyServiceAdvertiserMCNearbyServiceBrowser 等が NSNetServicesErrorCode = "-72008"; 的なエラーを返します。

このエラーは Xcode12 でビルドしたものを iOS14 の実機デバイスで動作させると発生します。シミュレータでは発生しません。

Xcode11 でビルドしたものを iOS14 の実機デバイスで動作させた場合は以下のようなダイアログが表示され、許可すると正常に動作します。

f:id:cathandnya:20200918191538p:plain

ですが、Xcode12 でビルドすると実機でのみエラーになります…。

いろいろ調べて以下のドキュメントを見つけました。

developer.apple.com

一部のレガシーデバイスおよびソフトウェアとの互換性を維持するには、カスタムマルチキャストおよびブロードキャストプロトコルを使用する必要があります。これらの機能はAppにユーザーのローカルネットワークへの完全なアクセス権を与えるため、そのようなアクセス権には 「com.apple.developer.networking.multicast」制限付きエンタイトルメントが必要です。 注:有効なエンタイトルメントがなくてもiOSシミュレータおよびiPadOSシミュレータを使用してテストできますが、物理ハードウェアでマルチキャストおよびブロードキャストネットワークを使用するには有効なエンタイトルメントが必要です。

たぶんこれのこと? com.apple.developer.networking.multicast をエンタイトルメントに追加すると直りそうな気もしますが、このエンタイトルメントの使用には申請が必要で、簡単に試せません。

てか Xcode11 でビルドしたのと同じ挙動になってほしいので、修正されることを望みます。

↓解決編

iOS14でMultipeerConnectivity.frameworkがエラーになる件の解決編 - CatHand Blog