Skip to content

Instantly share code, notes, and snippets.

@lucalves
Last active February 21, 2024 03:30
Show Gist options
  • Save lucalves/b6d2172eabe1653f2cbe236caef1a905 to your computer and use it in GitHub Desktop.
Save lucalves/b6d2172eabe1653f2cbe236caef1a905 to your computer and use it in GitHub Desktop.
CheatSheet to manage iOS simulators through simctl.

Managing iOS Simulators

List all simulators created

$ xcrun simctl list --json

Delete old and unavailable simulators

$ xcrun simctl delete unavailable

Open Simulator.app

$ open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/

Boot specific simulators

You can find the id/name by listing all simulators $ xcrun simctl list.

$ xcrun simctl boot AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEE // UUID Hex string
$ xcrun simctl boot "iPhone XS Max" // Name of simulator

Create a simulator with a specific name

You can name simulators and use them for specific purposes.

$ xcrun simctl create iPhone7-my-app com.apple.CoreSimulator.SimDeviceType.iPhone-8 com.apple.CoreSimulator.SimRuntime.iOS-10–3

Shutdown Simulator

$ xcrun simctl shutdown booted
$ xcrun simctl shutdown AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEE
$ xcrun simctl shutdown "iPhone7-my-app"
$ xcrun simctl shutdown "iPhone XS"
$ xcrun simctl shutdown all

Erase contents in Simulator

Similar to running a factory restore on your device

$ xcrun simctl erase AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEE
$ xcrun simctl erase "iPhone7-my-app"
$ xcrun simctl erase "iPhone XS"
$ xcrun simctl erase all

Add media to simulator

$ xcrun simctl addmedia booted ./video_01.mp4
$ xcrun simctl addmedia "iPhone XS" ./video_01.mp4

Working with apps

Install App

$ xcrun simctl install booted "./path/to/ios-app.app"
$ xcrun simctl install "iPhone XS Max" "./path/to/ios-app.app"

Uninstall App

$ xcrun simctl uninstall booted com.mycompany.myapp
$ xcrun simctl uninstall "iPhone XS Max" com.mycompany.myapp

Launch app

$ xcrun simctl launch booted com.mycompany.myapp
$ xcrun simctl launch "iPhone XS Max" com.mycompany.myapp

Terminate app

$ xcrun simctl terminate booted com.mycompany.myapp
$ xcrun simctl terminate "iPhone XS Max" com.mycompany.myapp

Open URL

Can also be used to open an app, if you open the app using a url the first time it will give you an alert asking if you want to navigate to that app.

$ xcrun simctl openurl booted https://google.com
$ xcrun simctl openurl "iPhone XS Max" https://google.com

$ xcrun simctl openurl booted myapp://
$ xcrun simctl openurl "iPhone XS Max" myapp://

Record simulator video

$ xcrun simctl io booted recordVideo — type=mp4 ./simulator-record_001.mp4
$ xcrun simctl io "iPhone XS Max" recordVideo — type=mp4 ./simulator-record_001.mp4

Screenshot simulator

$ xcrun simctl io booted screenshot ./simulator-screenshot_001.png
$ xcrun simctl io "iPhone XS Max" screenshot ./simulator-screenshot_001.png

More help provided using help command

$ xcrun simctl help

Example scripts

Run an app on many simulators

I created and use this script for running the app I am developing in all possible screen sizes at once to verify that everything looks and works as intended.

#!/bin/bash

# List of simulators: `$ xcrun simctl list`
SIMULATORS=("iPhone SE" "iPhone 8" "iPhone 8 Plus" "iPhone XS" "iPhone XS Max" "iPhone XR")

# Comment or remove variables to skip a step
APP_PATH="/path/to/my/build/directory/when/running/a/build/in/xcode/app.app"
APP_IDENTIFIER="com.mycompany.myapp" # Identifier from info.plist
OPEN_URL="myapp://some/page/in/app" # Deep linking

echo "Running on ${#SIMULATORS[*]} simulators."
for index in ${!SIMULATORS[*]}
do
    SIMULATOR=${SIMULATORS[$index]}
    echo "Booting ${SIMULATOR}..."
    xcrun simctl boot "${SIMULATOR}"

    if [ ! -z "$APP_PATH" ]
    then
        echo "${SIMULATOR} installing: ${APP_PATH##*/}"
        xcrun simctl install "${SIMULATOR}" "${APP_PATH}"
    fi

    if [ ! -z "$APP_IDENTIFIER" ]
    then
        echo "${SIMULATOR} opening app: ${APP_IDENTIFIER}"
        xcrun simctl launch "${SIMULATOR}" "${APP_IDENTIFIER}"
    fi

    if [ ! -z "$OPEN_URL" ]
    then
        echo "${SIMULATOR} opening url: ${OPEN_URL}"
        xcrun simctl openurl "${SIMULATOR}" "${OPEN_URL}"
    fi

done
References:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment