夕方に Companion を開いて、QR を読み込んで、そのまま十分ほど待ったことがあります。画面は白いまま、エラーらしいエラーも出ませんでした。
Wi-Fi のアイコンは立っています。手元のブラウザでは同じプロジェクトが動いています。それなのに iPhone にだけ、何も降りてきませんでした。
そのとき私が最初にしたのはルーターの再起動で、次が Companion の入れ直しでした。どちらも効きませんでした。最後に設定アプリを開いて、ようやく分かりました。ローカルネットワークの許可が外れていたのです。
順番が逆だったと気づいたのは、十五分ほど溶かしたあとでした。以来、私はこう決めています。戻しにくい操作ほど、後回しにします。 再起動と再インストールは、確かめる順番のいちばん最後に置くようにしております。
「出てこない」と「出たあとで止まる」は別の話です
同じ「繋がらない」でも、二つはまったく違う場所で起きています。ここを分けずに手を動かすと、直ったのか偶然なのか分からなくなります。
| 症状 | 疑う層 | 最初に見る場所 |
|---|---|---|
| QR を読んでも白いまま/一覧に出ない | 端末とルーターのあいだの経路 | ローカルネットワークの許可 |
| 一度は表示されたのに数分で止まる | 端末側の省電力と画面消灯 | 低電力モード・自動ロック |
| Mac では動くが iPhone だけ出ない | iPhone 個別の設定 | プライベート Wi-Fi アドレス |
| 家では出ないが外では出る | ルーター側の分離設定 | ゲストネットワーク・AP 分離 |
最初の行と二行目を取り違えたまま再起動を繰り返すのが、いちばん時間を失う道でした。私は白いままなら経路、途中で止まるなら省電力、と口に出してから手を動かすようにしております。
ルーターか端末かを、一分で分けます
家のネットワークを疑う前に、家のネットワークを使わずに一度だけ試します。iPhone のインターネット共有をオンにして、手元のパソコンをその回線に繋ぎ、同じ QR をもう一度読みます。
ここで表示されたなら、iPhone と Companion の組み合わせ自体は生きています。原因は家のルーターの側にあります。表示されないなら、端末かアカウントの側です。
この一手で、確かめる範囲がおよそ半分になります。回線量を使いますので、確認が済んだらすぐ戻してください。
判定の結果は、その場でメモに一行だけ書き残すようにしています。翌週また同じ症状に会ったとき、前回どちらだったかを覚えている自信が私にはないからです。
iPhone 側で見る四つ
端末側と分かったら、設定アプリの中を上から順に見ていきます。四つとも、一度も触ったことがないまま切り替わっていることがあります。
| 確認する場所 | 何が起きるか | 戻し方 |
|---|---|---|
| プライバシーとセキュリティ > ローカルネットワーク | 同じ Wi-Fi 内の相手を見つけられなくなります | Companion のスイッチをオンに戻します |
| Wi-Fi > 接続中の SSID > プライベート Wi-Fi アドレス | 端末の識別子が変わり、ルーター側の許可一覧から外れます | その SSID だけ固定に切り替えます |
| バッテリー > 低電力モード | 画面を消したあとの通信が抑えられます | 検証のあいだだけオフにします |
| 一般 > VPN とデバイス管理 | 通信が別の経路へ回されることがあります | 確認のあいだだけ切断します |
いちばん多いのが、一行目のローカルネットワークでした。この許可は初回に一度だけ聞かれ、そこで「許可しない」を選ぶと、それ以降ダイアログは二度と出てきません。表示されない理由が画面のどこにも書かれないので、知らないと辿り着けない場所なのです。
iCloud プライベートリレーについては、一言だけ添えておきます。こちらは主に Safari と一部の通信が対象で、同じ Wi-Fi 内のやり取りを遮るものではありません。切り分けの対象に入れるのは、企業や学校で配られた構成プロファイルが入っている場合くらいだと考えております。
ルーター側で効いてくる二つ
端末側が白だったなら、次は家の側です。見るべきものは多くありません。実質、二つに絞れます。
ひとつめは AP アイソレーションです。機種によってプライバシーセパレータ、端末間通信の禁止といった名前で並んでいます。これがオンだと、同じ SSID に繋がっている端末同士がお互いを見つけられません。来客用のネットワークでは既定でオンになっていることが多く、私も一度これで詰まりました。
ふたつめは、繋ぎ先が思っていたものと違っている場合です。2.4GHz と 5GHz で SSID を分けている家庭では、パソコンと iPhone が別々の名前に繋がっていることがあります。メッシュ構成で別のノードに掴まれている場合も同じです。
| 設定 | よくある表示名 | 検証中の扱い |
|---|---|---|
| 端末間の通信禁止 | AP アイソレーション/プライバシーセパレータ | 一時的にオフ |
| 来客用ネットワーク | ゲスト SSID | 検証には使わない |
| バンドごとの SSID 分離 | 末尾に -A/-G が付く名前 | 両方を同じ側に揃える |
ここまでで直らないことは、私の場合ほとんどありませんでした。それでも残るようでしたら、そこで初めてルーターの再起動と Companion の入れ直しに進みます。順番としては、いちばん最後で構わないのです。
覚えたことは、自分のアプリに持ち帰れます
この回り道には、続きがあります。ローカルネットワークの許可は Companion だけの話ではなく、自分のアプリが同じネットワークの相手を探す場合にも必要になるからです。
Expo の設定では、app.json に用途の説明を書いておきます。これがないと、iOS 側は許可を求めるダイアログそのものを出しません。
{
"expo": {
"ios": {
"infoPlist": {
"NSLocalNetworkUsageDescription": "同じ Wi-Fi にあるスピーカーを探すために使用します。",
"NSBonjourServices": ["_myapp._tcp"]
}
}
}
}NSLocalNetworkUsageDescription は、許可を尋ねる画面にそのまま表示される文です。NSBonjourServices には、探しに行くサービスの種別を並べます。ここに書き漏らした種別は、許可が下りていても見つかりません。
書き方でひとつだけ気をつけていることがあります。文言は具体的な目的にするほうが通ります。「通信のために使用します」では、利用者は何を許すのか判断できません。先ほど見たとおり、この画面は一度きりです。断られたあとは設定アプリの奥へ行かないと戻せませんので、一度しか出ない画面には、一度で伝わる言葉を置く。 そう決めております。
私自身、公開しているアプリの説明文を後から書き直したことが何度かあります。最初に書いた文は、たいてい自分にしか意味が分からない言葉でした。
今日やることは一つだけです
設定アプリを開いて、プライバシーとセキュリティのローカルネットワークの画面を見てください。そこに Companion が並んでいて、スイッチがオンになっていることをご確認ください。今日はそれだけで十分です。
次に白い画面に出会ったとき、その記憶が最初の一分を短くしてくれます。私はそれで、夕方の十五分を取り戻せるようになりました。
読んでくださってありがとうございました。同じところで止まっている方の、回り道が少し短くなればと願っております。