Skip to content
A server to manage remote iOS simulators and devices for parallel testing
Branch: master
Clone or download

README.md

iOS Remote Device Server Build Status

A server for managing, booting, and controlling simulators and devices on remote host machines.

Features

  • Enables control of simulators and devices connected to remote host machines
  • Enables tests to run using remote simulators and devices
  • Enables custom actions on simulators like clearing safari cookies or fast reset of a simulator
  • Hides away satisfying desired capabilities, i.e. based on requested model or os will choose an appropriate host to create a simulator

Requirements

Java

  • Download and install Java SDK 10
  • set environment variable JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home -v 10 -F)

Dependencies

Device Server uses fbsimctl, libimobiledevice and other tools under the hood.

To install dependencies run:

brew update
brew bundle

Simulators

It might take some time to build dependencies used for physical devices. You can skip it by running following instead:

brew update
brew bundle --file="homebrew/Brewfile"

Devices

Some of the dependencies needed for physical devices have outdated stable releases and have to be installed from the latest head.

After installing Brewfile you might still need to run

brew upgrade usbmuxd libimobiledevice --fetch-HEAD

Usage

Build and run Device Server

./bootstrap.sh
cd device-server
./run_device_server.sh

Allocate Device

curl -X POST -d '{"model":"iPhone 6", "headless":false}' http://localhost:4567/devices

Query Device Server

curl http://localhost:4567/status
curl http://localhost:4567/devices

Release device by reference

curl -X DELETE http://localhost:4567/devices/${DEVICE_REF}

Ruby sample

require 'ios-device-server-client/remote_device'

server_url = 'http://localhost:4567'

provider = IosDeviceServerClient::DeviceProvider.new(server_url)

rv = provider.create(model: 'iPhone 6', os: 'iOS 11.4', headless: false)
remote_device = IosDeviceServerClient::RemoteDevice.new(server_url, rv['ref'])

begin
  remote_device.await(timeout: 30)
  remote_device.open_url('https://github.com/badoo/ios-device-server')
  readline
ensure
  remote_device.release
end
  • command line utility will be published soon
You can’t perform that action at this time.