---
title: Take control of a physical iOS device via VNC
description: We're contributing our open-sourced iOS VNC server to the community.
source_url:
  html: https://testingbot.com/blog/ios-vnc
  md: https://testingbot.com/blog/ios-vnc.md
---

# iOS VNC Server

We're contributing our open-sourced iOS VNC server to the community.

By [Jochen D.](https://testingbot.com/about/jochen-d)2020-05-28

 Share on Facebook 

 Share on Twitter 

 Post on Reddit 

 Share link 

Today we're excited to open-source a feature that we've been using in production for the last 3 years: an iOS VNC Server.

This will allow you to connect with your favorite VNC Client to a physical iOS device (no jailbreak required).

The program streams the screen of the iOS device through VNC and listens for mouse and keyboard events.

## Setting it up

To get started, please clone the git repository: [ios-vnc](https://github.com/testingbot/ios-vnc).

Next, please install these dependencies:

- `brew install libimobiledevice`
- `brew install libpng`
- `brew install libvncserver`
- `brew install carthage`

You can now build the project:

`cd iOSVNCServer && make build`  

## Dependencies

To control the device, you will need to set up [WebDriverAgent](https://github.com/appium/WebDriverAgent).   
 This project exposes a couple of endpoints to take control of the device.

Once you've set this up correctly (signing and `./Scripts/bootstrap.sh`), you can run the WebDriverAgent project to expose the HTTP endpoint.

## Getting Started

The WebDriverAgent project will output a response similar to `ServerURLHere->http://[SOME_IP]:8100<-ServerURLHere`.   
 These values are required and need to be passed to our `iosvncserver`, together with the `udid` of the device:

- To get the udid: `idevice_id -l`
- Start a WebDriverAgent session: `curl -X POST -H "Content-Type: application/json" \
-d "{\"desiredCapabilities\":{\"bundleId\":\"com.apple.preferences\"}}" \
[SOME_IP]:8100/session`
- Copy the sessionID from this response and pass it to our VNC server

You can now run the VNC server:

`./iosvncserver -u [udid] -H [SOME-IP] -P 8100 -S [session-id]`  

And that's it! You can now point your favorite VNC client to `localhost:5901` and you will be able to view and take control of the iOS device.

## Future plans

In the future we hope to improve the performance of both the rendering and the controls. All Pull-Requests and suggestions are welcome.

[← Previous post TestingBot has improved its Analytics Offering](https://testingbot.com/blog/test-analytics) [Next post → Test on macOS Big Sur and Safari 14](https://testingbot.com/blog/macos-bigsur)

## Sidebar

### TestingBot Cloud Testing

Run automated, manual and visual tests on remote browsers and devices. Sign up for a free trial.

[Free Trial](https://testingbot.com/users/sign_up)

### Latest articles

[![Announcing AI Test Insights](https://testingbot.com/assets/blog/2026/ai-insights.jpg)](https://testingbot.com/blog/ai-test-insights)

#### Announcing AI Test Insights

Use AI Insights to quickly discover why an automated test...

[Read: Announcing AI Test Insights](https://testingbot.com/blog/ai-test-insights)

[![Selenium vs Playwright 2026](https://testingbot.com/assets/blog/2026/selenium-vs-playwright-2026.jpg)](https://testingbot.com/blog/selenium-vs-playwright)

#### Selenium vs Playwright 2026

Comparing Selenium vs Playwright - which is the best test...

[Read: Selenium vs Playwright 2026](https://testingbot.com/blog/selenium-vs-playwright)

[![Maestro Physical Device Testing](https://testingbot.com/assets/blog/2026/maestro-physical.jpg)](https://testingbot.com/blog/maestro-physical-device-testing)

#### Maestro Physical Device Testing

Maestro testing in parallel on physical Android and iOS d...

[Read: Maestro Physical Device Testing](https://testingbot.com/blog/maestro-physical-device-testing)

## Related Articles

[![Selenium 20th birthday](https://testingbot.com/assets/blog/2024/selenium20.webp)](https://testingbot.com/blog/selenium-20-years "Selenium 20th birthday")

### [Selenium 20th birthday](https://testingbot.com/blog/selenium-20-years)

Celebrate Selenium's 20th birthday. An overview of the years.

[Read article →](https://testingbot.com/blog/selenium-20-years)

[![Maestro Physical Device Testing](https://testingbot.com/assets/blog/2026/maestro-physical.jpg)](https://testingbot.com/blog/maestro-physical-device-testing "Maestro Physical Device Testing")

### [Maestro Physical Device Testing](https://testingbot.com/blog/maestro-physical-device-testing)

Maestro testing in parallel on physical Android and iOS devices.

[Read article →](https://testingbot.com/blog/maestro-physical-device-testing)

[![tvOS Physical Device Testing](https://testingbot.com/assets/blog/2025/appletv.jpg)](https://testingbot.com/blog/tvos-automated-testing "tvOS Physical Device Testing")

### [tvOS Physical Device Testing](https://testingbot.com/blog/tvos-automated-testing)

Run automated tvOS tests on physical AppleTV devices.

[Read article →](https://testingbot.com/blog/tvos-automated-testing)

[![Maestro testing in the cloud with TestingBot](https://testingbot.com/assets/blog/2025/maestro.jpg)](https://testingbot.com/blog/maestro-cloud-testing "Maestro testing in the cloud with TestingBot")

### [Maestro testing in the cloud with TestingBot](https://testingbot.com/blog/maestro-cloud-testing)

Run Maestro tests in the cloud with TestingBot.

[Read article →](https://testingbot.com/blog/maestro-cloud-testing)

## More by Jochen D.

[![Announcing AI Test Insights](https://testingbot.com/assets/blog/2026/ai-insights.jpg)](https://testingbot.com/blog/ai-test-insights "Announcing AI Test Insights")
### [Announcing AI Test Insights](https://testingbot.com/blog/ai-test-insights)

Use AI Insights to quickly discover why an automated test failed.

[![Maestro Physical Device Testing](https://testingbot.com/assets/blog/2026/maestro-physical.jpg)](https://testingbot.com/blog/maestro-physical-device-testing "Maestro Physical Device Testing")
### [Maestro Physical Device Testing](https://testingbot.com/blog/maestro-physical-device-testing)

Maestro testing in parallel on physical Android and iOS devices.

[![tvOS Physical Device Testing](https://testingbot.com/assets/blog/2025/appletv.jpg)](https://testingbot.com/blog/tvos-automated-testing "tvOS Physical Device Testing")
### [tvOS Physical Device Testing](https://testingbot.com/blog/tvos-automated-testing)

Run automated tvOS tests on physical AppleTV devices.

[See all posts by Jochen D. →](https://testingbot.com/about/jochen-d)

## Ready to start testing?
[Start a free trial](https://testingbot.com/users/sign_up)
