{
  "name": "simctl",
  "subcommands": [
    {
      "name": "addmedia",
      "description": "Add photos, live photos, videos, or contacts to the library of a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "path",
          "is_variadic": true
        }
      ]
    },
    {
      "name": "boot",
      "description": "Boot a device or device pair",
      "options": [
        {
          "names": [
            "--arch"
          ],
          "description": "Specify the architecture to use when booting the simulator (eg: 'arm64' or 'x86_64')"
        },
        {
          "names": [
            "--disabledJob"
          ],
          "description": "Disables the given launchd job. Multiple jobs can be disabled by passing multiple flags"
        },
        {
          "names": [
            "--enabledJob"
          ],
          "description": "Enables the given launchd job when it would normally be disabled. Multiple jobs can be enabled by passing multiple flags"
        }
      ],
      "args": [
        {
          "name": "device"
        }
      ]
    },
    {
      "name": "clone",
      "description": "Clone an existing device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "new name"
        },
        {
          "name": "destination device set",
          "is_variadic": true
        }
      ]
    },
    {
      "name": "create",
      "description": "Create a new device",
      "args": [
        {
          "name": "name"
        },
        {
          "name": "device type id",
          "description": "A valid available device type. Find these by running 'xcrun simctl list devicetypes'. Examples: ('iPhone X', 'com.apple.CoreSimulator.SimDeviceType.iPhone-X')"
        },
        {
          "name": "runtime id",
          "description": "A valid and available runtime. Find these by running 'xcrun simctl list runtimes'. If no runtime is specified the newest runtime compatible with the device type is chosen. Examples: ('watchOS3', 'watc",
          "is_variadic": true
        }
      ]
    },
    {
      "name": "delete",
      "description": "Delete specified devices, unavailable devices, or all devices",
      "args": [
        {
          "name": "device",
          "is_variadic": true
        },
        {
          "name": "unavailable",
          "description": "Specifying unavailable will delete devices that are not supported by the current Xcode SDK"
        },
        {
          "name": "all"
        }
      ]
    },
    {
      "name": "diagnose",
      "description": "Collect diagnostic information and logs",
      "options": [
        {
          "names": [
            "-b"
          ],
          "description": "Do NOT show the resulting archive in a Finder window upon completion"
        },
        {
          "names": [
            "-X"
          ],
          "description": "Run all diagnostics with no timeout. It ignores the --timeout value if it is specified"
        },
        {
          "names": [
            "--timeout"
          ],
          "description": "Specify a duration (in seconds) to wait for the log collection before timeout"
        },
        {
          "names": [
            "--output"
          ],
          "description": "Specify the output directory. If not provided the temporary directory is used"
        },
        {
          "names": [
            "--no-archive"
          ],
          "description": "Do not create an archive, leave the collected files uncompressed"
        },
        {
          "names": [
            "--all-logs"
          ],
          "description": "Include all device logs, even for non-booted devices"
        },
        {
          "names": [
            "--data-containers"
          ],
          "description": "Include booted device(s) data directory. Warning: May include private information, app data containers, and increases the size of the archive! Default is NOT to collect the data container"
        },
        {
          "names": [
            "--udid"
          ],
          "description": "Collect diagnostics only from the specified device. This option may be specified more than once to consider multiple devices. The --all-logs option causes all --udid options to be ignored"
        }
      ]
    },
    {
      "name": "erase",
      "description": "Erase a device's contents and settings",
      "args": [
        {
          "name": "device",
          "is_variadic": true
        },
        {
          "name": "all",
          "description": "Specifying all will erase all existing devices"
        }
      ]
    },
    {
      "name": "get_app_container",
      "description": "Print the path of the installed app's container",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "app bundle identifier"
        },
        {
          "name": "container",
          "description": "Optionally specify the container. Defaults to app.\napp                 The .app bundle\ndata                The application's data container\ngroups              The App Group containers\n<group identifi",
          "suggestions": [
            "app",
            "data",
            "groups",
            "<group identifier>"
          ]
        }
      ]
    },
    {
      "name": "getenv",
      "description": "Print an environment variable from a running device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "variable name"
        }
      ]
    },
    {
      "name": "help",
      "description": "Prints the usage for a given subcommand"
    },
    {
      "name": "icloud_sync",
      "description": "Trigger iCloud sync on a device",
      "args": [
        {
          "name": "device"
        }
      ]
    },
    {
      "name": "install",
      "description": "Install an app on a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "path"
        }
      ]
    },
    {
      "name": "install_app_data",
      "description": "Install an xcappdata package to a device, replacing the current contents of the container",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "path to xcappdata package"
        }
      ]
    },
    {
      "name": "io",
      "description": "Set up a device IO operation",
      "subcommands": [
        {
          "name": "enumerate",
          "description": "Lists all available IO ports and descriptor states",
          "options": [
            {
              "names": [
                "--poll"
              ],
              "description": "Poll after enumeration"
            }
          ]
        },
        {
          "name": "poll",
          "description": "Polls all available IO ports for events"
        },
        {
          "name": "recordVideo",
          "description": "Records the display to a QuickTime movie at the specified file or url",
          "options": [
            {
              "names": [
                "--codec"
              ],
              "description": "Specifies the codec type: 'h264' or 'hevc'. Default is 'hevc'"
            },
            {
              "names": [
                "--display"
              ],
              "description": "iOS: supports 'internal' or 'external'. Default is 'internal'. tvOS: supports only 'external' watchOS: supports only 'internal'"
            },
            {
              "names": [
                "--mask"
              ],
              "description": "For non-rectangular displays, handle the mask by policy: ignored: The mask is ignored and the unmasked framebuffer is saved. alpha: Not supported, but retained for compatibility; the mask is rendered "
            },
            {
              "names": [
                "--force"
              ],
              "description": "Force the output file to be written to, even if the file already exists"
            }
          ],
          "args": [
            {
              "name": "file or url"
            }
          ]
        },
        {
          "name": "screenshot",
          "description": "Saves a screenshot as a PNG to the specified file or url(use '-' for stdout)",
          "options": [
            {
              "names": [
                "--type"
              ],
              "description": "Can be 'png', 'tiff', 'bmp', 'gif', 'jpeg'. Default is png"
            },
            {
              "names": [
                "--display"
              ],
              "description": "iOS: supports 'internal' or 'external'. Default is 'internal'. tvOS: supports only 'external' watchOS: supports only 'internal'. You may also specify a port by UUID"
            },
            {
              "names": [
                "--mask"
              ],
              "description": "For non-rectangular displays, handle the mask by policy: ignored: The mask is ignored and the unmasked framebuffer is saved. alpha: The mask is used as premultiplied alpha. black: The mask is rendered"
            }
          ],
          "args": [
            {
              "name": "file or url"
            }
          ]
        }
      ],
      "args": [
        {
          "name": "device"
        }
      ]
    },
    {
      "name": "keychain",
      "description": "Manipulate a device's keychain",
      "subcommands": [
        {
          "name": "add-root-cert",
          "description": "Add a certificate to the trusted root store",
          "args": [
            {
              "name": "path"
            }
          ]
        },
        {
          "name": "add-cert",
          "description": "Add a certificate to the keychain",
          "args": [
            {
              "name": "path"
            }
          ]
        },
        {
          "name": "reset",
          "description": "Reset the keychain"
        }
      ]
    },
    {
      "name": "launch",
      "description": "Launch an application by identifier on a device",
      "options": [
        {
          "names": [
            "-w",
            "--wait-for-debugger"
          ]
        },
        {
          "names": [
            "--console"
          ],
          "description": "Block and print the application's stdout and stderr to the current terminal. Signals received by simctl are passed through to the application. (Cannot be combined with --stdout or --stderr)"
        },
        {
          "names": [
            "--console-pty"
          ],
          "description": "Block and print the application's stdout and stderr to the current terminal via a PTY. Signals received by simctl are passed through to the application. (Cannot be combined with --stdout or --stderr)"
        },
        {
          "names": [
            "--stdout"
          ],
          "description": "Redirect the application's standard output to a file",
          "takes_arg": true,
          "arg": {
            "name": "path"
          }
        },
        {
          "names": [
            "--stderr"
          ],
          "description": "Redirect the application's standard error to a file",
          "takes_arg": true,
          "arg": {
            "name": "path"
          }
        },
        {
          "names": [
            "--terminate-running-process"
          ],
          "description": "Terminate any running copy of the application. Note: Log output is often directed to stderr, not stdout"
        }
      ],
      "args": [
        {
          "name": "device"
        },
        {
          "name": "app bundle identifier"
        },
        {
          "name": "argv",
          "is_variadic": true
        }
      ]
    },
    {
      "name": "list",
      "description": "List available devices, device types, runtimes, or device pairs",
      "options": [
        {
          "names": [
            "-j",
            "--json"
          ],
          "description": "Print as JSON"
        },
        {
          "names": [
            "-e",
            "--no-escape-slashes"
          ],
          "description": "Encode slashes without escapes in JSON output"
        },
        {
          "names": [
            "-v"
          ],
          "description": "More verbose output"
        }
      ],
      "args": [
        {
          "name": "type",
          "suggestions": [
            "devices",
            "deviceTypes",
            "runtimes",
            "pairs"
          ]
        },
        {
          "name": "search term",
          "suggestions": [
            "available"
          ]
        }
      ]
    },
    {
      "name": "location",
      "description": "Control a device's simulated location",
      "subcommands": [
        {
          "name": "list",
          "description": "List available simulation scenarios"
        },
        {
          "name": "clear",
          "description": "Stop any running scenario and clear any simulated location"
        },
        {
          "name": "set",
          "description": "Set the location to a specific latitude and longitude",
          "args": [
            {
              "name": "lat,lon"
            }
          ]
        },
        {
          "name": "run",
          "description": "Run a simulated location scenario (use the list action to get a list of scenarios)",
          "args": [
            {
              "name": "scenario"
            }
          ]
        },
        {
          "name": "start",
          "description": "Set the location to a series of waypoints specified as 'lat,lon' pairs, interpolating between them over time.\nAt least two waypoints are required. Use '-' to read waypoints from stdin, one waypoint pe",
          "options": [
            {
              "names": [
                "speed"
              ]
            },
            {
              "names": [
                "distance"
              ]
            },
            {
              "names": [
                "interval"
              ]
            }
          ],
          "args": [
            {
              "name": "lat,lon",
              "is_variadic": true
            }
          ]
        }
      ],
      "args": [
        {
          "name": "device"
        },
        {
          "name": "empty"
        }
      ]
    },
    {
      "name": "logverbose",
      "description": "Enable or disable verbose logging for a device.\nNOTE: You may need to reboot the affected device before logging changes will be effective",
      "args": [
        {
          "name": "device",
          "description": "The device. If not provided all booted devices are affected"
        },
        {
          "name": "enable/disable",
          "description": "Enable or Disable verbose logging",
          "suggestions": [
            "enable",
            "disable"
          ]
        }
      ]
    },
    {
      "name": "openurl",
      "description": "Open a URL in a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "URL"
        }
      ]
    },
    {
      "name": "pair",
      "description": "Create a new watch and phone pair",
      "args": [
        {
          "name": "watch device"
        },
        {
          "name": "phone device"
        }
      ]
    },
    {
      "name": "pair_activate",
      "description": "Set a given pair as active",
      "args": [
        {
          "name": "pair"
        }
      ]
    },
    {
      "name": "pbcopy",
      "description": "Copy standard input onto the device pasteboard",
      "options": [
        {
          "names": [
            "-v"
          ]
        }
      ],
      "args": [
        {
          "name": "device of 'host'"
        }
      ]
    },
    {
      "name": "pbpaste",
      "description": "Print the contents of the device's pasteboard to standard output",
      "options": [
        {
          "names": [
            "-v"
          ]
        }
      ],
      "args": [
        {
          "name": "device of 'host'"
        }
      ]
    },
    {
      "name": "pbsync",
      "description": "Sync the pasteboard content from one pasteboard to another",
      "options": [
        {
          "names": [
            "-p"
          ],
          "description": "Causes simctl to use promise data for secondary types.  simctl will continue to run to provide that promise data until something else replaces it on the pasteboard"
        },
        {
          "names": [
            "-v"
          ]
        }
      ],
      "args": [
        {
          "name": "source device or 'host'"
        },
        {
          "name": "destination device or 'host'"
        }
      ]
    },
    {
      "name": "privacy",
      "description": "Grant, revoke, or reset privacy and permissions",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "action",
          "suggestions": [
            "grant",
            "revoke",
            "reset"
          ]
        },
        {
          "name": "service",
          "suggestions": [
            "all",
            "calendar",
            "contacts-limited",
            "contacts",
            "location",
            "location-always",
            "photos-add",
            "photos",
            "media-library",
            "microphone",
            "motion",
            "reminders",
            "siri"
          ]
        },
        {
          "name": "bundle identifier",
          "description": "The bundle identifier of the target application"
        }
      ]
    },
    {
      "name": "push",
      "description": "Send a simulated push notification",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "bundle identifier",
          "description": "The bundle identifier of the target application If the payload file contains a 'Simulator Target Bundle' top-level key this parameter may be omitted. If both are provided this argument will override t"
        },
        {
          "name": "json file",
          "description": "Path to a JSON payload or '-' to read from stdin. The payload must:\n- Contain an object at the top level.\n- Contain an 'aps' key with valid Apple Push Notification values.\n- Be 4096 bytes or less",
          "suggestions": [
            "-"
          ]
        }
      ]
    },
    {
      "name": "rename",
      "description": "Rename a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "name"
        }
      ]
    },
    {
      "name": "runtime",
      "description": "Perform operations on runtimes",
      "subcommands": [
        {
          "name": "add",
          "description": "Add a runtime disk image to the secure storage area. The image will be staged, verified, and mounted. When possible the image file will be cloned so no additional disk space will be used. If stdout is",
          "options": [
            {
              "names": [
                "-m",
                "--move"
              ],
              "description": "Remove the original file if the image is added successfully. If the image cannot be staged or the add fails the original is not removed"
            },
            {
              "names": [
                "-a",
                "--async"
              ],
              "description": "Print the UUID of the new image then exit, do not wait on the results of the add operation"
            }
          ],
          "args": [
            {
              "name": "path"
            }
          ]
        },
        {
          "name": "delete",
          "description": "Delete a simulator runtime from the secure storage area. If runtime is a disk image any booted simulators are shutdown and the disk is unmounted first. Use the alias 'all' to delete all images",
          "options": [
            {
              "names": [
                "-d",
                "--notUsedSinceDays"
              ],
              "description": "Delete images not used within the past <days> days"
            },
            {
              "names": [
                "-n",
                "--dry-run"
              ],
              "description": "Print what images would be deleted without actually deleting anything"
            }
          ],
          "args": [
            {
              "name": "identifier"
            }
          ]
        },
        {
          "name": "verify",
          "description": "Re-verify the signature of a given runtime",
          "args": [
            {
              "name": "identifier"
            }
          ]
        },
        {
          "name": "list",
          "options": [
            {
              "names": [
                "-v"
              ],
              "description": "Print more verbose output"
            },
            {
              "names": [
                "-j",
                "--json"
              ],
              "description": "Print as JSON"
            }
          ]
        },
        {
          "name": "match list",
          "description": "List the SDK build to runtime build mapping rules for the selected Xcode. Preferred means the runtime was either bundled with Xcode, exactly matched your SDK version, or the downloadable index indicat",
          "options": [
            {
              "names": [
                "-v"
              ],
              "description": "Verbose mode. Includes the full preferred build map, user override map, and known SDK names"
            },
            {
              "names": [
                "-j",
                "--json"
              ],
              "description": "Print as JSON"
            }
          ]
        },
        {
          "name": "match set",
          "description": "Override the SDK to runtime build mapping. This controls which build of a given runtime Xcode will prefer for building and running when using that SDK. This matters most often during Beta releases whe",
          "options": [
            {
              "names": [
                "--default"
              ],
              "description": "Clear the override for the given SDK and revert to default behavior"
            },
            {
              "names": [
                "--sdkBuild"
              ],
              "description": "Explicitly specify the SDK build, eg for an Xcode other than the selected Xcode"
            }
          ],
          "args": [
            {
              "name": "sdk canonical name"
            },
            {
              "name": "runtime build"
            }
          ]
        }
      ]
    },
    {
      "name": "shutdown",
      "description": "Shutdown a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "all",
          "suggestions": [
            "all"
          ]
        }
      ]
    },
    {
      "name": "spawn",
      "description": "Spawn a process by executing a given executable on a device",
      "options": [
        {
          "names": [
            "-w",
            "--wait-for-debugger"
          ]
        },
        {
          "names": [
            "-s",
            "--standalone"
          ]
        },
        {
          "names": [
            "-a",
            "--arch"
          ]
        }
      ],
      "args": [
        {
          "name": "device"
        },
        {
          "name": "path to executable"
        },
        {
          "name": "argv",
          "is_variadic": true
        }
      ]
    },
    {
      "name": "status_bar",
      "description": "Set or clear status bar overrides",
      "subcommands": [
        {
          "name": "list",
          "description": "List existing overrides"
        },
        {
          "name": "clear",
          "description": "Clear all existing status bar overrides"
        },
        {
          "name": "override",
          "description": "Set status bar override values, according to these flags. You may specify any combination of these flags (at least one is required)",
          "options": [
            {
              "names": [
                "--time"
              ],
              "description": "Set the date or time to a fixed value. If the string is a valid ISO date string it will also set the date on relevant devices"
            },
            {
              "names": [
                "--dataNetwork"
              ],
              "description": "If specified must be one of 'hide', 'wifi', '3g', '4g', 'lte', 'lte-a', 'lte+', '5g', '5g+', '5g-uwb', or '5g-uc'"
            },
            {
              "names": [
                "--wifiMode"
              ],
              "description": "If specified must be one of 'searching', 'failed', or 'active'"
            },
            {
              "names": [
                "--wifiBars"
              ],
              "description": "If specified must be 0-3"
            },
            {
              "names": [
                "--cellularMode"
              ],
              "description": "If specified must be one of 'notSupported', 'searching', 'failed', or 'active'"
            },
            {
              "names": [
                "--cellularBars"
              ],
              "description": "If specified must be 0-4"
            },
            {
              "names": [
                "--operatorName"
              ],
              "description": "Set the cellular operator/carrier name. Use '' for the empty string"
            },
            {
              "names": [
                "--batteryState"
              ],
              "description": "If specified must be one of 'charging', 'charged', or 'discharging'"
            },
            {
              "names": [
                "--batteryLevel"
              ],
              "description": "If specified must be 0-100"
            }
          ]
        }
      ],
      "args": [
        {
          "name": "device"
        }
      ]
    },
    {
      "name": "terminate",
      "description": "Terminate an application by identifier on a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "app bundle identifier"
        }
      ]
    },
    {
      "name": "ui",
      "description": "Get or Set UI options",
      "subcommands": [
        {
          "name": "appearance",
          "description": "When invoked without arguments prints the current user interface appearance style:\nlight\nThe Light appearance style.\ndark\nThe Dark appearance style.\nunsupported\nThe platform or runtime version do not "
        },
        {
          "name": "increase_contrast",
          "description": "When invoked without arguments prints whether the Increase Contrast mode is currently enabled:\nenabled\nIncrease Contrast is enabled.\ndisabled\nIncrease Contrast is disabled.\nunsupported\nThe platform or"
        },
        {
          "name": "content_size",
          "description": "When invoked without arguments prints the current preferred content size category, from the following possible values:"
        }
      ],
      "args": [
        {
          "name": "device"
        }
      ]
    },
    {
      "name": "uninstall",
      "description": "Uninstall an app from a device",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "app bundle identifier"
        }
      ]
    },
    {
      "name": "unpair",
      "description": "Unpair a watch and phone pair",
      "args": [
        {
          "name": "pair UUID"
        }
      ]
    },
    {
      "name": "upgrade",
      "description": "Upgrade a device to a newer runtime",
      "args": [
        {
          "name": "device"
        },
        {
          "name": "runtime id"
        }
      ]
    }
  ]
}
