Provide a stable and production ready opensource solution to automate iOS device on Linux, Windows and Mac OS X.
npm install go-ios





Welcome 👋
npm install -g go-ios can be used to get going. Run ios --help after the installation for details.
For iOS 17+ devices you need to run sudo ios tunnel start for go ios to work. This will start a tunnel daemon.
To make this work on Windows, download the latest wintun.dll from here https://git.zx2c4.com/wintun and copy it to C:/Windows/system32
The goal of this project is to provide a stable and production ready opensource solution to automate iOS device on Linux, Windows and Mac OS X. I am delighted to announce that a few companies including headspin.io and Sauce Labs will use or are using go-iOS.
Follow my twitter for updates or check out my medium blog: https://daniel-paulus.medium.com/
If you are interested in using go-iOS please get in touch on LinkedIn, Twitter or the Github discussions above, I always love to hear what people are doing with it.
If you miss something your Mac can do but go-iOS can't, just request a feature in the issues tab.
go buildios install --path=/path/to/appios image autoios devicestate commandAll features:
``
Options:
-v --verbose Enable Debug Logging.
-t --trace Enable Trace Logging (dump every message).
--nojson Disable JSON output
--pretty Pretty-print JSON command output
-h --help Show this screen.
--udid=
--tunnel-info-port=
--address=
> To get this value run "log stream --debug --info --predicate 'eventMessage LIKE "Tunnel established" OR eventMessage LIKE "for server port"'",
> connect a device and open Xcode
--rsd-port=
> This parameter is similar to '--address' and can be obtained by the same log filter
--proxyurl=
> A simple format like: "http://PROXY_LOGIN:PROXY_PASS@proxyIp:proxyPort" works. Otherwise use the HTTP_PROXY system env var.
--userspace-port=
The commands work as following:
The default output of all commands is JSON. Should you prefer human readable outout, specify the --nojson option with your command.
By default, the first device found will be used for a command unless you specify a --udid=some_udid switch.
Specify -v for debug logging and -t for dumping every message.
ios --version | version [options] Prints the version
ios -h | --help Prints this screen.
ios activate [options] Activate a device
ios apps [--system] [--all] [--list] [--filesharing] Retrieves a list of installed applications. --system prints out preinstalled system apps. --all prints all apps, including system, user, and hidden apps. --list only prints bundle ID, bundle name and version number. --filesharing only prints apps which enable documents sharing.
ios assistivetouch (enable | disable | toggle | get) [--force] [options] Enables, disables, toggles, or returns the state of the "AssistiveTouch" software home-screen button. iOS 11+ only (Use --force to try on older versions).
ios ax [--font=
ios batterycheck [options] Prints battery info.
ios batteryregistry [options] Prints battery registry stats like Temperature, Voltage.
ios crash cp
ios crash ls [
> or use a pattern like 'ios crash ls "ips"' to filter
ios crash rm
ios date [options] Prints the device date
ios debug [--stop-at-entry]
ios devicename [options] Prints the devicename
ios devicestate enable
> Ex. "ios devicestate enable SlowNetworkCondition SlowNetwork3GGood"
ios devicestate list [options] Prints a list of all supported device conditions, like slow network, gpu etc.
ios devmode (enable | get) [--enable-post-restart] [options] Enable developer mode on the device or check if it is enabled. Can also completely finalize developer mode setup after device is restarted.
ios diagnostics list [options] List diagnostic infos
ios diskspace [options] Prints disk space info.
ios dproxy [--binary] [--mode=
> It dumps every communication in plain text so it can be implemented easily.
> Use "sudo launchctl unload -w /Library/Apple/System/Library/LaunchDaemons/com.apple.usbmuxd.plist"
> to stop usbmuxd and load to start it again should the proxy mess up things.
> The --binary flag will dump everything in raw binary without any decoding.
ios erase [--force] [options] Erase the device. It will prompt you to input y+Enter unless --force is specified.
ios forward [options]
ios fsync [--app=bundleId] [options] (pull | push) --srcPath=
ios fsync [--app=bundleId] [options] (rm [--r] | tree | mkdir) --path=
ios httpproxy
> Specify proxy password either as argument or using the environment var: PROXY_PASSWORD
> Use p12 file and password for silent installation on supervised devices.
ios httpproxy remove [options] Removes the global http proxy config. Only works with http proxies set by go-ios!
ios image auto [--basedir=
> You can specify a dir where images should be cached.
> The default is the current dir.
ios image list [options] List currently mounted developers images' signatures
ios image mount [--path=
> For iOS 17+ (personalized developer disk images)
ios image unmount [options] Unmount developer disk image
ios info [display | lockdown] [options] Prints a dump of device information from the given source.
ios install --path=
ios instruments notifications [options] Listen to application state notifications
ios ip [options] Uses the live pcap iOS packet capture to wait until it finds one that contains the IP address of the device.
> It relies on the MAC address of the WiFi adapter to know which is the right IP.
> You have to disable the "automatic wifi address"-privacy feature of the device for this to work.
> If you wanna speed it up, open apple maps or similar to force network traffic.
> f.ex. "ios launch com.apple.Maps"
ios kill (
ios lang [--setlocale=
ios launch
ios list [options] [--details] Prints a list of all connected device's udids. If --details is specified, it includes version, name and model of each device.
ios listen [options] Keeps a persistent connection open and notifies about newly connected or disconnected devices.
ios lockdown get [
> Use --domain to query from a specific domain (e.g., com.apple.disk_usage, com.apple.PurpleBuddy).
> Examples: "ios lockdown get DeviceName", "ios lockdown get --domain=com.apple.PurpleBuddy"
ios memlimitoff (--process=
ios mobilegestalt
> it in plist format by adding the --plist param.
> Ex.: "ios mobilegestalt MainScreenCanvasSizes ArtworkTraits --plist"
ios pair [--p12file=
> to pair without a trust dialog. Specify the password either with the argument or
> by setting the environment variable 'P12_PASSWORD'
ios pcap [options] [--pid=
ios prepare [--skip-all] [--skip=
``