32
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

iOS 14でローカルネットワークの利用

はじめに

iOS14からローカルネットワークへの通信にユーザの許可が必要になりました。
例えば、ローカルネットワークに存在する機器を自動検出するために、ブロードキャストやマルチキャストを利用すると、ユーザに以下のようなアラートダイアログが表示されます。iOS14では、ユーザに許可を求めるようになっただけかと思ったのですが、機能によっては、実装の変更やAppleへの申請が必要です。詳細は、参考文献にあげたURLを参照ください。
LocalNetworkPermission.png

iOS14でローカルネットワーク通信に許可が必要な機能

"Support local network privacy in your app (WWDC2020)"において、ローカルネットワークへの通信に関して、ユーザに許可がいる場合は、以下と説明されています。

ユーザの許可が必要
  • TCP/UDPでローカルネットワークのホストに通信
  • Bonjourでの検索と広告
  • IPマルチキャスト、ブロードキャスト、ICMPでの通信

NeedLocalNetworkPermission.png

開発者が変更する必要があること

ローカルネットワークを利用する場合、開発者として必要なことは以下です。

1. ローカルネットワークの許可ダイアログの説明文の追加

アプリでローカルネットワークの許可が必要な時に、以下のダイアログが表示されます。何も設定していないと、はじめにのような図の標準的な説明文が表示されます。Info.plistに説明文を入れることで、このダイアログに説明文を追加することができます。アプリで必要な理由をユーザに説明することができます。

LocalNetworkPermission説明文.png

具体的には、XcodeでInfo.plistを編集し、Privacy - Local Network Usage Descriptionの値が説明文を追加します。
Info.plist.png

Info.plistのファイルは、以下のようになります。

Info.plist
<key>NSLocalNetworkUsageDescription</key>
 <string>この部分に説明を記載してください。</string>

2. Bonjourで検索するサービスの追加

Bonjourでサービスを検索する時には、Info.plistに検索するサービス名を記載します。ここで、記載したサービスは、Bonjourで検出できるようになります。XcodeでInfo.plistを編集し、Bonjour servicesに検索するサービスを追記します。配列になっているので、複数記載することが出来ます。

Bonjour.png

Info.plist
<key>NSBonjourServices</key>
<array>
 <string>_ipp._tcp.</string>
 <string>_printer._tcp.</string>
</array>

3. ブロードキャスト/マルチキャスト通信が必要な場合

Multicast Networking Entitlement申請

上記以外のブロードキャスト/マルチキャスト通信が必要な場合、AppleにアプリIDごとに申請が必要です。具体的には、「マルチキャストネットワークエンタイトルメント申請(Multicast Networking Entitlement Request)」から申請できます。
iOSシミュレータおよびiPadOSシミュレータでは、この許可なしで通信できます。しかし、実機では、この許可がないと通信できません。シュミレータで通信できるが、実機で通信できない場合には、この許可が必要かを確認してみてください。

Multicast Networking Entitlement取得後の設定方法

AppleからMulticast Networking Entitlementを取得した後、いくつか設定が必要です。その設定方法を書いておきます。

対象アプリのCapabilitiesの追加 (Apple Developer)

対象のアプリIDを選びます。具体的には、以下の図のApple DeveloperのCertificates, Identifiers & ProfilesIdentifiersから対象のアプリを選択します。
現時点のURLは、https://developer.apple.com/account/resources/identifiers/list です。

Identifiers.png

対象のアプリIDを選択するとEdit your App ID Configurationでアプリの設定変更ができます。
Multicast Networking Entitlementを取得したアプリは、以下の図のようにAdditional Capabilitiesが選べるようになるので、Multicast Networkingを選択します。

Capability.png

対象アプリのCapabilitiesの追加 (Apple Developer)

Xcodeでアプリ名.entitlementsのファイルを選択します。以下の図のように、keycom.apple.developer.networking.multicastを、value1を入れます。
これでCapabilityの設定は完了です。

entitlements.png

以下のファイルでの記載方法です。

アプリ名.entitlements
<key>com.apple.developer.networking.multicast</key>
<true/>

参考文献

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
32
Help us understand the problem. What are the problem?