go-ios  by danielpaulus

CLI tool for iOS device automation on Linux, Windows, and macOS

created 6 years ago
1,224 stars

Top 32.8% on sourcepulse

GitHubView on GitHub
Project Summary

This project provides an operating-system-independent implementation of iOS device features, enabling automation of UI tests, app management, and device configuration across Linux, Windows, and macOS. It targets developers and QA engineers seeking a robust, open-source solution for controlling iOS devices programmatically.

How It Works

Written in Go, go-ios compiles to small, fast static binaries. It communicates with iOS devices using protocols like usbmuxd and RSD (Remote Service Discovery). The design emphasizes modularity, allowing its functionalities to be used as a Go module dependency. All command outputs are JSON by default for easy integration with other programming languages.

Quick Start & Requirements

  • Install via npm: npm install -g go-ios
  • For iOS 17+, run sudo ios tunnel start to initiate a tunnel daemon.
  • Windows users need wintun.dll from https://git.zx2c4.com/wintun placed in C:/Windows/system32.
  • Official documentation: https://github.com/danielpaulus/go-ios

Highlighted Details

  • Supports installing apps (.ipa or .app folders).
  • Enables running XCTests, including WebDriverAgent, on Linux, Windows, and macOS.
  • Offers a debug proxy for reverse engineering network traffic.
  • Allows pairing devices without manual interaction.
  • Provides commands for device state management (network emulation, thermal states).
  • Includes an experimental REST API.

Maintenance & Community

  • Companies like Headspin.io and Sauce Labs are using or planning to use go-ios.
  • Updates and discussions can be found on the author's Medium blog and GitHub discussions.

Licensing & Compatibility

  • The project is licensed under the MIT License.
  • Compatible with commercial use and closed-source linking.

Limitations & Caveats

  • Some features, like AssistiveTouch or VoiceOver control, are noted as iOS 11+ only, with a --force option for older versions.
  • Tunneling for iOS 17+ requires sudo and may involve pausing/resuming macOS system processes (remoted).
  • The ios ip command requires disabling the device's "automatic wifi address" privacy feature.
Health Check
Last commit

2 weeks ago

Responsiveness

1+ week

Pull Requests (30d)
3
Issues (30d)
3
Star History
98 stars in the last 90 days

Explore Similar Projects

Feedback? Help us improve.