65 Commits
1.2.0 ... 1.6.2

Author SHA1 Message Date
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
senthil
6bd90a5133 a minor debugging version 2014-09-02 16:18:33 -04:00
senthilmanick
c85248c88a Merge pull request #1 from phonegap/master
Merge with main
2014-08-05 19:12:45 -04:00
6 changed files with 1117 additions and 291 deletions

View File

@@ -1,10 +1,10 @@
IOS_SDK_VERSION = 7.1
IOS_SDK_VERSION = 8.3
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
all: clean ios-deploy demo.app
demo.app: demo Info.plist
mkdir -p demo.app
@@ -32,4 +32,4 @@ debug: all
./ios-deploy --debug --bundle demo.app
clean:
rm -rf *.app demo ios-deploy
@rm -rf *.app demo ios-deploy

133
README.md
View File

@@ -1,51 +1,108 @@
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
* Mac OS X. Tested on Snow Leopard only.
* You need to have a valid iPhone development certificate installed.
* Xcode must be installed, along with the SDK for your iOS version.
* Mac OS X. Tested on 10.10 Yosemite and iOS 8.3
* You need to have a valid iOS Development certificate installed.
* 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]...
-d, --debug launch the app in GDB after installation
-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
-t, --timeout <timeout> number of seconds to wait for a device to be connected
-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
-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
-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)
-1, --bundle_id <bundle id> specify bundle id for list and upload
-l, --list list files
-o, --upload <file> upload file
-2, --to <target pathname> use together with upload file. specify target for upload
-V, --version print the executable version
Usage: ios-deploy [OPTION]...
-d, --debug launch the app in GDB after installation
-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
-t, --timeout <timeout> number of seconds to wait for a device to be connected
-u, --unbuffered don't buffer stdout
-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
-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
-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
* 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.
The included demo.app represents the minimum required to get code running on iOS.
* `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
* 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.
## 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 '/iPod/,/Serial/p' | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'
* 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.

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,6 +1,7 @@
{
"name": "ios-deploy",
"version": "1.2.0",
"version": "1.6.2",
"os" : [ "darwin" ],
"description": "launch iOS apps iOS devices from the command line (Xcode 6)",
"main": "ios-deploy",
"scripts": {

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

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