simctlコマンドの事は知ってはいたのですが、詳細を把握していなかったので
一つ一つサブコマンドを実行して確かめてみました。

simctlとは

Xcodeに含まれる標準CLIツールで、主にシミュレータの管理を行うための機能を備えています。

simctlサブコマンド

simctlは単体で実行することはできず、サブコマンドで様々な機能を実行する事が出来ます。

help

ではまずxcrun simctl helpsimctlにどの様なサブコマンドがあるか確認してみます。

usage: simctl [--noxpc] [--set <path>] [--profiles <path>] <subcommand> ...
       simctl help [subcommand]
Command line utility to control the Simulator

For subcommands that require a <device> argument, you may specify a device UDID
or the special "booted" string which will cause simctl to pick a booted device.
If multiple devices are booted when the "booted" device is selected, simctl
will choose one of them.

Subcommands:
    create              Create a new device.
    clone               Clone an existing device.
    upgrade             Upgrade a device to a newer runtime.
    delete              Delete a device or all unavailable devices.
    pair                Create a new watch and phone pair.
    unpair              Unpair a watch and phone pair.
    pair_activate       Set a given pair as active.
    erase               Erase a device's contents and settings.
    boot                Boot a device.
    shutdown            Shutdown a device.
    rename              Rename a device.
    getenv              Print an environment variable from a running device.
    openurl             Open a URL in a device.
    addmedia            Add photos, live photos, or videos to the photo library of a device.
    install             Install an app on a device.
    uninstall           Uninstall an app from a device.
    get_app_container   Print the path of the installed app's container
    launch              Launch an application by identifier on a device.
    terminate           Terminate an application by identifier on a device.
    spawn               Spawn a process on a device.
    list                List available devices, device types, runtimes, or device pairs.
    icloud_sync         Trigger iCloud sync on a device.
    pbsync              Sync the pasteboard content from one pasteboard to another.
    pbcopy              Copy standard input onto the device pasteboard.
    pbpaste             Print the contents of the device's pasteboard to standard output.
    help                Prints the usage for a given subcommand.
    io                  Set up a device IO operation.

一つずつ見ていきましょう。

list

まずサブコマンドlistを試していきましょう。
listから見ておくと他のサブコマンドで必要となるパラメタが分かりやすくなります。

Usage: simctl list [-j | --json] [devices|devicetypes|runtimes|pairs]

それでは実行してみましょう

xcrun simctl list

以下の様な出力が得られたかと思います。

== Device Types ==
iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)
...
iPhone 7 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-7-Plus)
== Runtimes ==
iOS 8.1 (8.1 - 12B411) (com.apple.CoreSimulator.SimRuntime.iOS-8-1)
...
iOS 10.2 (10.2 - 14C89) (com.apple.CoreSimulator.SimRuntime.iOS-10-2)
== Devices ==
-- iOS 7.1 --
-- iOS 8.1 --
-- iOS 8.2 --
-- iOS 8.4 --
-- iOS 9.0 --
    iPhone 6s (F4CDAEBA-XXXX-4195-XXXX-11A4C27104B9) (Shutdown)
-- iOS 10.2 --
    iPhone 7 (31433DE1-XXXX-45D6-XXXX-6EABB3267930) (Shutdown)
    ...
    iPad Pro (12.9 inch) (6C6A46DA-XXXX-4E6A-XXXX-6D60757CB4AD) (Shutdown)
-- tvOS 10.1 --
    Apple TV 1080p (63349A78-XXXX-4EB0-XXXX-0D470E3C2404) (Shutdown)
-- watchOS 3.1 --
    Apple Watch Series 2 - 38mm (A097C17C-XXXX-4921-XXXX-39789FEC8367) (Shutdown)
    Apple Watch Series 2 - 42mm (6A8DEC7F-XXXX-4CA8-XXXX-1AADB91D3B18) (Shutdown)
-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-10-1 --
    iPhone 7 Plus (D07F86FF-XXXX-4BF1-XXXX-8FFD4C4EA321) (Creating) (unavailable, runtime profile not found)
    ...
== Device Pairs ==
8E098274-XXXX-4CBC-XXXX-C7561DFB3CDE (active, disconnected)
    Watch: Apple Watch Series 2 - 38mm (A097C17C-XXXX-4921-XXXX-39789FEC8367) (Shutdown)
    Phone: iPhone 7 (31433DE1-XXXX-45D6-XXXX-6EABB3267930) (Shutdown)
    ...
05DCD907-XXXX-4FC6-XXXX-E4B6C645285F (unavailable)
    Watch: Apple Watch Series 2 - 42mm (42D6B464-XXXX-42DC-XXXX-0197328E532A) (Shutdown)
    Phone: iPhone 7 Plus (FAF1B9DF-XXXX-47A5-XXXX-C0A80B424314) (Shutdown)

Device TypesとRuntimes

Device TypesはXcodeで扱えるシミュレータタイプの一覧です。
Runtimesはシミュレータで動作させる事のできるRuntimeの一覧です。

Xocdeでシミュレータを追加する際に選択するDevice TypeOS Versionと同じものが表示されているはずです。
Kobito.1UIXSS.png

Devices

Devicesは現在インストール済みのシミュレータの一覧になります。

XcodeのDevicesに表示されてるものと同じです。
Kobito.HJH0xF.png

Device Pairs

Device PairsはiPhoneとWatchのシミュレータのペアの一覧です。

XcodeでもWatchとのペアは確認できますが、一覧性としては個別にSimulatorを選択しなければならないXcodeのDevices画面よりsimctl listの方が分かりやすそうですね。
Kobito.ubvJf1.png

device/device type id/runtime id/pair UUIDについて

simctlコマンドでは実行時にdevice type idruntime idを指定する必要がある場合があります。
これらはlistで表示される一覧からも確認する事ができます。

deviceはシミュレータを一意に表すUDIDです。

-- iOS 9.0 --
    iPhone 6s (F4CDAEBA-XXXX-XXXX-XXXX-11A4C27104B9) (Shutdown)
-- iOS 10.2 --
    iPhone 5 (BA4350E7-XXXX-XXXX-XXXX-E6C96F29DFFE) (Booted)

ShutdownBootedの状態があり、device idをパラメタとして与える場合、
bootedを指定する事で起動してるシミュレータを指定することができます。
複数のシミュレータが起動している場合、その中から1つが選ばれます。
試してみた感じだと起動しているシミュレータの中で端末タイプが一番新しいものが選ばれてる様に見えました。

device type idであれば対象の端末の()で囲まれているcom.apple.CoreSimulator.SimDeviceType.***がそれにあたります。

iPhone 7 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-7-Plus)

runtime idについても同様に対象のランタイムの()で囲まれているxx.x - XXXXXがそれにあたります。

iOS 10.2 (10.2 - 14C89) (com.apple.CoreSimulator.SimRuntime.iOS-10-2)

pair UUID== Device Pairs ==の一覧で先頭から8E098274-XXXX-XXXX-XXXX-C7561DFB3CDE (active, disconnected)の様な形で始まるID((active, disconnected)除く)がそれにあたります。

== Device Pairs ==
8E098274-XXXX-XXXX-XXXX-C7561DFB3CDE (active, disconnected)
    Watch: Apple Watch Series 2 - 38mm (A097C17C-XXXX-XXXX-XXXX-39789FEC8367) (Shutdown)
    Phone: iPhone 7 (31433DE1-XXXX-XXXX-XXXX-6EABB3267930) (Shutdown)

一覧対象の絞り込み

devicesdevicetypesruntimespairsのいずれかを指定すると、
listの出力を絞り込む事ができます。

xcrun simctl list runtimes

一覧をjson形式で取得する

-jまたは--jsonオプションの指定で一覧をjson形式で出力する事ができます。

xcrun simctl list -j
$ xcrun simctl list runtimes

create

createサブコマンドはシミュレータの生成を行います。
実行のためのパラメタは以下の様な条件になります。
xcrun simctl create <name> <device type id> <runtime id>

各オプションの内容は以下の通りです。

オプション 説明
name 生成するデバイス名
device type id どの端末(iPhone 7やiPad Airなど)をidで指定します
runtime id ランタイム(iOS 9やwatchOS 3.1など)をidで指定します

device type idruntime idに何を指定して良いかわからない場合は、
前述したxcrun simctl listコマンドを使って、
自分が指定したい値を調べましょう。

例えば、iPhon4s(iOS9.0)のシミュレータが欲しい場合、以下の様なパラメタで入力します。

$ xcrun simctl create iPhone4s com.apple.CoreSimulator.SimDeviceType.iPhone-4s 9.0 - 13A344

clone

cloneは既にインストールされているシミュレータをコピーして新しいシミュレータを作ります。

Usage: simctl clone <device> <new name>
$ xcrun simctl clone 8C379DAA-XXXX-XXXX-XXXX-277DDDDC5CCD iPhone4sClone

upgrade

upgradeは対象のシミュレータのランタイムをアップグレードする事ができます。

以下は例として
8.4のシミュレータを新規に作成し、その後10.2にアップグレードしたものです。

$ xcrun simctl create iPhone5_8.4 com.apple.CoreSimulator.SimDeviceType.iPhone-5 8.4 - 12H141
F1049121-XXXX-XXXX-XXXX-83A0630EB1EC
$ xcrun simctl upgrade F1049121-XXXX-XXXX-XXXX-83A0630EB1EC 10.2 - 14C89

注意 ダウングレードは出来ません

delete

deleteで対象のシミュレータを削除します

Usage: simctl delete <device> [... <device n>] | unavailable
$ xcrun simctl delete 8C379DAA-XXXX-XXXX-XXXX-277DDDDC5CCD

pair

pairはシミュレータのiPhoneとWatchをペアリングさせます。

Usage: simctl pair <watch device> <phone device>
$ xcrun simctl pair A097C17C-XXXX-XXXX-XXXX-39789FEC8367 31433DE1-XXXX-XXXX-XXXX-6EABB3267930
F7B77F71-XXXX-XXXX-XXXX-473FB6BFE41E ← pair uuid

unpair

unpairはシミュレータのiPhoneとWatchをペアリングを解除させます。

Usage: simctl unpair <pair UUID>

パラメタとしてはpair UUIDを指定します。

$ xcrun simctl unpair 8E098274-XXXX-XXXX-XXXX-C7561DFB3CDE

erase

eraseで対象のシミュレータのコンテンツと設定をリセットします。
リセットするシミュレータはShutdown状態である必要があります。

Usage: simctl erase <device> [... <device n>] | all
$ xcrun simctl erase 8E098274-XXXX-XXXX-XXXX-C7561DFB3CDE
または
$ xcrun simctl erase all

このコマンドはSimulator.appの'Reset Content and Settings...'に相当します。
Screen Shot 2017-03-11 at 14.26.08.png

boot

bootでシミュレータを起動します。

Usage: simctl boot <device>

コマンドを実行するとシミュレータが起動する事がわかります。
ただし、GUIは起動しません。
listサブコマンドで対象のシミュレータが(Shutdown)から(Booted)に変わる事が確認できます。

$ xcrun simctl list | grep 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF
iPhone SE HOGE (30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF) (Shutdown) ←
$ xcrun simctl boot 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF)
$ xcrun simctl list | grep 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF
iPhone SE HOGE (30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF) (Booted) ←

GUIでの起動はSimulator.appを使います

$ open -a "Simulator" --args -CurrentDeviceUDID 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF

bootでは複数のシミュレータを起動状態にする事ができますが、
GUIを使った場合ではできません。
また、既にsimctlで起動済みのものをSimulator.appで起動することもできません。

shutdown

shutdownで対象のシミュレータを終了させます。

$ xcrun simctl shutdown 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF

rename

renameで対象のシミュレータ名を変更できます。

Usage: simctl rename <device> <name>
$ xcrun simctl rename 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF RenamediPhone

getenv

getenvでシミュレータの環境変数をコンソールに出力する事ができます。

Usage: simctl getenv <device> <variable name>
$ xcrun simctl getenv 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF PATH
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/bin:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/bin:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/sbin:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/sbin:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/local/bin

$ xcrun simctl getenv 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF SIMULATOR_UDID
30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF

$ xcrun simctl getenv 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF HOME
~/Library/Developer/CoreSimulator/Devices/30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF/data

おまけ

<variable name>で指定する環境変数ですが、私は何が指定できるのかわからなかったので調べて見たのですが、
ProcessInfo().environment.keysあたりで得られる値が設定できるようでした。

以下は適当にサンプルとして作ったプロジェクトの起動時にProcessInfo().environment.keysを出力した結果です。

CFFIXED_USER_HOME
CLASSIC
CUPS_SERVER
DYLD_FALLBACK_FRAMEWORK_PATH
DYLD_FALLBACK_LIBRARY_PATH
DYLD_FRAMEWORK_PATH
DYLD_LIBRARY_PATH
DYLD_ROOT_PATH
DYLD_SHARED_REGION
HOME
IOS_SIMULATOR_SYSLOG_SOCKET
IPHONE_SHARED_RESOURCES_DIRECTORY
IPHONE_SIMULATOR_CLASS
IPHONE_SIMULATOR_ROOT
IPHONE_TVOUT_EXTENDED_PROPERTIES
NSUnbufferedIO
OS_ACTIVITY_DT_MODE
PATH
SIMULATOR_CAPABILITIES
SIMULATOR_DEVICE_NAME
SIMULATOR_EXTENDED_DISPLAY_PROPERTIES
SIMULATOR_HOST_HOME
SIMULATOR_LEGACY_ASSET_SUFFIX
SIMULATOR_LOG_ROOT
SIMULATOR_MAINSCREEN_HEIGHT
SIMULATOR_MAINSCREEN_PITCH
SIMULATOR_MAINSCREEN_SCALE
SIMULATOR_MAINSCREEN_WIDTH
SIMULATOR_MEMORY_WARNINGS
SIMULATOR_MODEL_IDENTIFIER
SIMULATOR_PLATFORM_RUNTIME_OVERLAY_ROOT
SIMULATOR_PRODUCT_CLASS
SIMULATOR_ROOT
SIMULATOR_RUNTIME_BUILD_VERSION
SIMULATOR_RUNTIME_VERSION
SIMULATOR_SHARED_RESOURCES_DIRECTORY
SIMULATOR_UDID
SIMULATOR_VERSION_INFO
TESTMANAGERD_SIM_SOCK
TMPDIR
XPC_FLAGS
XPC_SERVICE_NAME
XPC_SIMULATOR_LAUNCHD_NAME
__XCODE_BUILT_PRODUCTS_DIR_PATHS
__XPC_DYLD_FRAMEWORK_PATH
__XPC_DYLD_LIBRARY_PATH

このほかCFLOG_FORCE_STDERRIPHONE_SIMULATOR_DEVICEなども
指定できるようでした。
この辺の詳しいドキュメント知ってる方がいたら教えて欲しいです。m(_ _)m

openurl

openurlでMobileSafariで対象のURLを開く事ができます。
対象のシミュレータはBooted状態になっている必要があります。

Usage: simctl openurl <device> <URL>

GUIがないとわかりにくですが、実行後にSimulator.appでSafariを開くと、
対象のURLが履歴に残っている事でURLを開いたことを確認できます。

$ xcrun simctl boot 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF
$ xcrun simctl openurl 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF http://qiita.com
$ xcrun simctl shutdown 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF
$ open -a "Simulator" --args -CurrentDeviceUDID 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF

addmedia

addmediaはシミュレータへの写真、Live Photo、動画をカメラライブラリに追加する事が出来ます。
テスト用画像データの登録などに使えそうですね。

Usage: simctl addmedia <device> <path> [... <path>]
$ xcrun simctl addmedia 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF foo.jpg bar.mov

install

installはシミュレータにアプリをインストールする事が出来ます。

Usage: simctl install <device> <path>

適当なアプリをビルドしてインストールする場合このようになります。

$ cd SampleApp/
$ xcodebuild -sdk iphonesimulator build -configuration Debug 
// これでbuild/Debug-iphonesimulator/SampleApp.appが出来たはずなのでinstallコマンドのパラメタで指定します。
$ xcrun simctl install 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF build/Debug-iphonesimulator/SampleApp.app

uninstall

uninstallではシミュレータからアプリを削除する事が出来ます。

Usage: simctl uninstall <device> <app identifier>

以下のように実行します。installの時はファイルを指定しましたが、uninstallの場合は
アプリのBundle Identifierを指定します。

$ xcrun simctl uninstall 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF com.foo.SampleApp

get_app_container

get_app_containerコマンドはシミュレータ上にインストールされたアプリのパスを出力する事が出来ます。

Usage: simctl get_app_container <device> <app identifier>
$ xcrun simctl get_app_container booted com.foo.SampleApp
~/Library/Developer/CoreSimulator/Devices/30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF/data/Containers/Bundle/Application/30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF/SampleApp.app

launch

launchはシミュレータ上でアプリの起動を行う事が出来ます。

Usage: simctl launch [-w | --wait-for-debugger] [--console] [--stdout=<path>] [--stderr=<path>] <device> <app identifier> [<argv 1> <argv 2> ... <argv n>]

    --console 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)
    --stdout=<path> Redirect the application's standard output to a file.
    --stderr=<path> Redirect the application's standard error to a file.
        Note: Log output is often directed to stderr, not stdout.

If you want to set environment variables in the resulting environment, set them in the calling environment with a SIMCTL_CHILD_ prefix.
$xcrun simctl launch 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF com.foo.SampleApp
com.foo.SampleApp: 12345

launchコマンドのオプションについては以下のようなものがあります。

-w or --wait-for-debugger

launchのオプションで-wまたは--wait-for-debuggerを使用した場合、
アプリ起動時にデバッガーがアタッチされるまで処理を待ってくれるようです。

例えば-wオプションをつけてlaunchさせ、XcodeでAttach Processで対象アプリのプロセスをアタッチ後、処理が走ります。
UIApplicationDelegateapplication(_:didFinishLaunchingWithOptions:)内にブレイクポイントをつけて試してみました。アプリ起動時に走る処理なので起動時にデバッガがアタッチされるのを待っていなければ、処理は即時実行されアタッチしても対象のブレイクポイントはすでに通過してしまっているわけです。
結果としては想定した通りアタッチ後にブレイクポイントで処理が止まりました👏

--console

コンソールへの出力をこのコマンドを実行しているターミナル上に出力します。
試しにUIApplicationDelegateapplication(_:didFinishLaunchingWithOptions:)print(#function)を入れて実行してみました。

xcrun simctl launch --console  30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF com.foo.SampleApp
com.foo.SampleApp: 93567
application(_:didFinishLaunchingWithOptions:) <- printの出力結果

terminate

terminateコマンドはシミュレータ上で起動しているアプリを終了させる事が出来ます。

Usage: simctl terminate <device> <app identifier>
$ xcrun simctl terminate 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF com.foo.SampleApp

icloud_sync

icloud_syncコマンドはiCloudの同期するトリガ起こす事が出来ます。
シミュレータへのiCloudのログインは実機と同様に行う必要があります

Usage: simctl icloud_sync <device>
$ xcrun simctl icloud_sync booted

pbcopy

pbcopyコマンドは標準入力の値をシミュレータのペーストボードにコピーします。

Usage: simctl pbcopy [-v] <device or "host">

以下の様に標準入力を与えて、シミュレータ側のブラウザなどを使って、
適当な入力欄でpasteをするとfooがペーストされるはずです。

$ echo foo | xcrun simctl pbcopy 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF

ただ、私が試した際、この方法でペーストボードに値をコピーしても
UIPasteboardChangedの通知は発生しませんでした。

pbpaste

pbpasteコマンドはシミュレータのペーストボードの値をホスト側のペーストボードに保存します。

Usage: simctl pbpaste [-v] <device or "host">

例えばシミュレータ上のSafariなどでテキストを選択&コピーして
pbpasteを実行するとその内容が出力されることが確認できます。

$ xcrun simctl pbpaste 30C0730C-XXXX-XXXX-XXXX-03508FFAFEBF
foo

UIPasteboard.general.string = "test"の様にUIPasteboard
設定された値ももちろんpbpasteで出力することができます。

pbsync

pbsyncコマンドはペーストボードの値を他のシミュレータに同期させる事が出来ます。

Usage: simctl pbsync [-pv] <source device or "host"> <destination device or "host">
$ xcrun simctl pbsync host booted

pbinfo

pbinfoコマンドで対象のペーストボードの値を出力します。

Usage: simctl pbinfo <device or "host">
$ xcrun simctl pbinfo booted
preferred types = (
    "public.rtf",
    "dyn.ah62d4rv4gk81g7d3ru",
    "public.utf16-external-plain-text",
    "dyn.ah62d4rv4gk81n65yru",
    "com.apple.traditional-mac-plain-text",
    "public.utf8-plain-text"
)
values = {
    public.rtf : Promised by SimDevicePasteboardItem
    dyn.ah62d4rv4gk81g7d3ru : Promised by SimDevicePasteboardItem
    public.utf16-external-plain-text : Promised by SimDevicePasteboardItem
    dyn.ah62d4rv4gk81n65yru : Promised by SimDevicePasteboardItem
    com.apple.traditional-mac-plain-text : Promised by SimDevicePasteboardItem
    public.utf8-plain-text : Promised by SimDevicePasteboardItem
}

io

ioコマンドはシミュレータのスクリーンショットやスクリーンの動画を出力することができます。

Usage: simctl io <device> <operation> <arguments>

Supported operations:
    enumerate [--poll]
        Lists all available IO ports and descriptor states.
        --poll       Poll after enumeration.

    poll
        Polls all available IO ports for events.

    recordVideo [--type=<type>] [--display=<display>] <file>
        Records the main framebuffer display to the specified file (use "-" for stdout).
        --type       "h264", "mp4" or "fmp4". Default is "mp4".

    screenshot [--type=<type>] [--display=<display>] [<file>]
        Saves a screenshot as a PNG to the specified file (use "-" for stdout).
        If no file is specified a default filename will be used.
        --type       Can be "png", "tiff", "bmp", "gif", "jpeg". Default is png.
        --display    iOS: supports "main" or "tv". Default is "main".
                     tvOS: supports only "tv"
                     watchOS: supports only "main"

Example:
    Save a screenshot of the booted device to screenshot.png:
    simctl io booted screenshot screenshot.png

    Pipe fragmented mp4 video of the booted device to another program:
    simctl io booted recordVideo --type=fmp4 - | <other program>

enumerate

enumerateオプションで利用可能なすべてのIOポートとディスクリプタの状態を一覧表示する事が出来ます。

$ xcrun simctl io booted enumerate
Port:
    UUID: 28CCC55A-XXXX-XXXX-XXXX-9A02451B1EA4
    Power state: On
    Display class: 0
    Default width: 1242
    Default height: 2208
    IOSurface port:
        width              = 1242
        height             = 2208
        bytes per row      = 4992
        size               = 11022336
        pixel format       = 'BGRA'
        bytes per element  = 4
        CPU cache mode     = Default cache.
        Pixel size casting = Yes
    Damage rectangle:
        Last damage region = {551.000000, 0.000000, 152.000000, 61.000000}
    Display rotation:
        Angle              = 0 radians

Port:
    UUID: FB02BCD9-XXXX-XXXX-XXXX-2BC67C3E53CA
    Power state: On
    Display class: 1
    Default width: 0
    Default height: 0
    Damage rectangle:
        Last damage region = {0.000000, 0.000000, 0.000000, 0.000000}
    Display rotation:
        Angle              = 0 radians

poll

pollオプションでIOポートのイベントをポーリングします。

試しにシミュレータを回転させた場合、以下の様な出力が得られました。

$ xcrun simctl poll booted
Rotation event received for IO port: SimDisplayConsoleDebugger
    Rotation angle changed to: -π/2 radians
Damage event received for IO port: SimDisplayConsoleDebugger
    Damage rectangle: {0.000000, 0.000000, 1242.000000, 2208.000000}
Damage event received for IO port: SimDisplayConsoleDebugger
...

他にどういったイベントがあるのかあまり把握してないので
気が向いたらまた調査してアップデートします。

screenshot

screenshotオプションでスクリーンショットを撮る事が出来ます。

$ xcrun simctl io booted screenshot screenshot.png

recordVideo

recordVideoオプションでスクリーンキャプチャ(動画)を撮る事ができます。

$ xcrun simctl io booted recordVideo capture.mov

以下調査中🙇🏻

pair_activate

pair_activateコマンドはiPhoneとWatchのペアをアクティベートするはずなのですが、
pairコマンドで紐付けた時点で状態がactiveになってたので、このコマンドを使うタイミングがわかってません 😰

launch

--stdout 及び --stderrオプション

シミュレータのログ出力などを指定したパスにリダイレクトさせる事が出来ます。
良い例が思いつかなかったので一旦保留中😰

spawn

spawnコマンドは任意のプロセスを起動させる事が出来る様です。

Usage: simctl spawn [-w | --wait-for-debugger] [-a <arch> | --arch=<arch>] <device> <path to executable> [<argv 1> <argv 2> ... <argv n>]

If you want to set environment variables in the resulting environment, set them in the calling environment with a SIMCTL_CHILD_ prefix.

以下の様にlogツールを使ってシミュレータ上のログを照会する時に使ったり、
SBShortcutMenuSimulator(https://github.com/DeskConnect/SBShortcutMenuSimulator) の様なツール使用時にも使われてる様ですが、
ちょっと私の調べが足りなくてよくわかってません😰

$ xcrun simctl spawn booted log stream --level debug

参考URL

http://qiita.com/garsue/items/aad6e11091b2331c6ce3