xcrun simctl runtimeは、Xcodeにインストールされたシミュレータランタイム(各OSバージョンのディスクイメージ)を操作するサブコマンドである。 listオプションを使うと、インストール済みのランタイム一覧をコマンドラインから確認できる。

基本的な使い方

引数なしで実行すると、OS種別ごとにグループ化されたランタイムの一覧が表示される。

$ xcrun simctl runtime list
== Disk Images ==
-- iOS --
iOS 26.4.1 (23E254a) - 3406665B-D890-4FD9-8049-5CCEA3CE6C30 (Ready)
iOS 26.1 (23B86) - 64826868-DCBA-44BD-87E9-DB2B3493E5CC (Ready)
iOS 26.0 (23A343) - 260CDACB-4FDE-4256-88FE-6F28F65FC5F9 (Ready)
iOS 26.2 (23C54) - 979CE6D4-FEF5-4BCC-B422-8A260CF6E1BA (Ready)
iOS 26.5 (23F77) - 6AA84C51-722D-4002-B3AB-5EA021F23327 (Ready)
iOS 18.3.1 (22D8075) - C82AEB0B-3476-4364-B327-476E2B8A97A7 (Ready)
iOS 17.5 (21F79) - 88EADE1A-9246-4A89-85D2-99CF52F98EAB (Ready)

Total Disk Images: 7 (53.8G)

バージョン、ビルド番号、UUID、状態(Readyなど)に加えて、末尾に合計サイズも表示される。

詳細情報を表示する

-vオプションを付けると、各ランタイムのマウントパスやイメージの種類、サイズなどの詳細情報も表示される。

$ xcrun simctl runtime list -v
== Disk Images ==
-- iOS --
iOS 26.4.1 (23E254a) - 3406665B-D890-4FD9-8049-5CCEA3CE6C30
    State: Ready
    Image Kind: Patchable Cryptex Disk Image
    Signature State: Verified
    Deletable: YES
    Mounting Mode: Disk Image Mount
    Mount Policy: Automatic
    Mount Path: /Library/Developer/CoreSimulator/Volumes/iOS_23E254a
    Image Path: /System/Library/AssetsV2/...
    Size: 7.9G
    Bundle Path: /Library/Developer/CoreSimulator/Volumes/iOS_23E254a/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 26.4.simruntime
    Supported Architectures: arm64
    Parent Mount Path: /System/Library/AssetsV2/...

xcrun simctl runtime add/deleteでiOSシミュレータランタイムを追加・削除する で不要なランタイムを削除する際の判断材料として、個々のランタイムのサイズやマウントパスを確認したい場合に有用である。

JSON形式で出力する

-j--json)オプションで、結果をJSON形式で標準出力に出力できる。

$ xcrun simctl runtime list -j

実際に出力を確認したところ、トップレベルの構造は配列ではなく、ランタイムのUUIDをキーとするオブジェクト(連想配列)になっていた。

{
  "6AA84C51-722D-4002-B3AB-5EA021F23327" : {
    "build" : "23F77",
    "deletable" : true,
    "identifier" : "6AA84C51-722D-4002-B3AB-5EA021F23327",
    "kind" : "Patchable Cryptex Disk Image",
    "state" : "Ready",
    "version" : "26.5",
    ...
  },
  ...
}

配列だと思ってjq '.[0]'のように数値インデックスでアクセスしようとすると、Cannot index object with numberというエラーになるため、UUIDをキーとしたオブジェクトである点に注意する。 jq '.[]'で全要素を列挙する分には、配列・オブジェクトのどちらでも同様に動作する。

JSONをファイルに出力する

--json-outputでJSONの出力先ファイルを指定できる。 ただし実際に試したところ、-jを付けずに--json-outputだけを指定すると、標準出力には通常のテキスト形式の一覧が表示され、指定したファイルは中身が空のまま作成されるだけだった。

$ xcrun simctl runtime list --json-output=runtimes.json
== Disk Images ==
...

-j--json-outputを組み合わせて初めて、指定したファイルにJSONが書き出され、標準出力には何も表示されなくなる。

$ xcrun simctl runtime list -j --json-output=runtimes.json

同様に--json-fdでファイルディスクリプタを指定する場合も、-jとの併用が必要だった。

$ exec 3>runtimes.json
$ xcrun simctl runtime list -j --json-fd=3 3>&3

活用例: CIでのランタイム構成の確認

CI環境でどのランタイムがインストールされているかを確認したい場合、-jでJSON化してjqなどで加工すれば、特定のバージョンが存在するかのチェックや、サイズの大きいランタイムの洗い出しをスクリプトで自動化できる。

$ xcrun simctl runtime list -j | jq -r '.[].version'

インストール済みランタイムのバージョン一覧を機械的に取得できるため、想定外のランタイムが残っていないかをCIのステップに組み込んで継続的にチェックできる。