Skip to content

Install and debug iPhone apps from the command line, without using Xcode

License

Notifications You must be signed in to change notification settings

nanoscopic/ios-deploy

 
 

Repository files navigation

ios-deploy

Install and debug iOS apps from the command line. Designed to work on un-jailbroken devices.

Requirements

  • Xcode
  • Xcode CLI

Installation

gcc ios-deploy.m -o ios-deploy -F ./ -framework Foundation -framework CoreFoundation -framework MobileDevice

Usage

Usage: ios-deploy [OPTION]...
  -i, --id <device_id>         the id of the device to connect to
  -c, --detect                 only detect if the device is connected
  -b, --bundle <bundle.app>    the path to the app bundle to be installed
  -a, --args <args>            command line arguments to pass to the app when launching it
  -s, --envs <envs>            environment variables, space separated key-value pairs, to pass to the app when launching it
  -t, --timeout <timeout>      number of seconds to wait for a device to be connected
  -u, --unbuffered             don't buffer stdout
  -v, --verbose                enable verbose output
  -A, --app_deltas             incremental install. must specify a directory to store app deltas to determine what needs to be installed
  -p, --port <number>          port used for device, default: dynamic
  -r, --uninstall              uninstall the app before install (do not use with -m; app cache and data are cleared) 
  -9, --uninstall_only         uninstall the app ONLY. Use only with -1 <bundle_id> 
  -1, --bundle_id <bundle id>  specify bundle id for list and upload
  -l, --list[=<dir>]           list all app files or the specified directory
  -o, --upload <file>          upload file
  -w, --download[=<path>]      download app tree or the specified file/directory
  -2, --to <target pathname>   use together with up/download file/tree. specify target
  -D, --mkdir <dir>            make directory on device
  -R, --rm <path>              remove file or directory on device (directories must be empty)
  -X, --rmtree <path>          remove directory and all contained files recursively on device
  -e, --exists                 check if the app with given bundle_id is installed or not 
  -B, --list_bundle_id         list bundle_id 
  -W, --no-wifi                ignore wifi devices
  -C, --get_battery_level      get battery current capacity 
  -O, --output <file>          write stdout to this file
  -E, --error_output <file>    write stderr to this file
  --detect_deadlocks <sec>     start printing backtraces for all threads periodically after specific amount of seconds
  -f, --file_system            specify file system for mkdir / list / upload / download / rm
  -F, --non-recursively        specify non-recursively walk directory
  -j, --json                   format output as JSON

Examples

The commands below assume that you have an app called my.app with bundle id bundle.id. Substitute where necessary.

// deploy and debug your app to a connected device
ios-deploy --debug --bundle my.app

// deploy, debug and pass environment variables to a connected device
ios-deploy --debug --envs DYLD_PRINT_STATISTICS=1 --bundle my.app

// deploy and debug your app to a connected device, skipping any wi-fi connection (use USB)
ios-deploy --debug --bundle my.app --no-wifi

// deploy and launch your app to a connected device, but quit the debugger after
ios-deploy --justlaunch --debug --bundle my.app

// deploy and launch your app to a connected device, quit when app crashes or exits
ios-deploy --noninteractive --debug --bundle my.app

// deploy your app to a connected device using incremental installation
ios-deploy --app_deltas /tmp --bundle my.app

// Upload a file to your app's Documents folder
ios-deploy --bundle_id 'bundle.id' --upload test.txt --to Documents/test.txt

// Download your app's Documents, Library and tmp folders
ios-deploy --bundle_id 'bundle.id' --download --to MyDestinationFolder

// List the contents of your app's Documents, Library and tmp folders
ios-deploy --bundle_id 'bundle.id' --list

// deploy and debug your app to a connected device, uninstall the app first
ios-deploy --uninstall --debug --bundle my.app

// check whether an app by bundle id exists on the device (check return code `echo $?`)
ios-deploy --exists --bundle_id com.apple.mobilemail

// Download the Documents directory of the app *only*
ios-deploy --download=/Documents --bundle_id my.app.id --to ./my_download_location

// List ids and names of connected devices
ios-deploy -c

// Uninstall an app
ios-deploy --uninstall_only --bundle_id my.bundle.id

// list all bundle ids of all apps on your device
ios-deploy --list_bundle_id

// list the files in cameral roll, a.k.a /DCIM
ios-deploy -f -l/DCIM

// download the file in /DCIM
ios-deploy -f -w/DCIM/100APPLE/IMG_001.jpg

// remove the file /DCIM
ios-deploy -f -R /DCIM/100APPLE/IMG_001.jpg

// make directoly in /DCIM
ios-deploy -f -D/DCIM/test

// upload file to /DCIM
ios-deploy -f -o/Users/ryan/Downloads/test.png -2/DCIM/test.png

License

ios-deploy is available under the provisions of the GNU General Public License, version 3 (or later), available here: http://www.gnu.org/licenses/gpl-3.0.html

Error codes used for error messages were taken from SDMMobileDevice framework, originally reverse engineered by Sam Marshall. SDMMobileDevice is distributed under BSD 3-Clause license and is available here: https://github.com/samdmarshall/SDMMobileDevice

About

Install and debug iPhone apps from the command line, without using Xcode

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 85.6%
  • C 14.3%
  • Makefile 0.1%