ハイライト
Apple は、Xcode から独立した App である Device Hub を導入しました。実機とシミュレータの管理を統合し、
devicectlコマンドラインツールと組み合わせることで、デバイス制御、診断収集、CI スクリプト連携を複数ツールのつぎはぎなしで実現できます。
主要内容
以前の問題:デバイス管理が複数ツールに分散していた
iOS 開発者なら誰でも経験があります。実機をテストするには Xcode の Devices and Simulators ウィンドウを開き、シミュレータをデバッグするには Simulator.app を開く。CI スクリプトを書くときは xcrun simctl と、実機向けの別のサードパーティツールを組み合わせる。デバイスが増えるとウィンドウを行き来し続けることになります。設定変更はさらに面倒で、Dark Mode、フォントサイズ、位置シミュレーションなど、どれもデバイス設定を深く探る必要がありました。
Device Hub がすること
Apple は Simulator.app の機能と実機管理を、Device Hub という独立 App に統合しました。Xcode 27 とともにインストールされ、Xcode を開かなくても直接使えます。
Device Hub の画面は3つの領域に分かれています。
- サイドバー(Sidebar):すべてのデバイスとシミュレータを一覧表示します。フィルタ、並べ替え、グループ化に対応し、右クリックでデバイスの再起動や iPhone と Apple Watch のワンクリックペアリングができます。
- キャンバス(Canvas):デバイス画面をリアルタイム表示します。クリック、ドラッグ、スクロールで直接操作でき、Mac のキーボード入力をデバイスへ送ることもできます。
- インスペクタ(Inspector):外観設定、位置シミュレーション、オーディオオプション、診断、App 管理、プロファイルを扱う5つのパネルを提供します。
実機とシミュレータは、この3つの領域で完全に同じように操作できます。2つの別々の手順を覚える必要はありません。
実際のワークフロー
セッションでは、完全なバグ再現フローが示されました。
Hassan は Apple Watch 上で UI バグを見つけます。横向きでテキストが切り詰められます。彼は Device Hub で次を行いました。
- Apple Watch を Mac にワイヤレスでペアリングする
- CoreLocation のログプロファイルをインストールする
- バグの状態をスクリーンショットで記録する
- sysdiagnose を実行してシステム診断を収集する
- App のデータコンテナをダウンロードして同僚に送る
Matt は資料を受け取り、Device Hub で対応する iPhone 17e シミュレータを開き、データコンテナを置き換え、シミュレータを横向きにし、位置を高地であるヨハネスブルグに設定し、フォントを最大にします。バグが再現しました。必要だった条件は3つ同時でした。横向き + 特定の位置 + 最大フォントサイズです。
以前は Xcode、Simulator.app、コマンドラインツール、Finder を行き来する必要がありました。今はすべて Device Hub 内で完了します。
詳細
Compact モードと Full モード
(01:45) Xcode でシミュレータへ build & run すると、Device Hub は自動的に Compact モードで起動します。ウィンドウにはデバイス画面と、Home、スクリーンショット、回転などの下部コントロールだけが表示されます。これらのボタンは文脈に応じて変わります。Apple TV では再生、一時停止、ナビゲーションキーが表示され、Apple Vision Pro では環境切り替えとカメラ移動、Apple Watch ではサイドボタンと Digital Crown が表示されます。
(02:32) 上部の展開ボタンをクリックすると Full モードに入り、すべての機能が使えます。ズーム、1:1 物理サイズ表示、Resize mode、キーボードキャプチャ、サイドバーのデバイス一覧、Inspector パネルが利用できます。
キャンバス操作
(03:20) キャンバスは直接操作に対応します。クリック、ドラッグ、スクロール、自然なトラックパッドジェスチャーを使えます。実機とシミュレータの操作方法は完全に同じです。
キャンバス上部のコントロールバーには、いくつかの実用的な機能があります。
- ズーム:画面表示を拡大、縮小します。
- 1:1 物理サイズ:実際のデバイスサイズで表示し、UI が実寸でどう見えるかを確認します。
- Resize mode:App のサイズを自由に変更し、UIKit の適応レイアウトのデバッグに使えます。
- Capture keyboard:Mac のキーボード入力をデバイスへ直接ルーティングし、ショートカットやハードウェアキーボード対応をテストします。
サイドバーでデバイスを整理する
(04:55) サイドバーにはデバイスとシミュレータの完全な一覧が表示されます。上部のフィルタメニューで表示するデバイスを制御でき、複数の条件で並べ替えやグループ化もできます。デバイスを右クリックすると、再起動や iPhone と Apple Watch シミュレータのペアリングなどのクイック操作があります。
(05:22) 複数デバイスのビューを同時に開けます。サイドバーで複数デバイスを選択してダブルクリックすると、それぞれが独立した Compact ウィンドウで開きます。異なる画面サイズの UI 適応を並べて確認するときに便利です。
インスペクタの5つのパネル
(06:14) 右側のインスペクタには3つのタブと5つのパネルがあります。
Settings タブ
- Appearance:Dark Mode、フォントサイズなど。変更は即時反映され、デバイス設定を探し回る必要はありません。
- Conditions:位置変化などの条件をシミュレートします。
- Audio:音量制御と入出力設定。
Diagnostics タブ
- デバイス上のすべての診断ログを表示します。クラッシュ、spins、その他の診断情報を含みます。App に性能問題やクラッシュが出たら、まずここを見ます。
Info/Apps/Profiles タブ
- Info:ストレージ、モデル、シリアル番号などの基本情報。
- Apps:App のインストール、アンインストール、管理。データコンテナのダウンロードや置き換えにも対応します。
- Profiles:構成プロファイルと Provisioning profiles を管理します。
データコンテナ管理
(11:46) Device Hub は App のデータコンテナを直接操作できます。できることは次のとおりです。
- Finder で保存済み状態を表示する
- 既知の基準状態へ復元する
- 後で使うためにスナップショットを取得する
- データコンテナをダウンロードして他の開発者に送る
- 受け取ったデータコンテナで現在の App データを置き換える
これはバグ再現で特に役立ちます。ユーザーや同僚のデバイスデータをシミュレータへ直接インポートすれば、再現環境の準備が整います。
devicectl コマンドラインツール
(15:52) Device Hub の基盤技術に対応するコマンドラインツールが devicectl です。CI/CD パイプラインなど、スクリプトや自動化に向いています。
よく使うコマンド例です。
# すべてのデバイスを一覧表示
xcrun devicectl list devices
# デバイスに App をインストール
xcrun devicectl device install app --device <デバイスID> ./MyApp.app
# Dark Mode と Light Mode を切り替える
xcrun devicectl device info settings --device <デバイスID>
# デバイスの詳細情報を取得
xcrun devicectl device info --device <デバイスID>
--json-output オプションは構造化 JSON を出力するため、スクリプトで解析しやすく、CI ワークフローにも統合しやすくなります。
重要な点:
list devices:接続されているすべてのデバイスの識別子と基本情報を取得します。device install app:実機とシミュレータで同じ構文を使う、統一されたインストールコマンドです。--json-output:構造化データを出力し、従来のプレーンテキスト出力に対する正規表現解析を置き換えます。- CLI と GUI は Device Hub の同じ基盤技術に基づくため、挙動が一致します。
実践アイデア
1. 1つのワークフローでバグ再現環境を作る
- すること:バグ報告を受け取ったら、Device Hub でユーザーのデバイス環境を素早く再現します。
- 価値がある理由:データコンテナ、位置、外観設定を組み合わせれば、数分で環境を完全に再現できます。「自分の環境では問題ない」という不毛なやり取りを減らせます。
- 始め方:Apps パネルでデータコンテナをダウンロードし、Settings パネルで位置とフォントサイズを調整し、スクリーンショット比較で再現を確認します。
2. 複数デバイスで UI 適応をテストする
- すること:iPhone SE、iPhone Pro Max、iPad の Compact ウィンドウを同時に開き、レイアウトを横並びで確認します。
- 価値がある理由:Device Hub の 1:1 物理サイズ表示により、実際のデバイスサイズで UI がどう見えるか分かります。
- 始め方:サイドバーで複数のシミュレータを選択し、ダブルクリックして独立ウィンドウを開きます。Resize mode と組み合わせて異なるサイズをテストします。
3. CI パイプラインのデバイス管理を標準化する
- すること:
simctlとサードパーティ実機ツールを混在させたスクリプトを、devicectlに置き換えます。 - 価値がある理由:1つのコマンド体系で実機とシミュレータを同時に管理でき、JSON 出力も解析しやすくなります。
- 始め方:CI 内の
xcrun simctlコマンドを段階的にxcrun devicectlへ置き換え、まず--json-outputで出力形式を検証します。
4. 診断収集を自動化する
- すること:テスト失敗時に sysdiagnose とログ収集を自動でトリガーします。
- 価値がある理由:Device Hub の診断パネルと
devicectlのログコマンドにより、診断収集を標準化できます。 - 始め方:UI テストスクリプトに sysdiagnose トリガー処理を追加し、失敗時に診断ファイルを自動でまとめます。
5. デバイス横断機能を連携デバッグする
- すること:Apple Watch + iPhone 連携機能を開発するとき、Device Hub で2台のデバイスをペアリングします。
- 価値がある理由:シミュレータの右クリックペアリングと実機のワイヤレスペアリングにより、通信リンクを Device Hub の1つの管理画面で扱えます。
- 始め方:サイドバーで右クリックして “Pair Nearby Device” を選び、指示に従ってペアリングを完了します。
関連セッション
- UIKit App をモダナイズする - Device Hub の Resize mode は、UIKit の適応レイアウトをデバッグする理想的な相棒です
- Simulator を最大限に活用する(WWDC 2019) - Simulator の従来機能を知り、Device Hub の改善と比較できます
- Xcode 27 - Device Hub は Xcode 27 とともに提供されるため、Xcode 全体の更新を知るのに役立ちます
- SwiftUI - SwiftUI のデバイス横断の適応レイアウトにも、Device Hub の複数サイズテスト機能が役立ちます
コメント
GitHub Issues · utterances