110 Commits
1.0.5 ... 1.6.3

Author SHA1 Message Date
Shazron Abdullah
5d2a0d5c8b Updated version to 1.6.3 2015-05-16 09:54:56 -07:00
Shazron Abdullah
ed09a029de Fixes #132 - ios-deploy -c not listing devices with unicode characters 2015-05-15 17:05:46 -07:00
Shazron Abdullah
d65b94fa06 Updated version to 1.6.2 2015-05-15 15:44:59 -07:00
Shazron Abdullah
44b8068daa Fixes #134 - Better error reporting
Merge branch 'error-messages' of https://github.com/Unity-Technologies/ios-deploy
2015-05-15 13:04:17 -07:00
Incont
041d12e0b1 reverted return errorCode 2015-05-15 20:21:39 +03:00
Julius Trinkunas
8a3dbce11f More user friendly error messages. 2015-05-15 17:23:53 +03:00
Incont
9e45cc0edb fixed not working --exists 2015-05-15 14:05:27 +03:00
Julius Trinkunas
3857c9afc6 Unify error reporting. 2015-05-14 19:54:01 +03:00
Shazron Abdullah
125cd8de64 Updated version to 1.6.1 2015-05-13 11:01:16 -07:00
Shazron Abdullah
7070623432 Fixes #129 - "ios-deploy -c" never returns (partial revert of #122) 2015-05-13 11:00:56 -07:00
Shazron Abdullah
d712420e60 Fixes #118 - How to install without npm? 2015-05-12 15:38:03 -07:00
Shazron Abdullah
2c35b70ff7 Updated README for --uninstall_only from help text 2015-05-12 15:25:41 -07:00
Shazron Abdullah
ea8202c506 Updated version to 1.6.0 2015-05-12 15:02:00 -07:00
Shazron Abdullah
7c1372041d Updated README for --uninstall_only 2015-05-12 15:01:06 -07:00
Michael Lupo
b67b90be19 Fixes #121 - Adding in standalone uninstall option --uninstall_only
Merge branch 'uninstallOnlySupport' of https://github.com/mikelupo/ios-deploy into master
2015-05-12 14:54:10 -07:00
Shazron Abdullah
9156689720 Fixes #122 - Using the -c option for listing device UUIDs instead the system_profiler 2015-05-12 14:28:21 -07:00
Shazron Abdullah
a89b71bdf4 Fixes #124 - new -D is unrecognized 2015-05-12 14:19:11 -07:00
Shazron Abdullah
6e4df1cc07 Fixes #119 - new -R is unrecognized 2015-05-12 14:18:13 -07:00
Shazron Abdullah
fc667bc423 Added os key to package.json (for OS X) 2015-05-12 14:01:22 -07:00
Michael Lupo
2119c10455 Adding in standalone uninstall option --uninstall_only
Usage:
ios-deploy --uninstall_only --bundle_id my.bundle.id
2015-05-07 14:07:47 -04:00
Shazron Abdullah
1db084594e Merge pull request #116 from luser/update-readme
Update README to include --mkdir and --rm
2015-04-22 10:40:26 -07:00
Ted Mielczarek
8d1f79d27c Update README to include --mkdir and --rm 2015-04-22 07:43:31 -04:00
Shazron Abdullah
8c9dab1564 Merge pull request #115 from luser/mkdir
Add --mkdir and --rm options
2015-04-17 17:18:23 -07:00
Ted Mielczarek
54a04e203f Add --mkdir and --rm options 2015-04-15 11:42:09 -04:00
Shazron Abdullah
c1a0623e49 Added doc to download specific directory (ie Documents) from an installed app (closes #108) 2015-04-06 14:06:52 -07:00
Shazron Abdullah
5efdcae8ce Incremented version to 1.5.0 2015-04-06 13:53:56 -07:00
Andy Polyakov
54818aae5c Number of fixes:
- allow to pass command line arguments from (lldb) prompt;
- make lldb exit as opposite to relying on kill (which is problematics
  because it messes up tty settings);
- handle event timeout in autoexit_command to avoid endless loop;
- use dynamic TCP port and listen on localhost (no need to expose the
  port to Internet);
- close accept socket once connection is established;

(fixes #112)
2015-04-06 13:51:26 -07:00
Shazron Abdullah
e882932053 Added doc for --exists option 2015-04-06 13:43:15 -07:00
Ugur Kilic
cab5a31ab5 “exists” command added to check if an app with given bundle id is
installed on device or not (closes #107)
2015-04-06 13:37:34 -07:00
Shazron Abdullah
56abf4e92e Updated version to 1.4.0 2015-03-02 16:15:11 -08:00
Shazron Abdullah
05edec9562 Fixes #90, #91 - EXC_BAD_ACCESS crash 2015-03-02 16:09:07 -08:00
Shazron Abdullah
48f7881a0b Fixes #105 - ios-deploy --version returns a non-zero exit code 2015-03-02 16:04:43 -08:00
Shazron Abdullah
abbd1a3769 Merge pull request #94 from alexdunn/master
Clarify what npm is and how to get it
2014-12-24 16:36:23 -05:00
Alex Dunn
e5e2a6349d Clarify what npm is and how to get it 2014-12-23 04:53:35 -08:00
Shazron Abdullah
5a8d7f9efb Merge pull request #92 from diaswrd/master
Add installation instructions in README.
2014-12-15 09:25:51 -08:00
William Dias
0dece5157e Add installation instructions in README. 2014-12-15 09:28:13 -02:00
Shazron Abdullah
e1aacc0ba1 Model table typo (copy paste error) for iPhone 5 models. 2014-12-12 17:46:56 -08:00
Shazron Abdullah
e4c4660f2a Cleaned up get_device_hardware_name by using a macro (related to issue #88).
This prepares it for adding models that are missing, see: https://theiphonewiki.com/wiki/Models
2014-12-12 17:43:50 -08:00
Shazron Abdullah
33f6a83e1d Fixes phonegap/ios-deploy#80 (re-fix) --detect not showing non-zero exit code when no devices are detected.
When --detect is turned on, --debug is turned on implicitly so you won't get a segmentation fault.
2014-11-16 20:49:33 -08:00
Shazron Abdullah
7c9af71d86 Updated version to 1.3.1 2014-11-14 13:09:11 -08:00
Shazron Abdullah
767c386ba9 Fixes phonegap/ios-deploy#80 --detect not showing non-zero exit code when no devices are detected. 2014-11-14 13:07:19 -08:00
Shazron Abdullah
7a447b480f Fixes phonegap/ios-deploy#79 - Update README.md for sample usage of ios-deploy flags and options 2014-11-13 23:47:50 -08:00
Shazron Abdullah
021c222a55 Update README. Removed gdbargs, gdbexec. Added download. 2014-11-13 23:24:51 -08:00
Shazron Abdullah
63303ea4b0 Removed unused gdbargs and gdbexec options. 2014-11-13 23:24:27 -08:00
Shazron Abdullah
5bfc25376a Update package.json version to 1.3.0 2014-11-13 22:58:18 -08:00
Shazron Abdullah
7075657015 Fixes phonegap/ios-deploy#74 - SIGSEGV-ed while listing the sandbox of an application on iOS8 2014-11-13 22:57:58 -08:00
Shazron Abdullah
6f662ae450 Fixes phonegap/ios-deploy#37 - AMDeviceValidatePairing fails when uninstalling 2014-11-13 17:33:44 -08:00
Shazron Abdullah
4617a7df59 Merge pull request #72 from CSOscarTanner/master
Fixed problem with the parser of the value of the parameter -i.
2014-11-12 16:22:33 -08:00
Shazron Abdullah
7ca72695b6 Merge pull request #68 from senthilmanick/master
Fixed the hang when the device is locked.

When the device is locked, we get empty packets in the server.
Now fixed by closing both the lldb and server sockets.
Also after safequit, we need to detach to make the "justlaunch" option to be less error prone.

Multiple bug fixes: 
1. When multiple devices are connected, the detect was not listing all the devices ios-deploy -c -t 1
2. Fixes for issue #75 - non-interactive mode broken lldb and ios-deploy may still be running ios-deploy -b ... -d -I -L
3. Fixes for issue #60 - -L option not working properly ios-deploy will not quit or sometimes hang
4. When multiple devices are connected, cannot use -i option to specify the device ios-deploy -b ... -i -d -I -L
5. Allow timeout when downloading
2014-11-12 16:11:52 -08:00
senthil
dbe381112a Removed the wrong comment 2014-11-12 16:23:20 -05:00
senthil
72caad4526 Allow timeout for download and run 2014-11-12 16:15:53 -05:00
senthil
06187e348a updated the version to 1.3.0 2014-11-12 12:04:47 -05:00
senthil
b4f91912ee fixed the lauch using python 2014-11-11 20:15:39 -05:00
senthil
b796b70e29 updated the version 2014-11-07 18:43:02 -05:00
senthil
1a309dcebf Merge branch 'disk-image-fix' of https://github.com/eddieh/ios-deploy
Conflicts:
	ios-deploy.c
2014-11-07 18:40:28 -05:00
Eddie Hillenbrand
049a89e873 Fix for mismatched build numbers. 2014-11-04 12:35:14 -08:00
Eddie Hillenbrand
4aa233d147 Allow the symbols and the disk images to be in different DeviceSupport directories. 2014-11-03 16:09:36 -08:00
CSOscarTanner
d51bb22f23 Fixed problem with the parser of the value of the parameter -i. 2014-10-21 14:33:33 -02:00
senthil
54600a9eaf Fixed two issues:
1. When the device is locked, the python source prints and exists. The
server sees this as an empty packet. We are using this to exit out of
the connection
2. When we use just launch, we need to do safequit and detach. Otherwise
we hang for ever
2014-10-13 17:20:52 -04:00
senthil
d86b0cad0d Merged with phone-gap and fixed the hang 2014-10-13 16:59:19 -04:00
senthil
029d22ecef added iPhone 6 2014-10-09 14:29:15 -04:00
Shazron Abdullah
63917d796b Added scripts for buildbox. 2014-10-07 14:35:45 -07:00
Shazron Abdullah
0b89be65bd Merge pull request #67 from dot-asm/master
Add download option.
2014-10-07 11:04:10 -07:00
Andy Polyakov
7742c5d532 Allow --list and --download to pick specific subdirectories.
Note that in a way it introduces inconsistency with help message.
This is because arguments to --list and --download are optional
and has to be passed with '=', e.g. --list=/Documents.
2014-10-07 11:23:33 +02:00
Andy Polyakov
9f0c8a85c6 Add download option.
Unlike upload option, download pulls down whole tree. For this reason
--to is expected to be directory path.
2014-10-07 09:23:34 +02:00
Shazron Abdullah
c57f208422 Update version to 1.2.0 2014-10-06 22:09:39 -07:00
Shazron Abdullah
0467b69fd8 Merge pull request #66 from dot-asm/master
Fix AFCFileRef[Read|Write] prototypes
2014-10-06 21:56:59 -07:00
Shazron Abdullah
77116e3f7c Merge pull request #65 from alexmipego/lldb-python-connect-fix
Fix lldb status checking
2014-10-06 21:55:19 -07:00
Andy Polyakov
4589cd5d05 arrange callback in read_dir for future use
Custom callback is called for every file or directory listed on device. This will be used for file download.
2014-10-06 23:16:40 +02:00
Andy Polyakov
9a2da6f642 Fix usage semantic and pair of resource leaks
AFCConnectionOpen and AFCFIleInfoOpen don't require initialized pointer to pointer to result, but do require corresponding Close calls.
2014-10-06 23:02:06 +02:00
Andy Polyakov
23afce0d37 handle no --args
When no --args are passed application was started with {args} as argument instead of no argument.
2014-10-06 22:40:43 +02:00
Andy Polyakov
4869a343e8 fix AFCFileRef[Read|Write] prototypes
Incorrect AFCFileRefRead prototype was causing crashes in 64-bit build when reading large files.
2014-10-06 22:32:36 +02:00
Alexandre Gomes
bf5a1e065e fix lldb status checking 2014-10-06 13:36:31 +01:00
senthil
6bd90a5133 a minor debugging version 2014-09-02 16:18:33 -04:00
Shazron Abdullah
e2f436ad52 Merge pull request #57 from hinesmr/patch-1
Include iPods for device search in the README "Listing Device IDs" section.
2014-08-29 16:36:51 -07:00
Michael R. Hines
35097bd5a0 Don't forget about iPods too =)
Update the readme to include iPods in the device identifier search.
2014-08-19 19:51:20 +08:00
senthilmanick
c85248c88a Merge pull request #1 from phonegap/master
Merge with main
2014-08-05 19:12:45 -04:00
Shazron Abdullah
0f1ef6f4ef Fixes #54 - Publish 1.1.0 version 2014-08-04 19:07:31 -07:00
Shazron Abdullah
6801052024 Merge pull request #53 from senthilmanick/master
Fixes #51 - When the device is locked, ios-deploy hangs.
Fixes #52 - Enhancement: Add "Just launch" option
2014-08-04 18:56:51 -07:00
senthil
616b6ab1ff updated to version 1.0.10 2014-08-03 13:43:38 -04:00
senthil
55a12cb02e Fix for issues 51 and 52
51: Updated the python:run_command to look for : Locked.
52: Added option -L that is a variation of non-interactive
Added the constant with safequit and implemented the equivalent python
2014-08-03 12:56:17 -04:00
Shazron Abdullah
5f90ebb32b Fixes #50 - Publish 1.0.9 version 2014-08-01 15:20:24 -07:00
Shazron Abdullah
54a62bfdd0 Fixes #49 - Update README with new help text #49 2014-07-31 17:49:44 -07:00
Alexandre Gomes
3799a8a535 Implements #48 - Wifi Support & Checks
Signed-off-by: Shazron Abdullah <shazron@gmail.com>
2014-07-31 12:42:54 -07:00
Neo Alienson
e466aeac66 Implements #42 - Merge file listing feature from phildrip/fruitstrap.
Signed-off-by: Shazron Abdullah <shazron@gmail.com>
2014-07-30 16:26:04 -07:00
Shazron Abdullah
ffe40a0fac Merge pull request #43 from black-square/master
--args command supports arguments with spaces
2014-07-29 16:54:03 -07:00
Dmitriy Shesterkin
c5d206b72c Added an ability to pass arguments with space character to the application by using the command "--args":
./ios-deploy  ...  --args "\"TEST_FILTER=some text here\" arg2 arg3"
2014-06-27 14:53:57 -03:00
Shazron Abdullah
6fc2ee5e38 Updated npm version to 1.0.8 2014-05-12 18:09:05 -07:00
Shazron Abdullah
443abe4d38 Updated version to 1.0.8 2014-05-12 18:05:45 -07:00
Shazron Abdullah
42a7dbcc1f Updated README for --uninstall option. 2014-05-09 16:57:46 -07:00
Shazron Abdullah
4f9afb7499 Update version to 1.0.7 2014-05-09 16:53:41 -07:00
Shazron Abdullah
f7283216ef Merge pull request #35 from wjywbs/remove-app
Fixes #35 - Add uninstall feature.
2014-05-09 16:51:37 -07:00
wjywbs
cfb086ee44 Add uninstall feature. 2014-05-09 16:02:51 -04:00
Shazron Abdullah
9e52fd16d7 Added CONTRIBUTING file 2014-05-01 23:11:25 -07:00
Shazron Abdullah
6c42fd3cf9 Merge pull request #33 from Unity-Technologies/master
Fix for lldb's "^D" and "quit" spam when running without a terminal.
2014-04-29 17:35:50 -07:00
Julius Trinkunas
3ee1bca513 Stop lldb's "^D" and "quit" spam in a non terminal environment. 2014-04-29 14:33:00 +03:00
Julius Trinkunas
0a9418a564 Add friendly message for code-signing check fails. 2014-04-29 14:33:00 +03:00
Shazron Abdullah
72e83d06e1 Merge pull request #27 from oNaiPs/better_sdk_makefile
Better sdk makefile
2014-04-03 12:35:22 -07:00
Shazron Abdullah
bab1d5bded Merge pull request #26 from oNaiPs/fix_402653028_error
Added version to Info.plist file, fixes -402653028 error
2014-04-03 12:34:40 -07:00
Jose Pereira
f0d5d58a8b Separated sdk version from full path, easier to set after updates 2014-04-03 11:45:57 -07:00
Jose Pereira
8fc098a877 Added version to Info.plist file, fixes -402653028 error 2014-04-03 11:42:57 -07:00
Shazron Abdullah
bad5fe321b Merge pull request #25 from Unity-Technologies/master
Fix exiting and propagate app exit code in non interactive mode.
2014-04-02 10:35:05 -07:00
Julius Trinkunas
79c4cc5c6a Fix exiting and propagate app exit code in non interactive mode. 2014-04-01 16:20:14 +03:00
Shazron Abdullah
f54f67c418 Added the two new flags from 1.0.6 to the README 2014-03-27 15:32:19 -07:00
Shazron Abdullah
f1a2c40566 Increment version to 1.0.6 2014-03-27 15:11:35 -07:00
Shazron Abdullah
c92682d148 Merge pull request #22 from Unity-Technologies/master
Add non interactive mode.
2014-03-27 12:35:25 -07:00
Julius Trinkunas
08f3b92306 Fix hangup when launching from scripts. 2014-03-27 16:14:14 +02:00
Julius Trinkunas
a4f3c2c84b Add non interactive mode. 2014-03-26 19:13:48 +02:00
Julius Trinkunas
a3a99e6553 Remove python wrapper shell. 2014-03-26 18:59:01 +02:00
wjywbs
7f2231bd39 Read port number in command line to debug app in multiple devices. 2014-03-24 14:37:03 -07:00
10 changed files with 1670 additions and 177 deletions

5
.gitignore vendored
View File

@@ -1,5 +1,6 @@
demo demo
demo.app demo.app
ios-deploy ios-deploy
ios-deploy.dSYM
/.DS_Store /.DS_Store
*~

31
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,31 @@
## Contributing to ios-deploy
Github url:
https://github.com/phonegap/ios-deploy
Git clone url:
https://github.com/phonegap/ios-deploy.git
## Filing an issue
Please run the commands below in your Terminal.app and include it in the issue:
```
1. sw_vers -productVersion
2. ios-deploy -V
3. xcodebuild -version
4. xcode-select --print-path
5. gcc --version
6. lldb --version
```
Also include **command line arguments** you used for ios-deploy.
## Sending a Pull Request
Please **create a topic branch** for your issue before submitting your pull request. You will be asked to re-submit if your pull request contains unrelated commits.
Please elaborate regarding the problem the pull request is supposed to solve, and perhaps also link to any relevant issues the pull request is trying to fix.

View File

@@ -10,6 +10,8 @@
</array> </array>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>demo</string> <string>demo</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>demo</string> <string>demo</string>
<key>CFBundleResourceSpecification</key> <key>CFBundleResourceSpecification</key>

View File

@@ -1,8 +1,10 @@
IOS_CC = gcc -ObjC IOS_SDK_VERSION = 8.3
IOS_SDK = $(shell xcode-select --print-path)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
DEVICE_SUPPORT = $(shell xcode-select --print-path)/Platforms/iPhoneOS.platform/DeviceSupport
all: clean ios-deploy IOS_CC = gcc -ObjC
DEVICE_SUPPORT = $(shell xcode-select --print-path)/Platforms/iPhoneOS.platform/DeviceSupport
IOS_SDK = $(shell xcode-select --print-path)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$(IOS_SDK_VERSION).sdk
all: clean ios-deploy demo.app
demo.app: demo Info.plist demo.app: demo Info.plist
mkdir -p demo.app mkdir -p demo.app
@@ -30,4 +32,4 @@ debug: all
./ios-deploy --debug --bundle demo.app ./ios-deploy --debug --bundle demo.app
clean: clean:
rm -rf *.app demo ios-deploy @rm -rf *.app demo ios-deploy

View File

@@ -396,11 +396,11 @@ afc_error_t AFCFileRefOpen(afc_connection *conn, const char *path,
afc_error_t AFCFileRefSeek(afc_connection *conn, afc_file_ref ref, afc_error_t AFCFileRefSeek(afc_connection *conn, afc_file_ref ref,
unsigned long long offset1, unsigned long long offset2); unsigned long long offset1, unsigned long long offset2);
afc_error_t AFCFileRefRead(afc_connection *conn, afc_file_ref ref, afc_error_t AFCFileRefRead(afc_connection *conn, afc_file_ref ref,
void *buf, unsigned int *len); void *buf, size_t *len);
afc_error_t AFCFileRefSetFileSize(afc_connection *conn, afc_file_ref ref, afc_error_t AFCFileRefSetFileSize(afc_connection *conn, afc_file_ref ref,
unsigned long long offset); unsigned long long offset);
afc_error_t AFCFileRefWrite(afc_connection *conn, afc_file_ref ref, afc_error_t AFCFileRefWrite(afc_connection *conn, afc_file_ref ref,
const void *buf, unsigned int len); const void *buf, size_t len);
afc_error_t AFCFileRefClose(afc_connection *conn, afc_file_ref ref); afc_error_t AFCFileRefClose(afc_connection *conn, afc_file_ref ref);
afc_error_t AFCFileInfoOpen(afc_connection *conn, const char *path, struct afc_error_t AFCFileInfoOpen(afc_connection *conn, const char *path, struct
@@ -453,6 +453,8 @@ typedef int (*am_device_install_application_callback)(CFDictionaryRef, int);
mach_error_t AMDeviceInstallApplication(service_conn_t socket, CFStringRef path, CFDictionaryRef options, am_device_install_application_callback callback, void *user); mach_error_t AMDeviceInstallApplication(service_conn_t socket, CFStringRef path, CFDictionaryRef options, am_device_install_application_callback callback, void *user);
mach_error_t AMDeviceTransferApplication(service_conn_t socket, CFStringRef path, CFDictionaryRef options, am_device_install_application_callback callbackj, void *user); mach_error_t AMDeviceTransferApplication(service_conn_t socket, CFStringRef path, CFDictionaryRef options, am_device_install_application_callback callbackj, void *user);
int AMDeviceSecureUninstallApplication(int unknown0, struct am_device *device, CFStringRef bundle_id, int unknown1, void *callback, int callback_arg);
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* Semi-private routines * Semi-private routines
* ------------------------------------------------------------------------- */ * ------------------------------------------------------------------------- */
@@ -491,4 +493,4 @@ typedef unsigned int (*t_performOperation)(struct am_restore_device *rdev,
} }
#endif #endif
#endif #endif

103
README.md
View File

@@ -1,16 +1,38 @@
ios-deploy ios-deploy
========== ==========
Install and debug iPhone apps without using Xcode. Designed to work on unjailbroken devices. Install and debug iOS apps without using Xcode. Designed to work on un-jailbroken devices.
## Requirements ## Requirements
* Mac OS X. Tested on Snow Leopard only. * Mac OS X. Tested on 10.10 Yosemite and iOS 8.3
* You need to have a valid iPhone development certificate installed. * You need to have a valid iOS Development certificate installed.
* Xcode must be installed, along with the SDK for your iOS version. * Xcode 6 or greater should be installed
## Installation
ios-deploy installation is made simple using the node.js package manager. If you use [Homebrew](http://brew.sh/), install [node.js](https://nodejs.org):
```
brew install node
```
Now install ios-deploy with the [node.js](https://nodejs.org) package manager:
```
npm install -g ios-deploy
```
To install from source:
```
make install prefix=/usr/local
```
This will install ios-deploy in the `bin` folder of `/usr/local`, i.e. `/usr/local/bin`
## Usage ## Usage
./ios-deploy [OPTION]... Usage: ios-deploy [OPTION]...
-d, --debug launch the app in GDB after installation -d, --debug launch the app in GDB after installation
-i, --id <device_id> the id of the device to connect to -i, --id <device_id> the id of the device to connect to
-c, --detect only detect if the device is connected -c, --detect only detect if the device is connected
@@ -18,26 +40,69 @@ Install and debug iPhone apps without using Xcode. Designed to work on unjailbro
-a, --args <args> command line arguments to pass to the app when launching it -a, --args <args> command line arguments to pass to the app when launching it
-t, --timeout <timeout> number of seconds to wait for a device to be connected -t, --timeout <timeout> number of seconds to wait for a device to be connected
-u, --unbuffered don't buffer stdout -u, --unbuffered don't buffer stdout
-g, --gdbargs <args> extra arguments to pass to GDB when starting the debugger
-x, --gdbexec <file> GDB commands script file
-n, --nostart do not start the app when debugging -n, --nostart do not start the app when debugging
-I, --noninteractive start in non interactive mode (quit when app crashes or exits)
-L, --justlaunch just launch the app and exit lldb
-v, --verbose enable verbose output -v, --verbose enable verbose output
-m, --noinstall directly start debugging without app install (-d not required) -m, --noinstall directly start debugging without app install (-d not required)
-p, --port <number> port used for device, default: 12345
-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, upload, and uninstall_only
-l, --list list files
-o, --upload <file> upload file
-w, --download download app tree
-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)
-V, --version print the executable version -V, --version print the executable version
-e, --exists check if the app with given bundle_id is installed or not
## 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 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
// 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
## Demo ## Demo
* The included demo.app represents the minimum required to get code running on iOS. The included demo.app represents the minimum required to get code running on iOS.
* `make install` will install demo.app to the device.
* `make debug` will install demo.app and launch a GDB session. * `make demo.app` will generate the demo.app executable. If it doesn't compile, modify IOS_SDK_VERSION in the Makefile.
* `make debug` will install demo.app and launch a LLDB session.
## Notes ## Notes
* With some modifications, it may be possible to use this without Xcode installed; however, you would need a copy of the relevant DeveloperDiskImage.dmg (included with Xcode). GDB would also run slower as symbols would be downloaded from the device on-the-fly. * With some modifications, it may be possible to use this without Xcode installed; however, you would need a copy of the relevant DeveloperDiskImage.dmg (included with Xcode). lldb would also run slower as symbols would be downloaded from the device on-the-fly.
## Listing Device Ids
Device Ids are the UDIDs of the iOS devices. From the command line, you can list device ids [this way](http://javierhz.blogspot.com/2012/06/how-to-get-udid-of-iphone-using-shell.html):
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'

358
errors.h Normal file
View File

@@ -0,0 +1,358 @@
typedef struct errorcode_to_id {
unsigned int error;
const char* id;
} errorcode_to_id_t;
typedef struct error_id_to_message {
const char* id;
const char* message;
} error_id_to_message_t;
// Taken from https://github.com/samdmarshall/SDMMobileDevice/blob/master/Framework/MobileDevice/Error/SDMMD_Error.h
static errorcode_to_id_t errorcode_to_id[] = {
{ 0xe8000001, "kAMDUndefinedError" },
{ 0xe8000002, "kAMDBadHeaderError" },
{ 0xe8000003, "kAMDNoResourcesError" },
{ 0xe8000004, "kAMDReadError" },
{ 0xe8000005, "kAMDWriteError" },
{ 0xe8000006, "kAMDUnknownPacketError" },
{ 0xe8000007, "kAMDInvalidArgumentError" },
{ 0xe8000008, "kAMDNotFoundError" },
{ 0xe8000009, "kAMDIsDirectoryError" },
{ 0xe800000a, "kAMDPermissionError" },
{ 0xe800000b, "kAMDNotConnectedError" },
{ 0xe800000c, "kAMDTimeOutError" },
{ 0xe800000d, "kAMDOverrunError" },
{ 0xe800000e, "kAMDEOFError" },
{ 0xe800000f, "kAMDUnsupportedError" },
{ 0xe8000010, "kAMDFileExistsError" },
{ 0xe8000011, "kAMDBusyError" },
{ 0xe8000012, "kAMDCryptoError" },
{ 0xe8000013, "kAMDInvalidResponseError" },
{ 0xe8000014, "kAMDMissingKeyError" },
{ 0xe8000015, "kAMDMissingValueError" },
{ 0xe8000016, "kAMDGetProhibitedError" },
{ 0xe8000017, "kAMDSetProhibitedError" },
{ 0xe8000018, "kAMDRemoveProhibitedError" },
{ 0xe8000019, "kAMDImmutableValueError" },
{ 0xe800001a, "kAMDPasswordProtectedError" },
{ 0xe800001b, "kAMDMissingHostIDError" },
{ 0xe800001c, "kAMDInvalidHostIDError" },
{ 0xe800001d, "kAMDSessionActiveError" },
{ 0xe800001e, "kAMDSessionInactiveError" },
{ 0xe800001f, "kAMDMissingSessionIDError" },
{ 0xe8000020, "kAMDInvalidSessionIDError" },
{ 0xe8000021, "kAMDMissingServiceError" },
{ 0xe8000022, "kAMDInvalidServiceError" },
{ 0xe8000023, "kAMDInvalidCheckinError" },
{ 0xe8000024, "kAMDCheckinTimeoutError" },
{ 0xe8000025, "kAMDMissingPairRecordError" },
{ 0xe8000026, "kAMDInvalidActivationRecordError" },
{ 0xe8000027, "kAMDMissingActivationRecordError" },
{ 0xe8000028, "kAMDWrongDroidError" },
{ 0xe8000029, "kAMDSUVerificationError" },
{ 0xe800002a, "kAMDSUPatchError" },
{ 0xe800002b, "kAMDSUFirmwareError" },
{ 0xe800002c, "kAMDProvisioningProfileNotValid" },
{ 0xe800002d, "kAMDSendMessageError" },
{ 0xe800002e, "kAMDReceiveMessageError" },
{ 0xe800002f, "kAMDMissingOptionsError" },
{ 0xe8000030, "kAMDMissingImageTypeError" },
{ 0xe8000031, "kAMDDigestFailedError" },
{ 0xe8000032, "kAMDStartServiceError" },
{ 0xe8000033, "kAMDInvalidDiskImageError" },
{ 0xe8000034, "kAMDMissingDigestError" },
{ 0xe8000035, "kAMDMuxError" },
{ 0xe8000036, "kAMDApplicationAlreadyInstalledError" },
{ 0xe8000037, "kAMDApplicationMoveFailedError" },
{ 0xe8000038, "kAMDApplicationSINFCaptureFailedError" },
{ 0xe8000039, "kAMDApplicationSandboxFailedError" },
{ 0xe800003a, "kAMDApplicationVerificationFailedError" },
{ 0xe800003b, "kAMDArchiveDestructionFailedError" },
{ 0xe800003c, "kAMDBundleVerificationFailedError" },
{ 0xe800003d, "kAMDCarrierBundleCopyFailedError" },
{ 0xe800003e, "kAMDCarrierBundleDirectoryCreationFailedError" },
{ 0xe800003f, "kAMDCarrierBundleMissingSupportedSIMsError" },
{ 0xe8000040, "kAMDCommCenterNotificationFailedError" },
{ 0xe8000041, "kAMDContainerCreationFailedError" },
{ 0xe8000042, "kAMDContainerP0wnFailedError" },
{ 0xe8000043, "kAMDContainerRemovalFailedError" },
{ 0xe8000044, "kAMDEmbeddedProfileInstallFailedError" },
{ 0xe8000045, "kAMDErrorError" },
{ 0xe8000046, "kAMDExecutableTwiddleFailedError" },
{ 0xe8000047, "kAMDExistenceCheckFailedError" },
{ 0xe8000048, "kAMDInstallMapUpdateFailedError" },
{ 0xe8000049, "kAMDManifestCaptureFailedError" },
{ 0xe800004a, "kAMDMapGenerationFailedError" },
{ 0xe800004b, "kAMDMissingBundleExecutableError" },
{ 0xe800004c, "kAMDMissingBundleIdentifierError" },
{ 0xe800004d, "kAMDMissingBundlePathError" },
{ 0xe800004e, "kAMDMissingContainerError" },
{ 0xe800004f, "kAMDNotificationFailedError" },
{ 0xe8000050, "kAMDPackageExtractionFailedError" },
{ 0xe8000051, "kAMDPackageInspectionFailedError" },
{ 0xe8000052, "kAMDPackageMoveFailedError" },
{ 0xe8000053, "kAMDPathConversionFailedError" },
{ 0xe8000054, "kAMDRestoreContainerFailedError" },
{ 0xe8000055, "kAMDSeatbeltProfileRemovalFailedError" },
{ 0xe8000056, "kAMDStageCreationFailedError" },
{ 0xe8000057, "kAMDSymlinkFailedError" },
{ 0xe8000058, "kAMDiTunesArtworkCaptureFailedError" },
{ 0xe8000059, "kAMDiTunesMetadataCaptureFailedError" },
{ 0xe800005a, "kAMDAlreadyArchivedError" },
{ 0xe800005b, "kAMDServiceLimitError" },
{ 0xe800005c, "kAMDInvalidPairRecordError" },
{ 0xe800005d, "kAMDServiceProhibitedError" },
{ 0xe800005e, "kAMDCheckinSetupFailedError" },
{ 0xe800005f, "kAMDCheckinConnectionFailedError" },
{ 0xe8000060, "kAMDCheckinReceiveFailedError" },
{ 0xe8000061, "kAMDCheckinResponseFailedError" },
{ 0xe8000062, "kAMDCheckinSendFailedError" },
{ 0xe8000063, "kAMDMuxCreateListenerError" },
{ 0xe8000064, "kAMDMuxGetListenerError" },
{ 0xe8000065, "kAMDMuxConnectError" },
{ 0xe8000066, "kAMDUnknownCommandError" },
{ 0xe8000067, "kAMDAPIInternalError" },
{ 0xe8000068, "kAMDSavePairRecordFailedError" },
{ 0xe8000069, "kAMDCheckinOutOfMemoryError" },
{ 0xe800006a, "kAMDDeviceTooNewError" },
{ 0xe800006b, "kAMDDeviceRefNoGood" },
{ 0xe800006c, "kAMDCannotTranslateError" },
{ 0xe800006d, "kAMDMobileImageMounterMissingImageSignature" },
{ 0xe800006e, "kAMDMobileImageMounterResponseCreationFailed" },
{ 0xe800006f, "kAMDMobileImageMounterMissingImageType" },
{ 0xe8000070, "kAMDMobileImageMounterMissingImagePath" },
{ 0xe8000071, "kAMDMobileImageMounterImageMapLoadFailed" },
{ 0xe8000072, "kAMDMobileImageMounterAlreadyMounted" },
{ 0xe8000073, "kAMDMobileImageMounterImageMoveFailed" },
{ 0xe8000074, "kAMDMobileImageMounterMountPathMissing" },
{ 0xe8000075, "kAMDMobileImageMounterMountPathNotEmpty" },
{ 0xe8000076, "kAMDMobileImageMounterImageMountFailed" },
{ 0xe8000077, "kAMDMobileImageMounterTrustCacheLoadFailed" },
{ 0xe8000078, "kAMDMobileImageMounterDigestFailed" },
{ 0xe8000079, "kAMDMobileImageMounterDigestCreationFailed" },
{ 0xe800007a, "kAMDMobileImageMounterImageVerificationFailed" },
{ 0xe800007b, "kAMDMobileImageMounterImageInfoCreationFailed" },
{ 0xe800007c, "kAMDMobileImageMounterImageMapStoreFailed" },
{ 0xe800007d, "kAMDBonjourSetupError" },
{ 0xe800007e, "kAMDDeviceOSVersionTooLow" },
{ 0xe800007f, "kAMDNoWifiSyncSupportError" },
{ 0xe8000080, "kAMDDeviceFamilyNotSupported" },
{ 0xe8000081, "kAMDEscrowLockedError" },
{ 0xe8000082, "kAMDPairingProhibitedError" },
{ 0xe8000083, "kAMDProhibitedBySupervision" },
{ 0xe8000084, "kAMDDeviceDisconnectedError" },
{ 0xe8000085, "kAMDTooBigError" },
{ 0xe8000086, "kAMDPackagePatchFailedError" },
{ 0xe8000087, "kAMDIncorrectArchitectureError" },
{ 0xe8000088, "kAMDPluginCopyFailedError" },
{ 0xe8000089, "kAMDBreadcrumbFailedError" },
{ 0xe800008a, "kAMDBreadcrumbUnlockError" },
{ 0xe800008b, "kAMDGeoJSONCaptureFailedError" },
{ 0xe800008c, "kAMDNewsstandArtworkCaptureFailedError" },
{ 0xe800008d, "kAMDMissingCommandError" },
{ 0xe800008e, "kAMDNotEntitledError" },
{ 0xe800008f, "kAMDMissingPackagePathError" },
{ 0xe8000090, "kAMDMissingContainerPathError" },
{ 0xe8000091, "kAMDMissingApplicationIdentifierError" },
{ 0xe8000092, "kAMDMissingAttributeValueError" },
{ 0xe8000093, "kAMDLookupFailedError" },
{ 0xe8000094, "kAMDDictCreationFailedError" },
{ 0xe8000095, "kAMDUserDeniedPairingError" },
{ 0xe8000096, "kAMDPairingDialogResponsePendingError" },
{ 0xe8000097, "kAMDInstallProhibitedError" },
{ 0xe8000098, "kAMDUninstallProhibitedError" },
{ 0xe8000099, "kAMDFMiPProtectedError" },
{ 0xe800009a, "kAMDMCProtected" },
{ 0xe800009b, "kAMDMCChallengeRequired" },
{ 0xe800009c, "kAMDMissingBundleVersionError" },
{ 0xe8008015, "A valid provisioning profile for this executable was not found."},
};
const int errorcode_to_id_count = sizeof(errorcode_to_id) / sizeof(errorcode_to_id_t);
// Taken from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/en_GB.lproj/Localizable.strings
error_id_to_message_t error_id_to_message[] = {
{ "kAMDAPIInternalError", "There was an internal API error." },
{ "kAMDAlreadyArchivedError", "The application is already archived." },
{ "kAMDAppBlacklistedError", "This app is not allowed to be installed on this device." },
{ "kAMDApplicationAlreadyInstalledError", "A system application with the given bundle identifier is already installed on the device and cannot be replaced." },
{ "kAMDApplicationMoveFailedError", "The application could not be moved into place on the device." },
{ "kAMDApplicationSandboxFailedError", "The application could not be sandboxed." },
{ "kAMDApplicationVerificationFailedError", "The application could not be verified." },
{ "kAMDArchiveDestructionFailedError", "Could not remove the application archive." },
{ "kAMDBadHeaderError", "Could not transfer file." },
{ "kAMDBreadcrumbFailedError", "Could not write installation breadcrumb." },
{ "kAMDBreadcrumbUnlockError", "Could not update installation breadcrumb." },
{ "kAMDBundleVerificationFailedError", "The carrier bundle could not be verified." },
{ "kAMDBusyError", "The device is busy." },
{ "kAMDCannotTranslateError", "Could not translate messages from device" },
{ "kAMDCarrierBundleCopyFailedError", "Could not install the carrier bundle." },
{ "kAMDCarrierBundleDirectoryCreationFailedError", "Could not create the carrier bundle directory." },
{ "kAMDCarrierBundleMissingSupportedSIMsError", "There are no supported SIMs for this carrier bundle." },
{ "kAMDCheckinConnectionFailedError", "The service did not start properly on the device." },
{ "kAMDCheckinOutOfMemoryError", "The service did not start properly on the device." },
{ "kAMDCheckinReceiveFailedError", "The service did not start properly on the device." },
{ "kAMDCheckinResponseFailedError", "The service did not start properly on the device." },
{ "kAMDCheckinSendFailedError", "The service did not start properly on the device." },
{ "kAMDCheckinSetupFailedError", "Could not start service on device" },
{ "kAMDCheckinTimeoutError", "The service did not start properly on the device." },
{ "kAMDCommCenterNotificationFailedError", "Could not listen for notification from the baseband." },
{ "kAMDContainerCreationFailedError", "Could not create application container." },
{ "kAMDContainerP0wnFailedError", "Could not repair permissions on application container." },
{ "kAMDContainerRemovalFailedError", "Could not remove the application container." },
{ "kAMDCryptoError", "Could not establish a secure connection to the device." },
{ "kAMDDeviceDisconnectedError", "This device is no longer connected." },
{ "kAMDDeviceFamilyNotSupported", "This application does not support this kind of device." },
{ "kAMDDeviceOSVersionTooLow", "The device OS version is too low." },
{ "kAMDDeviceRefNoGood", "This device is no longer connected." },
{ "kAMDDeviceTooNewError", "This application needs to be updated." },
{ "kAMDDictCreationFailedError", "Could not extract capabilities from the request." },
{ "kAMDDigestFailedError", "Could not read disk image." },
{ "kAMDEOFError", "End of file." },
{ "kAMDEmbeddedProfileInstallFailedError", "Could not install the embedded provisioning profile." },
{ "kAMDErrorError", "An error occurred." },
{ "kAMDEscrowLockedError", "Device is not available until first unlock after boot." },
{ "kAMDExecutableTwiddleFailedError", "Could not change executable permissions on the application." },
{ "kAMDExistenceCheckFailedError", "Could not check to see if the application already exists." },
{ "kAMDFMiPProtectedError", "The device is in lost mode." },
{ "kAMDFileExistsError", "The file already exists." },
{ "kAMDGeoJSONCaptureFailedError", "Could not save the GeoJSON data." },
{ "kAMDGetProhibitedError", "Cannot retrieve value from the passcode-locked device." },
{ "kAMDImmutableValueError", "This value cannot be changed." },
{ "kAMDIncorrectArchitectureError", "This application does not support this device's CPU type." },
{ "kAMDInstallMapUpdateFailedError", "Could not update the installed applications list." },
{ "kAMDInstallProhibitedError", "Installation of apps is prohibited by a policy on the device." },
{ "kAMDInvalidActivationRecordError", "The activation record is not valid." },
{ "kAMDInvalidArgumentError", "The argument is invalid." },
{ "kAMDInvalidCheckinError", "Could not start service on device" },
{ "kAMDInvalidDiskImageError", "The disk image is invalid." },
{ "kAMDInvalidHostIDError", "The device does not recognise this host." },
{ "kAMDInvalidPairRecordError", "The host is no longer paired with the device." },
{ "kAMDInvalidResponseError", "Received an unexpected response from the device." },
{ "kAMDInvalidServiceError", "The service is invalid." },
{ "kAMDInvalidSessionIDError", "The session ID is invalid." },
{ "kAMDIsDirectoryError", "The path is a directory." },
{ "kAMDLookupFailedError", "Could not list installed applications." },
{ "kAMDMCChallengeRequired", "A policy on the device requires secure pairing." },
{ "kAMDMCProtected", "Pairing is prohibited by a policy on the device." },
{ "kAMDManifestCaptureFailedError", "Could not save the application manifest." },
{ "kAMDMapGenerationFailedError", "Could not generate the map." },
{ "kAMDMissingActivationRecordError", "The activation record could not be found." },
{ "kAMDMissingApplicationIdentifierError", "Request was missing the application identifier." },
{ "kAMDMissingAttributeValueError", "Request was missing a required value." },
{ "kAMDMissingBundleExecutableError", "The application bundle does not contain an executable." },
{ "kAMDMissingBundleIdentifierError", "The application bundle does not contain a valid identifier." },
{ "kAMDMissingBundlePathError", "Could not determine the application bundle path." },
{ "kAMDMissingBundleVersionError", "The bundle's Info.plist does not contain a CFBundleVersion key or its value is not a string." },
{ "kAMDMissingCommandError", "The request did not contain a command." },
{ "kAMDMissingContainerError", "Could not find the container for the installed application." },
{ "kAMDMissingContainerPathError", "Request was missing the container path." },
{ "kAMDMissingDigestError", "The digest is missing." },
{ "kAMDMissingHostIDError", "The device does not recognise this host." },
{ "kAMDMissingImageTypeError", "The image is missing." },
{ "kAMDMissingKeyError", "The key is missing." },
{ "kAMDMissingOptionsError", "The options are missing." },
{ "kAMDMissingPackagePathError", "Request was missing the package path." },
{ "kAMDMissingPairRecordError", "The host is not paired with the device." },
{ "kAMDMissingServiceError", "The service is missing." },
{ "kAMDMissingSessionIDError", "The session ID is missing." },
{ "kAMDMissingValueError", "The value is missing." },
{ "kAMDMobileImageMounterAlreadyMounted", "Could not support development." },
{ "kAMDMobileImageMounterDigestCreationFailed", "Could not support development." },
{ "kAMDMobileImageMounterDigestFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageInfoCreationFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageMapLoadFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageMapStoreFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageMountFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageMoveFailed", "Could not support development." },
{ "kAMDMobileImageMounterImageVerificationFailed", "Could not support development." },
{ "kAMDMobileImageMounterMissingImagePath", "Could not support development." },
{ "kAMDMobileImageMounterMissingImageSignature", "Could not support development." },
{ "kAMDMobileImageMounterMissingImageType", "Could not support development." },
{ "kAMDMobileImageMounterMountPathMissing", "Could not support development." },
{ "kAMDMobileImageMounterMountPathNotEmpty", "Could not support development." },
{ "kAMDMobileImageMounterResponseCreationFailed", "Could not support development." },
{ "kAMDMobileImageMounterTrustCacheLoadFailed", "Could not support development." },
{ "kAMDMuxConnectError", "Could not connect to the device." },
{ "kAMDMuxCreateListenerError", "Could not listen for USB devices." },
{ "kAMDMuxError", "There was an error with the USB device multiplexor." },
{ "kAMDMuxGetListenerError", "Could not get the USB listener." },
{ "kAMDNewsstandArtworkCaptureFailedError", "Could not save the Newsstand artwork." },
{ "kAMDNoResourcesError", "Could not allocate a resource." },
{ "kAMDNoWifiSyncSupportError", "Device doesn't support wireless sync." },
{ "kAMDNotConnectedError", "Not connected to the device." },
{ "kAMDNotEntitledError", "The requesting application is not allowed to make this request." },
{ "kAMDNotFoundError", "The file could not be found." },
{ "kAMDNotificationFailedError", "Could not post a notification." },
{ "kAMDOverrunError", "There was a buffer overrun." },
{ "kAMDPackageExtractionFailedError", "Could not open the application package." },
{ "kAMDPackageInspectionFailedError", "Could not inspect the application package." },
{ "kAMDPackageMoveFailedError", "Could not move the application package into the staging location." },
{ "kAMDPackagePatchFailedError", "Could not apply patch update to application." },
{ "kAMDPairingDialogResponsePendingError", "The user has not yet responded to the pairing request." },
{ "kAMDPairingProhibitedError", "Pairing only allowed over USB." },
{ "kAMDPasswordProtectedError", "The device is passcode protected." },
{ "kAMDPathConversionFailedError", "Could not convert the path." },
{ "kAMDPermissionError", "You do not have permission." },
{ "kAMDPluginCopyFailedError", "Could not copy VPN Plug-in into app container." },
{ "kAMDProhibitedBySupervision", "Operation prohibited on supervised devices." },
{ "kAMDProvisioningProfileNotValid", "The provisioning profile is not valid." },
{ "kAMDReadError", "Could not read from the device." },
{ "kAMDReceiveMessageError", "Could not receive a message from the device." },
{ "kAMDRemoveProhibitedError", "Cannot remove value on device." },
{ "kAMDRestoreContainerFailedError", "Could not restore the application container." },
{ "kAMDSUFirmwareError", "Could not flash the firmware." },
{ "kAMDSUPatchError", "Could not patch the file." },
{ "kAMDSUVerificationError", "The software update package could not be verified." },
{ "kAMDSavePairRecordFailedError", "Could not save the pairing record." },
{ "kAMDSeatbeltProfileRemovalFailedError", "Could not remove the application seatbelt profile." },
{ "kAMDSendMessageError", "Could not send a message to the device." },
{ "kAMDServiceLimitError", "Too many instances of this service are already running." },
{ "kAMDServiceProhibitedError", "The service could not be started on the device." },
{ "kAMDSessionActiveError", "The session is active." },
{ "kAMDSessionInactiveError", "The session is inactive." },
{ "kAMDSetProhibitedError", "Cannot set value on device." },
{ "kAMDStageCreationFailedError", "Could not create the staging directory." },
{ "kAMDStartServiceError", "The service could not be started." },
{ "kAMDSuccess", "There was no error." },
{ "kAMDSymlinkFailedError", "Could not create the symlink." },
{ "kAMDTimeOutError", "The operation timed out." },
{ "kAMDTooBigError", "The message is too big." },
{ "kAMDUndefinedError", "An unknown error occurred." },
{ "kAMDUninstallProhibitedError", "Uninstallation of apps is prohibited by a policy on the device." },
{ "kAMDUnknownCommandError", "The device does not recognise the command." },
{ "kAMDUnknownPacketError", "The packet is unknown." },
{ "kAMDUnsupportedError", "This operation is unsupported." },
{ "kAMDUserDeniedPairingError", "The device rejected the pairing attempt." },
{ "kAMDWriteError", "Could not write to the device." },
{ "kAMDWrongDroidError", "The device is in recovery mode." },
{ "kAMDiTunesArtworkCaptureFailedError", "Could not save the iTunes artwork." },
{ "kAMDiTunesMetadataCaptureFailedError", "Could not save the iTunes metadata." },
};
const int error_id_to_message_count = sizeof(error_id_to_message) / sizeof(error_id_to_message_t);
const char* get_error_message(unsigned int error) {
const char* id = NULL;
// Lookup error localization id
for (int i = 0; i < errorcode_to_id_count; i++) {
if (errorcode_to_id[i].error == error) {
id = errorcode_to_id[i].id;
break;
}
}
// Lookup error message
if (id) {
for (int i = 0; i < error_id_to_message_count; i++)
if (strcmp(error_id_to_message[i].id, id) == 0)
return error_id_to_message[i].message;
}
// If message is not found, then at least return id if it was found, otherwise NULL
return id;
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,8 @@
{ {
"name": "ios-deploy", "name": "ios-deploy",
"version": "1.0.5", "version": "1.6.2",
"description": "launch iOS apps iOS devices from the command line (Xcode 4)", "os" : [ "darwin" ],
"description": "launch iOS apps iOS devices from the command line (Xcode 6)",
"main": "ios-deploy", "main": "ios-deploy",
"scripts": { "scripts": {
"preinstall": "make ios-deploy" "preinstall": "make ios-deploy"

3
resources/buildbox/build.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
echo "$ make"
make