Skip to content

Instantly share code, notes, and snippets.

@nfhipona
Last active February 24, 2020 10:12
Show Gist options
  • Save nfhipona/8c322e165e229b64d2cf5391c0ff3523 to your computer and use it in GitHub Desktop.
Save nfhipona/8c322e165e229b64d2cf5391c0ff3523 to your computer and use it in GitHub Desktop.

For Xcode 8.2 or later

You can take videos and screenshots of Simulator using the xcrun Xcode command-line utility.

  1. Run your app on the simulator.

  2. Open Terminal.app

  3. Run the command

    • To take a screenshot, xcrun simctl io booted screenshot <filename>.<file extension>.
    • To take a video, xcrun simctl io booted recordVideo <filename>.<file extension>.

    For example screenshot: xcrun simctl io booted screenshot myScreenshot.png For example video: xcrun simctl io booted recordVideo appVideo.mov

  4. Press ctrl + c to stop recording the video.

The default location for the created file is the current directory.

Xcode 11.2 gives extra options

From Xcode 11.2 Beta Release Notes

simctl video recording now produces smaller video files, supports HEIC compression, and takes advantage of hardware encoding support where available. In addition, the ability to record video on iOS 13, tvOS 13, and watchOS 6 devices has been restored.

Now you could use additional flags for video recording:

  • --codec Specifies the codec type: h264 or hevc. Default is hevc.
  • --display
    • iOS: supports internal or external. Default is internal.
    • tvOS: supports only external.
    • watchOS: supports only internal.
  • --mask 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 black.
    • black: The mask is rendered black.
  • --force Force the output file to be written to, even if the file already exists.

Now you can record a video in h264 codec, with mask (for non-rectangular displays) and some other flags:

xcrun simctl io booted recordVideo --codec=h264 --mask=black --force appVideo.mov

and for screenshoting:

  • --type Can be png, tiff, bmp, gif, jpeg. Default is png.

  • --display

    • iOS: supports internal or external. Default is internal.
    • tvOS: supports only external.
    • watchOS: supports only internal.
  • --mask 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 black.
    • black: The mask is rendered black. You may also specify a port by UUID

Now you can take a screenshot in jpeg, with mask (for non-rectangular displays) and some other flags:

xcrun simctl io booted screenshot --type=jpeg --mask=black screenshot.jpeg

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