In order to execute tests on iOS simulators marathon requires ssh access to Apple hardware capable of executing tests. Simulators have to be already pre-created when the test run is executed.

Providing devices

Currently iOS device provider reads the available devices from the Marathondevices file which has the following format:

- host: ""
- host: ""

This is basically a list of simulator UDID’s with the IP of the MacOS system.

Logging into the machine is done using private key authentication which is specified using vendor specific options.

Vendor specific options

To indicate that you’re using a vendor config for android you have to specify the type in configuration as following:

  type: "iOS"
  additional_option1: ...
  additional_option2: ...

Required options

Derived data path

Specify your derived data path in order to execute the tests

derivedDataDir: "derived-data"

Source code root

In order to get the list of tests marathon parses your Swift source code and finds all test classes and methods based on regex specified in the core configuration.

sourceRoot: "sample-appUITests"


In order to authenticate using ssh you have to provide a private key and a username as following:

remoteUsername: "username"
remotePrivateKey: "/home/user/.ssh/id_rsa"


xctestrun path

Force a specific xctestrun to be used

xctestrunPath: "a/Build/Products/UITesting_iphonesimulator11.0-x86_64.xctestrun"

Remote rsync path

Specify rsync binary on the remote machine manually

remoteRsyncPath: "/usr/bin/rsync"

Debug ssh connection

Use this option for a very verbose debug output of ssh transport layer

debugSsh: true

Custom Marathondevices path

If your Marathondevices file is not in the project root then you can override this here

devicesFile: "/opt/Marathondevices"