Compare commits

...

178 Commits
1.3.2 ... main

Author SHA1 Message Date
Shazron Abdullah
79a2a3bf95 Fixes #250 - Can't pass in command line args to the iOS application
Thanks to https://github.com/dot-asm
2016-09-16 02:52:18 -07:00
Shazron Abdullah
8741d74623 Add iPad Pro friendly names
This closes #252
2016-09-16 02:46:35 -07:00
Shazron Abdullah
009089254c Added iPhone 7 and 7 Plus friendly names
This closes #251
2016-09-16 02:40:01 -07:00
Shazron Abdullah
e72626a832 Added new iPhone SE friendly name 2016-09-16 02:36:08 -07:00
Shazron Abdullah
100c8a3cbc Added tvOS Apple TV 4G friendly name
This closes #248

Thanks to https://github.com/gusc
2016-09-16 02:34:33 -07:00
Shazron Abdullah
71e14bed95 Merge pull request #228 from Vrixyz/master
Added support for AppleTV OS
2016-09-16 02:20:07 -07:00
Shazron Abdullah
022fd2865a Fixes #240 - IndexError: list index out of range
Thanks to https://github.com/gusc (Gusts Kaksis) for the patch.
2016-09-14 02:11:59 -07:00
Shazron Abdullah
7a808cb6b4 Merge pull request #243 from trigger-corp/master
Add missing iPad Air and iPad Mini models, and fixes #244 - ios-deploy will exit when the detection timeout ends even if the device has been detected
2016-08-08 19:52:55 -07:00
Antoine van Gelder
25588767f2 Fixed: ios-deploy will exit when the detection timeout ends even if the device has been detected 2016-08-02 15:32:37 +02:00
Antoine van Gelder
babe79f391 Add missing iPad Air and iPad Mini models 2016-08-02 15:27:48 +02:00
Shazron Abdullah
26f981e51c Merge pull request #232 from jakepetroules/codes
Bring list of error messages up-to-date.
2016-05-26 14:39:10 -07:00
Jake Petroules
07de7505cc Bring list of error messages up-to-date.
Automatically generated using MobileDevice.framework private APIs.
Xcode 7.3.1 and OS X 10.11.5.
2016-05-26 14:25:52 -07:00
Thierry Berger
978b1bb139 added support for AppleTV OS ; simplified find_path() to avoid quoting root_path (some paths weren't working) 2016-05-13 20:46:09 +02:00
Alexis Kofman
76e8d08e43 Fixes #219 - iOS 9.3 app hangs on splash screen
Fixes cases where process is not yet running.

Signed-off-by: Shazron Abdullah <shazron@apache.org>
2016-04-11 14:06:07 -07:00
Shazron Abdullah
3ef9dfefcf Merge pull request #222 from akofman/tweaks
Tweaks
2016-04-08 11:06:41 -07:00
Alexis Kofman
888323b76e rm autogenerated files from the repo 2016-04-08 19:48:36 +02:00
Alexis Kofman
908a2d56ab replace remaining tabs by spaces 2016-04-08 19:47:48 +02:00
Shazron Abdullah
77654faabd Added travis ci badge 2016-03-23 12:21:54 -07:00
Shazron Abdullah
81b52cd69d Added travis ci config 2016-03-23 12:20:43 -07:00
Shazron Abdullah
d30f6bd379 Merge pull request #217 from stevemoser/patch-1
Update for iPhone SE
2016-03-22 13:16:15 -07:00
Steve Moser
17d0841ab8 Update for iPhone SE
https://twitter.com/panzer/status/712330579291668480
2016-03-22 13:50:13 -04:00
Shazron Abdullah
2461665ea4 Updated Github issue template. 2016-02-25 16:04:11 -08:00
Shazron Abdullah
e8f90b0d2c Added Github issue template. 2016-02-25 16:02:58 -08:00
Shazron Abdullah
1f1725a33b Fixed npm run test 2016-02-04 10:13:39 -08:00
Shazron Abdullah
8757ca562f Added warning text to the check_reqs.js log when running under OS X 10.11 El Capitan 2016-02-04 09:32:07 -08:00
Shazron Abdullah
411f054b0c Merge pull request #205 from stevenkramer/recursive_uploads
Added support for recursive directory uploads
2016-01-19 17:04:53 -08:00
Steven Kramer
4dd9d740aa Added support for recursive directory uploads 2016-01-19 10:08:38 +01:00
Shazron Abdullah
9a9c648cdc Updated version to 2.0.0 2016-01-16 10:35:03 -08:00
Shazron Abdullah
2fceef2c75 Updated README to reflect 1.x branch and master (dev) branch expectations. 2016-01-16 10:33:11 -08:00
Shazron Abdullah
0159cfc194 Added Testing section in the README 2016-01-12 17:52:11 -08:00
Shazron Abdullah
cbba8a4328 Added npm scripts: test, pycompile 2016-01-12 17:49:32 -08:00
Shazron Abdullah
3a57b33e8f Exported lib-ios-deploy header 2016-01-12 17:42:10 -08:00
Shazron Abdullah
fd12c317b7 Restructured folders into src/ 2016-01-12 17:35:59 -08:00
Shazron Abdullah
ecb228aad4 Added libios-deploy target stub, and XCTests stub. ios-deploy dependent on lib-ios-deploy target 2016-01-12 17:19:51 -08:00
Shazron Abdullah
3555b1222c Typo in Run Script that resulted in appending contents to lldb.py.h 2016-01-05 17:42:36 -08:00
Shazron Abdullah
3fef0a5600 Externalized LLDB_FRUITSTRAP_MODULE python commands into external file (source in src/scripts/lldb.py) 2016-01-05 17:33:53 -08:00
Shazron Abdullah
ca29173c80 Externalize version string into a header file (version must be in double quotes) 2016-01-05 16:21:19 -08:00
Shazron Abdullah
e57a4da108 Fixes #194 - Segmentation fault: 11 (related) 2016-01-05 16:04:22 -08:00
Shazron Abdullah
a9e96416a8 Fixes #194 - Segmentation fault: 11 2016-01-05 16:00:12 -08:00
Shazron Abdullah
922f8483a7 Updated version to 1.8.4 2016-01-05 13:19:20 -08:00
Shazron Abdullah
f0ae11a93f Add a note in CONTRIBUTING.md to check out the El Capitan section of the README. Closes #201 2016-01-05 10:52:36 -08:00
Shazron Abdullah
c0988f07e5 Fix README - El Capitan section. Closes #200 2016-01-05 10:50:53 -08:00
Shazron Abdullah
a36b169782 Added --allow-root to El-Capitan notes, and =true to --unsafe-perm 2016-01-04 17:40:06 -08:00
Shazron Abdullah
551cdc5804 Added docs for --no-wifi option 2015-11-23 17:27:52 -08:00
Shazron Abdullah
94d56d74c4 Updated demo Makefile for Xcode 7.1 (iOS 9.1) 2015-11-23 17:27:39 -08:00
Shazron Abdullah
f17fd4c73a Updated version to 1.8.3 2015-11-23 17:22:07 -08:00
Shazron Abdullah
28ceb4733f Merge pull request #192 from jcworsley/master
Added no-wifi option to explicitly skip wifi connectivity.
2015-11-23 17:12:18 -08:00
John C. Worsley
6a8ad1e899 Added no-wifi option to explicitly skip wifi connectivity. 2015-11-09 16:26:19 -08:00
Shazron Abdullah
3ee31bc677 Typo: had two "scripts" sections in package.son 2015-10-12 17:02:05 -07:00
Shazron Abdullah
fccfde865a Increment version to 1.8.2 2015-10-12 16:56:13 -07:00
Shazron Abdullah
f6b4c3f951 Ignore node_modules 2015-10-12 16:55:59 -07:00
Shazron Abdullah
b1c717ebd8 Removed check_reqs.js 2015-10-12 16:55:43 -07:00
Shazron Abdullah
1220cac6e4 Moved check_reqs.js to src, added jshint to npm test 2015-10-12 16:55:08 -07:00
Shazron Abdullah
6f65bb687e Fixes #183 - 'tool' undefined in check_reqs.js 2015-10-12 16:49:04 -07:00
Shazron Abdullah
7af1a9d79b Fixes #184 - Change min xcode version for Travis CI 2015-10-12 16:48:41 -07:00
Shazron Abdullah
23ea3b7097 Updated package.json ver to 1.8.1 2015-10-08 16:07:12 -07:00
Shazron Abdullah
9909fb854c Updated version to 1.8.1 2015-10-08 16:06:15 -07:00
Shazron Abdullah
0320381c67 Fixes #182 - ios-deploy terminates with code 11 in difficult to pinpoint circumstances 2015-10-08 16:06:01 -07:00
Shazron Abdullah
612c3561fd Added verbose logging for #170 2015-10-08 16:05:03 -07:00
Shazron Abdullah
59904aa4c1 Updated README for new build from source instruction 2015-10-06 23:40:42 -07:00
Shazron Abdullah
9f6b41519b Merge branch '135-xcode-project' 2015-10-06 23:10:10 -07:00
Shazron Abdullah
5d2166fcef Fixes #135 - Convert Makefile to xcodeproject. Demo in its own folder now with its own Makefile. 2015-10-06 23:06:45 -07:00
Shazron Abdullah
6ce22c2adc Fixes #176 - Add documentation issue for node preinstall script (workaround) 2015-10-06 22:48:33 -07:00
Shazron Abdullah
ede5d2542d Fixes #156 - --list command add trailing slash for directories 2015-10-06 22:48:33 -07:00
Shazron Abdullah
6b7b31d54a check_reqs - removed shelljs dependency 2015-10-06 22:48:33 -07:00
Shazron Abdullah
8d60757e77 Fixes #167 - On El Cap, detect Xcode 7 properly installed 2015-10-06 22:48:33 -07:00
Shazron Abdullah
2f9fb4304a Incremented version to 1.8.0 2015-10-06 22:48:33 -07:00
Shazron Abdullah
a6e94923cf Fixes #170 - ios-deploy installing over both USB and WiFi 2015-10-06 22:48:32 -07:00
Shazron Abdullah
342965c16a Added iPhone 6s and 6s Plus models. 2015-10-06 22:48:32 -07:00
Shazron Abdullah
4ce3554561 Fixes #164 - Error when launch application in multi-user context 2015-10-06 22:48:32 -07:00
Shazron Abdullah
ab39342b0f Fixes #166 - Segfault when passed a non-existent bundle #166 2015-10-06 22:48:32 -07:00
Shazron Abdullah
2a1844500b Fixes #168 - Segmentation Fault 11 (when deploying an .ipa file) 2015-10-06 22:48:32 -07:00
Shazron Abdullah
5e7420502b Fixes #56 - Assertion failed AMDeviceSecureTransferPath (app name has non-ASCII characters) 2015-10-06 22:48:31 -07:00
Shazron Abdullah
545521954b Fixed typo in README example. 2015-10-06 22:48:31 -07:00
Shazron Abdullah
d6216760e4 Fixes #153 - Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' #153 2015-10-06 22:48:31 -07:00
Julius Trinkunas
0390522194 Add text for errors 0xe8008016 and 0xe8008017. 2015-10-06 22:48:31 -07:00
Julius Trinkunas
ca2e7a3c75 Add attribution for error code reverse engineering. Second try. 2015-10-06 22:48:31 -07:00
Julius Trinkunas
ed7c70aa59 Add attribution for error code reverse engineering. 2015-10-06 22:48:31 -07:00
Julius Trinkunas
093b4b3c9a Add text for error 0xe8008018. 2015-10-06 22:48:30 -07:00
Julius Trinkunas
4d58838ef1 Add text for 0xe800801c error. 2015-10-06 22:48:30 -07:00
Julius Trinkunas
d10562c501 Add text for 0xe8008019 error. 2015-10-06 22:48:30 -07:00
Julius Trinkunas
99dba4e58c Fixes #157 - Bad error formatting string in check_error() 2015-10-06 22:48:30 -07:00
Shazron Abdullah
bf58b61561 Fixes #176 - Add documentation issue for node preinstall script (workaround) 2015-10-06 22:13:04 -07:00
Shazron Abdullah
d2aee71a92 Fixes #156 - --list command add trailing slash for directories 2015-10-06 22:06:28 -07:00
Shazron Abdullah
92f6238bba check_reqs - removed shelljs dependency 2015-10-06 22:01:36 -07:00
Shazron Abdullah
6aa7b57014 Fixes #167 - On El Cap, detect Xcode 7 properly installed 2015-10-06 17:46:50 -07:00
Shazron Abdullah
55d076b805 Incremented version to 1.8.0 2015-10-06 17:11:14 -07:00
Shazron Abdullah
3756385651 Fixes #170 - ios-deploy installing over both USB and WiFi 2015-10-06 16:51:27 -07:00
Shazron Abdullah
adc8a5b9c2 Added iPhone 6s and 6s Plus models. 2015-10-06 15:47:59 -07:00
Shazron Abdullah
bb25caf586 Fixes #164 - Error when launch application in multi-user context 2015-10-06 15:39:57 -07:00
Shazron Abdullah
75820a0979 Fixes #166 - Segfault when passed a non-existent bundle #166 2015-10-06 14:00:42 -07:00
Shazron Abdullah
16f52589db Fixes #168 - Segmentation Fault 11 (when deploying an .ipa file) 2015-10-06 13:43:28 -07:00
Shazron Abdullah
21c8dc9cf5 Fixes #56 - Assertion failed AMDeviceSecureTransferPath (app name has non-ASCII characters) 2015-10-06 13:33:51 -07:00
Shazron Abdullah
34540ce545 Fixed typo in README example. 2015-10-06 13:18:50 -07:00
Shazron Abdullah
7b834b0e31 Fixes #153 - Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' #153 2015-10-06 13:14:21 -07:00
Shazron Abdullah
7ac9cdb107 Merge pull request #172 from Unity-Technologies/error-messages
Add text for errors 0xe8008016 and 0xe8008017.
2015-09-15 10:07:24 -07:00
Julius Trinkunas
cf9d024a2b Add text for errors 0xe8008016 and 0xe8008017. 2015-09-15 18:14:37 +03:00
Shazron Abdullah
4d4735e505 Merge pull request #159 from Unity-Technologies/error-messages
Error messages
2015-08-15 10:21:34 +08:00
Julius Trinkunas
2c9ea8f16e Add attribution for error code reverse engineering. Second try. 2015-08-11 13:28:04 +03:00
Julius Trinkunas
5eb12202b2 Add attribution for error code reverse engineering. 2015-08-10 16:01:13 +03:00
Julius Trinkunas
307a5f9452 Add text for error 0xe8008018. 2015-07-28 13:00:15 +03:00
Julius Trinkunas
835e161f66 Add text for 0xe800801c error. 2015-07-22 18:33:51 +03:00
Julius Trinkunas
73f30fdfed Add text for 0xe8008019 error. 2015-07-22 18:19:02 +03:00
Julius Trinkunas
be506a9f7f Fixes #157 - Bad error formatting string in check_error() 2015-07-22 18:16:31 +03:00
Shazron Abdullah
bc1bb0d320 Fixes #135 - convert Makefile to Xcode project 2015-07-16 17:26:48 -07:00
Shazron Abdullah
7d997b89c7 Removed buildbox shell script 2015-07-16 16:57:24 -07:00
Shazron Abdullah
6d61b7ca7c Fixes #83 - Enhancement to --justlaunch (implicit --debug) 2015-05-19 14:02:00 -07:00
Shazron Abdullah
590da67714 Fixes #84 - Enhancement to --noninteractive (implicit --debug) 2015-05-19 13:57:39 -07:00
Shazron Abdullah
8749a57936 Fixes #126 - --download option works incorrectly 2015-05-19 13:50:47 -07:00
Shazron Abdullah
3ba7403a39 Fixed crash in upload due to NSLogOut changes 2015-05-18 17:48:16 -07:00
Shazron Abdullah
84aeaad03b Fixed SIGSEV due to new NSLogOut changes. 2015-05-18 17:26:48 -07:00
Shazron Abdullah
ddcb4932ab Fixes #139 - stderr incorrect. Converted on_error, on_sys_log to use NSLog 2015-05-18 16:57:54 -07:00
Shazron Abdullah
11f1a89128 Added NSLogOut method. Same signature as NSLog, but logs to stdout instead of stderr. 2015-05-18 16:01:19 -07:00
Incont
c97b972172 fixed bug: Unable to load the empty file (closes #141) 2015-05-18 15:30:24 -07:00
Shazron Abdullah
1cb6110985 Added Roadmap to README 2015-05-18 14:22:55 -07:00
Shazron Abdullah
3dadb53b3b Revert version to 1.7.0 2015-05-18 13:53:47 -07:00
Shazron Abdullah
39aa232f97 Merge pull request #137 from mathworks/master
fixed the japanese issue
2015-05-18 12:41:03 -07:00
senthilm
609b635870 Merge https://github.com/phonegap/ios-deploy
manual merge and updated to 1.7.1
2015-05-17 07:56:29 -04:00
Shazron Abdullah
522f7bd667 Incremented version to 1.7.0 2015-05-17 01:03:24 -07:00
Shazron Abdullah
250794ce98 Added --list_bundle_id help text in README, added example 2015-05-17 01:03:04 -07:00
Shazron Abdullah
41eeedc472 Merge branch 'master' of https://github.com/Incont/ios-deploy 2015-05-17 00:54:47 -07:00
Shazron Abdullah
cdbe112ec6 Forgot to increment package.json 2015-05-17 00:50:33 -07:00
Incont
5377d9bec7 Merge remote-tracking branch 'phonegap/master' 2015-05-16 20:55:55 +03:00
Shazron Abdullah
5d2a0d5c8b Updated version to 1.6.3 2015-05-16 09:54:56 -07:00
Incont
e5fc979998 added options --list_bundle_id 2015-05-16 18:47:33 +03:00
Incont
18873b8340 small correction in app_exists 2015-05-16 18:07:27 +03: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
Senthil Manickavasagam
a750efa382 Merge pull request #1 from senthilmanick/master
Updating to 1.5.3
2015-05-01 14:28:02 -04:00
Manickavasagam Senthil
0940a4d079 Fixed a segv happening in non english locale 2015-05-01 14:19:58 -04:00
Manickavasagam Senthil
b72d31b816 Fixed a segv happening in non english locale 2015-05-01 14:18:22 -04:00
Manickavasagam Senthil
5690b10635 merged with phonegap 2015-04-30 16:42:01 -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
senthil
d90171d8e7 updated to merge with phonegap 2015-04-11 14:40:49 -04:00
senthil
02c23792ee merged with version 1.5.0
Updated for devices that use japanese
Updated the version to 1.5.1
2015-04-11 14:18:54 -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
senthil
3e8a897fbc when just launch, if we get an empty packet, exit without an error 2015-01-29 18:06:07 -05:00
senthil
ba60ff6351 updated to version 1.3.6 2015-01-27 15:09:26 -05:00
senthil
134a0a5fd0 The return code must be < 128 otherwise treated as a signal 2015-01-27 15:07:44 -05:00
senthil
96e91eb269 merged with phonegap/ios-deploy 2015-01-20 17:36:45 -05:00
senthil
8577ef3411 sometimes the model is null in get_device_hardware_name; updated to
v1.3.4
2015-01-17 17:29:54 -05: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
senthil
99f401018d Using debug for -c as well 2014-12-06 20:24:48 -05:00
senthil
6ac084844e updated the version to 1.3.3 2014-11-17 10:08:42 -05:00
senthil
3dcd64f7c0 Merge with phonegap
Fixed the issue with implictly turning on debug for -c instead of -L
2014-11-17 10:06:48 -05:00
senthilmanick
12334f8ddf Merge pull request #2 from phonegap/master
Pull from phonegap
2014-11-17 10:03:14 -05:00
27 changed files with 2250 additions and 634 deletions

View File

@ -23,6 +23,8 @@ Please run the commands below in your Terminal.app and include it in the issue:
```
Also include **command line arguments** you used for ios-deploy.
Don't forget to check out the [El Capitan](https://github.com/phonegap/ios-deploy/blob/master/README.md#os-x-1011-el-capitan) section of the [README](https://github.com/phonegap/ios-deploy/blob/master/README.md) before filing that issue!
## Sending a Pull Request

28
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,28 @@
## MUST READ BEFORE YOU FILE (DELETE THIS SECTION BEFORE FILING)
Include the **command line arguments** you used for ios-deploy.
Don't forget to check out the [El Capitan](https://github.com/phonegap/ios-deploy/blob/master/README.md#os-x-1011-el-capitan) section of the [README](https://github.com/phonegap/ios-deploy/blob/master/README.md) before filing this issue.
# Expected behavior
# Actual behavior.
# Steps to reproduce the problem
# System Specs
Please run the commands below in your Terminal.app and include it in the issue. Check when done and include results below.
- [ ] 1. sw_vers -productVersion
- [ ] 2. ios-deploy -V
- [ ] 3. xcodebuild -version
- [ ] 4. xcode-select --print-path
- [ ] 5. gcc --version
- [ ] 6. lldb --version

8
.gitignore vendored
View File

@ -1,6 +1,6 @@
demo
demo.app
ios-deploy
ios-deploy.dSYM
build/*
node_modules/*
/.DS_Store
*~
src/scripts/lldb.pyc
src/ios-deploy/lldb.py.h

11
.travis.yml Normal file
View File

@ -0,0 +1,11 @@
language: objective-c
sudo: false
node_js:
- "0.10"
- "0.12"
- "4.2"
install:
- npm install
script:
- "npm test"

View File

@ -1,2 +1,8 @@
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

View File

@ -1,35 +0,0 @@
IOS_SDK_VERSION = 7.1
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 Info.plist
mkdir -p demo.app
cp demo demo.app/
cp Info.plist ResourceRules.plist demo.app/
codesign -f -s "iPhone Developer" --entitlements Entitlements.plist demo.app
demo: demo.c
$(IOS_CC) -g -arch armv7 -isysroot $(IOS_SDK) -framework CoreFoundation -o demo demo.c
ios-deploy: clean ios-deploy.c
$(IOS_CC) -g -o ios-deploy -framework Foundation -framework CoreFoundation -framework MobileDevice -F/System/Library/PrivateFrameworks ios-deploy.c
symlink:
cd $(DEVICE_SUPPORT); ln -sfn "`find . -type d -maxdepth 1 -exec basename {} \; | tail -1`" Latest
install: symlink ios-deploy
mkdir -p $(prefix)/bin
cp ios-deploy $(prefix)/bin
uninstall:
rm $(prefix)/bin/ios-deploy
debug: all
./ios-deploy --debug --bundle demo.app
clean:
rm -rf *.app demo ios-deploy

141
README.md
View File

@ -1,36 +1,97 @@
[![Build Status](https://travis-ci.org/phonegap/ios-deploy.svg?branch=master)](https://travis-ci.org/phonegap/ios-deploy)
ios-deploy
==========
Install and debug iOS apps without using Xcode. Designed to work on un-jailbroken devices.
## Requirements
* Mac OS X. Tested on 10.10 Yosemite and iOS 8.1
* You need to have a valid iOS development certificate installed.
* Xcode 6.1 should be installed
* Mac OS X. Tested on 10.11 El Capitan and iOS 9.0
* You need to have a valid iOS Development certificate installed.
* Xcode 6.4 or greater should be installed
## Roadmap
See our [milestones](https://github.com/phonegap/ios-deploy/milestones).
Significant changes:
1.8.0 will use an Xcode project instead of a Makefile (to prepare for 2.0.0) (1.x branch)
2.0.0 will break out the commands into their own files, and create ios-deploy-lib for node.js use (master branch)
## Development
The legacy `1.x` version is under the `1.x` branch. Bug fixes for the `1.x` series will occur under there.
The 'master' branch now contains the `2.x` series, and is the development branch.
## 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 build from source:
```
xcodebuild
```
This will build `ios-deploy` into the `build/Release` folder.
## Testing
Run:
```
npm install && npm test
```
### OS X 10.11 El Capitan
If you are *not* using a node version manager like [nvm](https://github.com/creationix/nvm) or [n](https://github.com/tj/n), you may have to do either of these three things below when under El Capitan:
1. Add the `--unsafe-perm=true` flag when installing ios-deploy
2. Add the `--allow-root` flag when installing ios-deploy
3. Ensure the `nobody` user has write access to `/usr/local/lib/node_modules/ios-deploy/ios-deploy`
## 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
-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
-w, --download download app tree
-2, --to <target pathname> use together with up/download file/tree. specify target
-V, --version print the executable version
-d, --debug launch the app in lldb 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: 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 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
-B, --list_bundle_id list bundle_id
-W, --no-wifi ignore wifi devices
## Examples
@ -39,6 +100,9 @@ The commands below assume that you have an app called `my.app` with bundle id `b
// deploy and debug your app to a connected device
ios-deploy --debug --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
@ -47,7 +111,7 @@ The commands below assume that you have an app called `my.app` with bundle id `b
// 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
@ -56,20 +120,29 @@ The commands below assume that you have an app called `my.app` with bundle id `b
// 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
## 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). 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 '/iPod/,/Serial/p' | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'

5
demo/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
demo
demo.app
demo.dSYM
/.DS_Store
*~

24
demo/Makefile Normal file
View File

@ -0,0 +1,24 @@
IOS_SDK_VERSION = 9.1
IOS_CC = gcc -ObjC
IOS_SDK = $(shell xcode-select --print-path)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$(IOS_SDK_VERSION).sdk
all: clean demo.app
demo.app: demo Info.plist
mkdir -p demo.app
cp demo demo.app/
cp Info.plist ResourceRules.plist demo.app/
codesign -f -s "iPhone Developer" --entitlements Entitlements.plist demo.app
demo: demo.c
$(IOS_CC) -g -arch armv7 -isysroot $(IOS_SDK) -framework CoreFoundation -o demo demo.c
debug: all ios-deploy
@../build/Release/ios-deploy --debug --bundle demo.app
clean:
@rm -rf *.app demo demo.dSYM
ios-deploy:
@xcodebuild -project ../ios-deploy.xcodeproj

View File

@ -6,4 +6,4 @@ int main(int argc, const char* argv[]) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
}

View File

@ -0,0 +1,537 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
7E70899E1B587F29004D23AA /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E70899D1B587F29004D23AA /* CoreFoundation.framework */; };
7E7089A01B58801E004D23AA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E70899F1B58801E004D23AA /* Foundation.framework */; };
7E8E3A861C45D4CE0017F6C1 /* ios_deploy_tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E3A851C45D4CE0017F6C1 /* ios_deploy_tests.m */; };
7E8E3A921C45D5380017F6C1 /* libios_deploy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E8E3A911C45D5380017F6C1 /* libios_deploy.h */; settings = {ATTRIBUTES = (Public, ); }; };
7E8E3A941C45D5380017F6C1 /* libios_deploy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E3A931C45D5380017F6C1 /* libios_deploy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
7E8E3A9B1C45D5970017F6C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E70899F1B58801E004D23AA /* Foundation.framework */; };
7E8E3A9D1C45D6290017F6C1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E70899D1B587F29004D23AA /* CoreFoundation.framework */; };
7EDCC3CD1C45DC94002F9851 /* ios-deploy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E7089991B587DE4004D23AA /* ios-deploy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
7E8E3A991C45D5850017F6C1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 7E7089861B587BF3004D23AA /* Project object */;
proxyType = 1;
remoteGlobalIDString = 7E8E3A8E1C45D5380017F6C1;
remoteInfo = "ios-deploy-lib";
};
7EDCC3CA1C45D933002F9851 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 7E7089861B587BF3004D23AA /* Project object */;
proxyType = 1;
remoteGlobalIDString = 7E8E3A8E1C45D5380017F6C1;
remoteInfo = "ios-deploy-lib";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
7E1C00CC1C3C93AF00D686B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
7E1C00CF1C3C9ABB00D686B5 /* lldb.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; name = lldb.py; path = src/scripts/lldb.py; sourceTree = SOURCE_ROOT; };
7E1C00D11C3C9CB000D686B5 /* lldb.py.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lldb.py.h; sourceTree = "<group>"; };
7E70898E1B587BF3004D23AA /* ios-deploy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ios-deploy"; sourceTree = BUILT_PRODUCTS_DIR; };
7E7089991B587DE4004D23AA /* ios-deploy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ios-deploy.m"; sourceTree = "<group>"; };
7E70899A1B587DE4004D23AA /* errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = errors.h; sourceTree = "<group>"; };
7E70899B1B587DE4004D23AA /* MobileDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobileDevice.h; sourceTree = "<group>"; };
7E70899D1B587F29004D23AA /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
7E70899F1B58801E004D23AA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
7E8E3A831C45D4CE0017F6C1 /* ios-deploy-tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ios-deploy-tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
7E8E3A851C45D4CE0017F6C1 /* ios_deploy_tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ios_deploy_tests.m; sourceTree = "<group>"; };
7E8E3A871C45D4CE0017F6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
7E8E3A8F1C45D5380017F6C1 /* libios-deploy.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libios-deploy.a"; sourceTree = BUILT_PRODUCTS_DIR; };
7E8E3A911C45D5380017F6C1 /* libios_deploy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libios_deploy.h; sourceTree = "<group>"; };
7E8E3A931C45D5380017F6C1 /* libios_deploy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = libios_deploy.m; sourceTree = "<group>"; };
7EDCC3CE1C45DFF0002F9851 /* check_reqs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = check_reqs.js; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
7E70898B1B587BF3004D23AA /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7E7089A01B58801E004D23AA /* Foundation.framework in Frameworks */,
7E70899E1B587F29004D23AA /* CoreFoundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7E8E3A801C45D4CE0017F6C1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
7E8E3A8C1C45D5380017F6C1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7E8E3A9D1C45D6290017F6C1 /* CoreFoundation.framework in Frameworks */,
7E8E3A9B1C45D5970017F6C1 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
7E1C00CE1C3C9A7700D686B5 /* scripts */ = {
isa = PBXGroup;
children = (
7EDCC3CE1C45DFF0002F9851 /* check_reqs.js */,
7E1C00CF1C3C9ABB00D686B5 /* lldb.py */,
);
name = scripts;
path = src/scripts;
sourceTree = "<group>";
};
7E7089851B587BF3004D23AA = {
isa = PBXGroup;
children = (
7E1C00CE1C3C9A7700D686B5 /* scripts */,
7E7089901B587BF3004D23AA /* ios-deploy */,
7E8E3A841C45D4CE0017F6C1 /* ios-deploy-tests */,
7E8E3A901C45D5380017F6C1 /* ios-deploy-lib */,
7E7089A21B588219004D23AA /* Frameworks */,
7E70898F1B587BF3004D23AA /* Products */,
);
sourceTree = "<group>";
};
7E70898F1B587BF3004D23AA /* Products */ = {
isa = PBXGroup;
children = (
7E70898E1B587BF3004D23AA /* ios-deploy */,
7E8E3A831C45D4CE0017F6C1 /* ios-deploy-tests.xctest */,
7E8E3A8F1C45D5380017F6C1 /* libios-deploy.a */,
);
name = Products;
sourceTree = "<group>";
};
7E7089901B587BF3004D23AA /* ios-deploy */ = {
isa = PBXGroup;
children = (
7E1C00D11C3C9CB000D686B5 /* lldb.py.h */,
7E1C00CC1C3C93AF00D686B5 /* version.h */,
7E7089991B587DE4004D23AA /* ios-deploy.m */,
7E70899A1B587DE4004D23AA /* errors.h */,
7E70899B1B587DE4004D23AA /* MobileDevice.h */,
);
name = "ios-deploy";
path = "src/ios-deploy";
sourceTree = "<group>";
};
7E7089A21B588219004D23AA /* Frameworks */ = {
isa = PBXGroup;
children = (
7E70899F1B58801E004D23AA /* Foundation.framework */,
7E70899D1B587F29004D23AA /* CoreFoundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
7E8E3A841C45D4CE0017F6C1 /* ios-deploy-tests */ = {
isa = PBXGroup;
children = (
7E8E3A851C45D4CE0017F6C1 /* ios_deploy_tests.m */,
7E8E3A871C45D4CE0017F6C1 /* Info.plist */,
);
name = "ios-deploy-tests";
path = "src/ios-deploy-tests";
sourceTree = "<group>";
};
7E8E3A901C45D5380017F6C1 /* ios-deploy-lib */ = {
isa = PBXGroup;
children = (
7E8E3A911C45D5380017F6C1 /* libios_deploy.h */,
7E8E3A931C45D5380017F6C1 /* libios_deploy.m */,
);
name = "ios-deploy-lib";
path = "src/ios-deploy-lib";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
7E8E3A8D1C45D5380017F6C1 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
7E8E3A921C45D5380017F6C1 /* libios_deploy.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
7E70898D1B587BF3004D23AA /* ios-deploy */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7E7089951B587BF3004D23AA /* Build configuration list for PBXNativeTarget "ios-deploy" */;
buildPhases = (
7EDCC3CF1C45E03B002F9851 /* ShellScript */,
7E70898B1B587BF3004D23AA /* Frameworks */,
7EDCC3CC1C45DC89002F9851 /* Sources */,
);
buildRules = (
);
dependencies = (
7E8E3A9A1C45D5850017F6C1 /* PBXTargetDependency */,
);
name = "ios-deploy";
productName = "ios-deploy";
productReference = 7E70898E1B587BF3004D23AA /* ios-deploy */;
productType = "com.apple.product-type.tool";
};
7E8E3A821C45D4CE0017F6C1 /* ios-deploy-tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7E8E3A8A1C45D4CE0017F6C1 /* Build configuration list for PBXNativeTarget "ios-deploy-tests" */;
buildPhases = (
7E8E3A7F1C45D4CE0017F6C1 /* Sources */,
7E8E3A801C45D4CE0017F6C1 /* Frameworks */,
7E8E3A811C45D4CE0017F6C1 /* Resources */,
);
buildRules = (
);
dependencies = (
7EDCC3CB1C45D933002F9851 /* PBXTargetDependency */,
);
name = "ios-deploy-tests";
productName = "ios-deploy-tests";
productReference = 7E8E3A831C45D4CE0017F6C1 /* ios-deploy-tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
7E8E3A8E1C45D5380017F6C1 /* ios-deploy-lib */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7E8E3A951C45D5380017F6C1 /* Build configuration list for PBXNativeTarget "ios-deploy-lib" */;
buildPhases = (
7E8E3A8B1C45D5380017F6C1 /* Sources */,
7E8E3A8C1C45D5380017F6C1 /* Frameworks */,
7E8E3A8D1C45D5380017F6C1 /* Headers */,
);
buildRules = (
);
dependencies = (
);
name = "ios-deploy-lib";
productName = "ios-deploy-lib";
productReference = 7E8E3A8F1C45D5380017F6C1 /* libios-deploy.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
7E7089861B587BF3004D23AA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0710;
ORGANIZATIONNAME = PhoneGap;
TargetAttributes = {
7E70898D1B587BF3004D23AA = {
CreatedOnToolsVersion = 6.4;
};
7E8E3A821C45D4CE0017F6C1 = {
CreatedOnToolsVersion = 7.2;
};
7E8E3A8E1C45D5380017F6C1 = {
CreatedOnToolsVersion = 7.2;
};
};
};
buildConfigurationList = 7E7089891B587BF3004D23AA /* Build configuration list for PBXProject "ios-deploy" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 7E7089851B587BF3004D23AA;
productRefGroup = 7E70898F1B587BF3004D23AA /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
7E70898D1B587BF3004D23AA /* ios-deploy */,
7E8E3A821C45D4CE0017F6C1 /* ios-deploy-tests */,
7E8E3A8E1C45D5380017F6C1 /* ios-deploy-lib */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
7E8E3A811C45D4CE0017F6C1 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
7EDCC3CF1C45E03B002F9851 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "echo \"\\\"# AUTO-GENERATED - DO NOT MODIFY\\n\\\"\" > src/ios-deploy/lldb.py.h\nawk '{ print \"\\\"\"$0\"\\\\n\\\"\"}' src/scripts/lldb.py >> src/ios-deploy/lldb.py.h";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
7E8E3A7F1C45D4CE0017F6C1 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7E8E3A861C45D4CE0017F6C1 /* ios_deploy_tests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7E8E3A8B1C45D5380017F6C1 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7E8E3A941C45D5380017F6C1 /* libios_deploy.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7EDCC3CC1C45DC89002F9851 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7EDCC3CD1C45DC94002F9851 /* ios-deploy.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
7E8E3A9A1C45D5850017F6C1 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 7E8E3A8E1C45D5380017F6C1 /* ios-deploy-lib */;
targetProxy = 7E8E3A991C45D5850017F6C1 /* PBXContainerItemProxy */;
};
7EDCC3CB1C45D933002F9851 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 7E8E3A8E1C45D5380017F6C1 /* ios-deploy-lib */;
targetProxy = 7EDCC3CA1C45D933002F9851 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
7E7089931B587BF3004D23AA /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = (
"-framework",
MobileDevice,
"-F/System/Library/PrivateFrameworks",
);
SDKROOT = macosx;
};
name = Debug;
};
7E7089941B587BF3004D23AA /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = (
"-framework",
MobileDevice,
"-F/System/Library/PrivateFrameworks",
);
SDKROOT = macosx;
};
name = Release;
};
7E7089961B587BF3004D23AA /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
7E7089971B587BF3004D23AA /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
7E8E3A881C45D4CE0017F6C1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = "src/ios-deploy-tests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_BUNDLE_IDENTIFIER = "com.phonegap.ios-deploy-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
7E8E3A891C45D4CE0017F6C1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = "src/ios-deploy-tests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_BUNDLE_IDENTIFIER = "com.phonegap.ios-deploy-tests";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
7E8E3A961C45D5380017F6C1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
EXECUTABLE_PREFIX = lib;
INSTALL_PATH = "";
MACOSX_DEPLOYMENT_TARGET = 10.11;
OTHER_LDFLAGS = (
"-framework",
MobileDevice,
"-F/System/Library/PrivateFrameworks",
);
PRODUCT_NAME = "ios-deploy";
PUBLIC_HEADERS_FOLDER_PATH = "";
};
name = Debug;
};
7E8E3A971C45D5380017F6C1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
EXECUTABLE_PREFIX = lib;
INSTALL_PATH = "";
MACOSX_DEPLOYMENT_TARGET = 10.11;
OTHER_LDFLAGS = (
"-framework",
MobileDevice,
"-F/System/Library/PrivateFrameworks",
);
PRODUCT_NAME = "ios-deploy";
PUBLIC_HEADERS_FOLDER_PATH = "";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
7E7089891B587BF3004D23AA /* Build configuration list for PBXProject "ios-deploy" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7E7089931B587BF3004D23AA /* Debug */,
7E7089941B587BF3004D23AA /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7E7089951B587BF3004D23AA /* Build configuration list for PBXNativeTarget "ios-deploy" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7E7089961B587BF3004D23AA /* Debug */,
7E7089971B587BF3004D23AA /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7E8E3A8A1C45D4CE0017F6C1 /* Build configuration list for PBXNativeTarget "ios-deploy-tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7E8E3A881C45D4CE0017F6C1 /* Debug */,
7E8E3A891C45D4CE0017F6C1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7E8E3A951C45D5380017F6C1 /* Build configuration list for PBXNativeTarget "ios-deploy-lib" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7E8E3A961C45D5380017F6C1 /* Debug */,
7E8E3A971C45D5380017F6C1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 7E7089861B587BF3004D23AA /* Project object */;
}

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7E8E3A821C45D4CE0017F6C1"
BuildableName = "ios-deploy-tests.xctest"
BlueprintName = "ios-deploy-tests"
ReferencedContainer = "container:ios-deploy.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,20 +1,34 @@
{
"name": "ios-deploy",
"version": "1.3.2",
"description": "launch iOS apps iOS devices from the command line (Xcode 6)",
"version": "2.0.0",
"os": [
"darwin"
],
"description": "launch iOS apps iOS devices from the command line (Xcode 7)",
"main": "ios-deploy",
"scripts": {
"preinstall": "make ios-deploy"
},
"bin" : "./ios-deploy" ,
"bin": "./build/Release/ios-deploy",
"repository": {
"type": "git",
"url": "https://github.com/phonegap/ios-deploy"
},
"devDependencies": {
"jshint": "2.5.8"
},
"scripts": {
"preinstall": "./src/scripts/check_reqs.js && xcodebuild",
"test": "npm run pycompile && npm run jshint && xcodebuild -target ios-deploy-lib && xcodebuild test -scheme ios-deploy-tests",
"jshint": "node node_modules/jshint/bin/jshint src/scripts/*.js",
"pycompile": "python -m py_compile src/scripts/*.py"
},
"keywords": [
"ios-deploy",
"deploy to iOS device"
],
"bugs": {
"url": "https://github.com/phonegap/ios-deploy/issues"
},
"author": "Greg Hughes",
"license": "GPLv3"
}

View File

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

View File

@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
@interface ios_deploy_lib : NSObject
@end

View File

@ -0,0 +1,5 @@
#import "libios_deploy.h"
@implementation ios_deploy_lib
@end

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@ -0,0 +1,31 @@
#import <XCTest/XCTest.h>
@interface ios_deploy_tests : XCTestCase
@end
@implementation ios_deploy_tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end

View File

@ -195,6 +195,7 @@ mach_error_t AMDeviceNotificationSubscribe(am_device_notification_callback
callback, unsigned int unused0, unsigned int unused1, void* //unsigned int
dn_unknown3, struct am_device_notification **notification);
/* Connects to the iPhone. Pass in the am_device structure that the
* notification callback will give to you.
*

493
src/ios-deploy/errors.h Normal file
View File

@ -0,0 +1,493 @@
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;
// Parts of error code to localization id map is taken from SDMMobileDevice framework. Associated license is bellow.
// https://github.com/samdmarshall/SDMMobileDevice/blob/master/Framework/MobileDevice/Error/SDMMD_Error.h
//
// Copyright (c) 2014, Sam Marshall
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
// following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of Sam Marshall nor the names of its contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static errorcode_to_id_t errorcode_to_id[] = {
{ 0x00000000, "kAMDSuccess" },
{ 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" },
{ 0xe800009d, "kAMDAppBlacklistedError" },
{ 0xe800009e, "This app contains an app extension with an illegal bundle identifier. App extension bundle identifiers must have a prefix consisting of their containing application's bundle identifier followed by a '.'." },
{ 0xe800009f, "If an app extension defines the XPCService key in its Info.plist, it must have a dictionary value." },
{ 0xe80000a0, "App extensions must define the NSExtension key with a dictionary value in their Info.plist." },
{ 0xe80000a1, "If an app extension defines the CFBundlePackageType key in its Info.plist, it must have the value \"XPC!\"." },
{ 0xe80000a2, "App extensions must define either NSExtensionMainStoryboard or NSExtensionPrincipalClass keys in the NSExtension dictionary in their Info.plist." },
{ 0xe80000a3, "If an app extension defines the NSExtensionContextClass key in the NSExtension dictionary in its Info.plist, it must have a string value containing one or more characters." },
{ 0xe80000a4, "If an app extension defines the NSExtensionContextHostClass key in the NSExtension dictionary in its Info.plist, it must have a string value containing one or more characters." },
{ 0xe80000a5, "If an app extension defines the NSExtensionViewControllerHostClass key in the NSExtension dictionary in its Info.plist, it must have a string value containing one or more characters." },
{ 0xe80000a6, "This app contains an app extension that does not define the NSExtensionPointIdentifier key in its Info.plist. This key must have a reverse-DNS format string value." },
{ 0xe80000a7, "This app contains an app extension that does not define the NSExtensionPointIdentifier key in its Info.plist with a valid reverse-DNS format string value." },
{ 0xe80000a8, "If an app extension defines the NSExtensionAttributes key in the NSExtension dictionary in its Info.plist, it must have a dictionary value." },
{ 0xe80000a9, "If an app extension defines the NSExtensionPointName key in the NSExtensionAttributes dictionary in the NSExtension dictionary in its Info.plist, it must have a string value containing one or more characters." },
{ 0xe80000aa, "If an app extension defines the NSExtensionPointVersion key in the NSExtensionAttributes dictionary in the NSExtension dictionary in its Info.plist, it must have a string value containing one or more characters." },
{ 0xe80000ab, "This app or a bundle it contains does not define the CFBundleName key in its Info.plist with a string value containing one or more characters." },
{ 0xe80000ac, "This app or a bundle it contains does not define the CFBundleDisplayName key in its Info.plist with a string value containing one or more characters." },
{ 0xe80000ad, "This app or a bundle it contains defines the CFBundleShortVersionStringKey key in its Info.plist with a non-string value or a zero-length string value." },
{ 0xe80000ae, "This app or a bundle it contains defines the RunLoopType key in the XPCService dictionary in its Info.plist with a non-string value or a zero-length string value." },
{ 0xe80000af, "This app or a bundle it contains defines the ServiceType key in the XPCService dictionary in its Info.plist with a non-string value or a zero-length string value." },
{ 0xe80000b0, "This application or a bundle it contains has the same bundle identifier as this application or another bundle that it contains. Bundle identifiers must be unique." },
{ 0xe80000b1, "This app contains an app extension that specifies an extension point identifier that is not supported on this version of iOS for the value of the NSExtensionPointIdentifier key in its Info.plist." },
{ 0xe80000b2, "This app contains multiple app extensions that are file providers. Apps are only allowed to contain at most a single file provider app extension." },
{ 0xe80000b3, "kMobileHouseArrestMissingCommand" },
{ 0xe80000b4, "kMobileHouseArrestUnknownCommand" },
{ 0xe80000b5, "kMobileHouseArrestMissingIdentifier" },
{ 0xe80000b6, "kMobileHouseArrestDictionaryFailed" },
{ 0xe80000b7, "kMobileHouseArrestInstallationLookupFailed" },
{ 0xe80000b8, "kMobileHouseArrestApplicationLookupFailed" },
{ 0xe80000b9, "kMobileHouseArrestMissingContainer" },
// 0xe80000ba does not exist
{ 0xe80000bb, "kMobileHouseArrestPathConversionFailed" },
{ 0xe80000bc, "kMobileHouseArrestPathMissing" },
{ 0xe80000bd, "kMobileHouseArrestInvalidPath" },
{ 0xe80000be, "kAMDMismatchedApplicationIdentifierEntitlementError" },
{ 0xe80000bf, "kAMDInvalidSymlinkError" },
{ 0xe80000c0, "kAMDNoSpaceError" },
{ 0xe80000c1, "The WatchKit app extension must have, in its Info.plist's NSExtension dictionary's NSExtensionAttributes dictionary, the key WKAppBundleIdentifier with a value equal to the associated WatchKit app's bundle identifier." },
{ 0xe80000c2, "This app is not a valid AppleTV Stub App" },
{ 0xe80000c3, "kAMDBundleiTunesMetadataVersionMismatchError" },
{ 0xe80000c4, "kAMDInvalidiTunesMetadataPlistError" },
{ 0xe80000c5, "kAMDMismatchedBundleIDSigningIdentifierError" },
{ 0xe80000c6, "This app contains multiple WatchKit app extensions. Only a single WatchKit extension is allowed." },
{ 0xe80000c7, "A WatchKit app within this app is not a valid bundle." },
{ 0xe80000c8, "kAMDDeviceNotSupportedByThinningError" },
{ 0xe80000c9, "The UISupportedDevices key in this app's Info.plist does not specify a valid set of supported devices." },
{ 0xe80000ca, "This app contains an app extension with an illegal bundle identifier. App extension bundle identifiers must have a prefix consisting of their containing application's bundle identifier followed by a '.', with no further '.' characters after the prefix." },
{ 0xe80000cb, "kAMDAppexBundleIDConflictWithOtherIdentifierError" },
{ 0xe80000cc, "kAMDBundleIDConflictWithOtherIdentifierError" },
{ 0xe80000cd, "This app contains multiple WatchKit 1.0 apps. Only a single WatchKit 1.0 app is allowed." },
{ 0xe80000ce, "This app contains multiple WatchKit 2.0 apps. Only a single WatchKit 2.0 app is allowed." },
{ 0xe80000cf, "The WatchKit app has an invalid stub executable." },
{ 0xe80000d0, "The WatchKit app has multiple app extensions. Only a single WatchKit extension is allowed in a WatchKit app, and only if this is a WatchKit 2.0 app." },
{ 0xe80000d1, "The WatchKit 2.0 app contains non-WatchKit app extensions. Only WatchKit app extensions are allowed in WatchKit apps." },
{ 0xe80000d2, "The WatchKit app has one or more embedded frameworks. Frameworks are only allowed in WatchKit app extensions in WatchKit 2.0 apps." },
{ 0xe80000d3, "This app contains a WatchKit 1.0 app with app extensions. This is not allowed." },
{ 0xe80000d4, "This app contains a WatchKit 2.0 app without an app extension. WatchKit 2.0 apps must contain a WatchKit app extension." },
{ 0xe80000d5, "The WatchKit app's Info.plist must have a WKCompanionAppBundleIdentifier key set to the bundle identifier of the companion app." },
{ 0xe80000d6, "The WatchKit app's Info.plist contains a non-string key." },
{ 0xe80000d7, "The WatchKit app's Info.plist contains a key that is not in the whitelist of allowed keys for a WatchKit app." },
{ 0xe80000d8, "The WatchKit 1.0 and a WatchKit 2.0 apps within this app must have have the same bundle identifier." },
{ 0xe80000d9, "This app contains a WatchKit app with an invalid bundle identifier. The bundle identifier of a WatchKit app must have a prefix consisting of the companion app's bundle identifier, followed by a '.'." },
{ 0xe80000da, "This app contains a WatchKit app where the UIDeviceFamily key in its Info.plist does not specify the value 4 to indicate that it's compatible with the Apple Watch device type." },
{ 0xe80000db, "The device is out of storage for apps. Please remove some apps from the device and try again." },
// Errors without id->string mapping.
{ 0xe8008001, "An unknown error has occurred." },
{ 0xe8008002, "Attempted to modify an immutable provisioning profile." },
{ 0xe8008003, "This provisioning profile is malformed." },
{ 0xe8008004, "This provisioning profile does not have a valid signature (or it has a valid, but untrusted signature)." },
{ 0xe8008005, "This provisioning profile is malformed." },
{ 0xe8008006, "This provisioning profile is malformed." },
{ 0xe8008007, "This provisioning profile is malformed." },
{ 0xe8008008, "This provisioning profile is malformed." },
{ 0xe8008009, "The signature was not valid." },
{ 0xe800800a, "Unable to allocate memory." },
{ 0xe800800b, "A file operation failed." },
{ 0xe800800c, "There was an error communicating with your device." },
{ 0xe800800d, "There was an error communicating with your device." },
{ 0xe800800e, "This provisioning profile does not have a valid signature (or it has a valid, but untrusted signature)." },
{ 0xe800800f, "The application's signature is valid but it does not match the expected hash." },
{ 0xe8008010, "This provisioning profile is unsupported." },
{ 0xe8008011, "This provisioning profile has expired." },
{ 0xe8008012, "This provisioning profile cannot be installed on this device." },
{ 0xe8008013, "This provisioning profile does not have a valid signature (or it has a valid, but untrusted signature)." },
{ 0xe8008014, "The executable contains an invalid signature." },
{ 0xe8008015, "A valid provisioning profile for this executable was not found." },
{ 0xe8008016, "The executable was signed with invalid entitlements." },
{ 0xe8008017, "A signed resource has been added, modified, or deleted." },
{ 0xe8008018, "The identity used to sign the executable is no longer valid." },
{ 0xe8008019, "The application does not have a valid signature." },
{ 0xe800801a, "This provisioning profile does not have a valid signature (or it has a valid, but untrusted signature)." },
{ 0xe800801b, "There was an error communicating with your device." },
{ 0xe800801c, "No code signature found." },
{ 0xe800801d, "Rejected by policy." },
{ 0xe800801e, "The requested profile does not exist (it may have been removed)." },
};
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/English.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." },
{ "kAMDAppexBundleIDConflictWithOtherIdentifierError", "This application contains an app extension with a bundle identifier that conflicts with the bundle identifier of another app or app extension already installed." },
{ "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." },
{ "kAMDBundleIDConflictWithOtherIdentifierError", "This application's bundle identifier conflicts with the identifier of another app or app extension already installed." },
{ "kAMDBundleVerificationFailedError", "The carrier bundle could not be verified." },
{ "kAMDBundleiTunesMetadataVersionMismatchError", "This application's iTunesMetadata.plist specifies versions that do not match the versions listed for the app in its Info.plist" },
{ "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." },
{ "kAMDDeviceNotSupportedByThinningError", "This application is not built for this 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 recognize 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." },
{ "kAMDInvalidSymlinkError", "The bundle contained an invalid symlink." },
{ "kAMDInvalidiTunesMetadataPlistError", "This application's iTunesMetadata.plist is not valid." },
{ "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." },
{ "kAMDMismatchedApplicationIdentifierEntitlementError", "This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed." },
{ "kAMDMismatchedBundleIDSigningIdentifierError", "This application's bundle identifier does not match its code signing identifier." },
{ "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 recognize 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." },
{ "kAMDNoSpaceError", "No space is available on the device." },
{ "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 Plugin 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 recognize 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." },
{ "kMobileHouseArrestApplicationLookupFailed", "The requested application is not a user application." },
{ "kMobileHouseArrestDictionaryFailed", "The request contained an invalid request dictionary." },
{ "kMobileHouseArrestInstallationLookupFailed", "Could not find the requested application." },
{ "kMobileHouseArrestInvalidPath", "The requested application contained an invalid data container path." },
{ "kMobileHouseArrestMissingCommand", "The request was missing a command." },
{ "kMobileHouseArrestMissingContainer", "The requested application does not contain a valid data container." },
{ "kMobileHouseArrestMissingIdentifier", "The request was missing an application identifier." },
{ "kMobileHouseArrestPathConversionFailed", "Could not convert the requested application's data container path." },
{ "kMobileHouseArrestPathMissing", "The requested application's data container path does not exist." },
{ "kMobileHouseArrestUnknownCommand", "The request contained an invalid command." },
};
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

1
src/ios-deploy/version.h Normal file
View File

@ -0,0 +1 @@
"2.0.0"

56
src/scripts/check_reqs.js Executable file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env node
var util = require('util');
var os = require('os');
var child_process = require('child_process');
var XCODEBUILD_MIN_VERSION = '6.0';
var XCODEBUILD_NOT_FOUND_MESSAGE = util.format('Please install Xcode version %s or greater from the Mac App Store.', XCODEBUILD_MIN_VERSION);
var TOOL = 'xcodebuild';
var xcode_version = child_process.spawn(TOOL, ['-version']),
version_string = '';
xcode_version.stdout.on('data', function (data) {
version_string += data;
});
xcode_version.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
xcode_version.on('error', function (err) {
console.log(util.format('Tool %s was not found. %s', TOOL, XCODEBUILD_NOT_FOUND_MESSAGE));
});
xcode_version.on('close', function (code) {
if (code === 0) {
var arr = version_string.match(/^Xcode (\d+\.\d+)/);
var ver = arr[1];
if (os.release() >= '15.0.0' && ver < '7.0') {
console.log(util.format('You need at least Xcode 7.0 when you are on OS X 10.11 El Capitan (you have version %s)', ver));
process.exit(1);
}
if (ver < XCODEBUILD_MIN_VERSION) {
console.log(util.format('%s : %s. (you have version %s)', TOOL, XCODEBUILD_NOT_FOUND_MESSAGE, ver));
}
if (os.release() >= '15.0.0') { // print the El Capitan warning
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
console.log('!!!! WARNING: You are on OS X 10.11 El Capitan, you may need to add the');
console.log('!!!! WARNING: `--unsafe-perm=true` flag when running `npm install`');
console.log('!!!! WARNING: or else it will fail.');
console.log('!!!! WARNING: link:');
console.log('!!!! WARNING: https://github.com/phonegap/ios-deploy#os-x-1011-el-capitan');
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
}
}
process.exit(code);
});

85
src/scripts/lldb.py Normal file
View File

@ -0,0 +1,85 @@
import lldb
import os
import sys
import shlex
def connect_command(debugger, command, result, internal_dict):
# These two are passed in by the script which loads us
connect_url = internal_dict['fruitstrap_connect_url']
error = lldb.SBError()
process = lldb.target.ConnectRemote(lldb.target.GetDebugger().GetListener(), connect_url, None, error)
# Wait for connection to succeed
listener = lldb.target.GetDebugger().GetListener()
listener.StartListeningForEvents(process.GetBroadcaster(), lldb.SBProcess.eBroadcastBitStateChanged)
events = []
state = (process.GetState() or lldb.eStateInvalid)
while state != lldb.eStateConnected:
event = lldb.SBEvent()
if listener.WaitForEvent(1, event):
state = process.GetStateFromEvent(event)
events.append(event)
else:
state = lldb.eStateInvalid
# Add events back to queue, otherwise lldb freezes
for event in events:
listener.AddEvent(event)
def run_command(debugger, command, result, internal_dict):
device_app = internal_dict['fruitstrap_device_app']
args = command.split('--',1)
error = lldb.SBError()
lldb.target.modules[0].SetPlatformFileSpec(lldb.SBFileSpec(device_app))
args_arr = []
if len(args) > 1:
args_arr = shlex.split(args[1])
else:
args_arr = shlex.split('{args}')
lldb.target.Launch(lldb.SBLaunchInfo(args_arr), error)
lockedstr = ': Locked'
if lockedstr in str(error):
print('\\nDevice Locked\\n')
os._exit(254)
else:
print(str(error))
def safequit_command(debugger, command, result, internal_dict):
process = lldb.target.process
state = process.GetState()
if state == lldb.eStateRunning:
process.Detach()
os._exit(0)
elif state > lldb.eStateRunning:
os._exit(state)
else:
print('\\nApplication has not been launched\\n')
os._exit(1)
def autoexit_command(debugger, command, result, internal_dict):
process = lldb.target.process
listener = debugger.GetListener()
listener.StartListeningForEvents(process.GetBroadcaster(), lldb.SBProcess.eBroadcastBitStateChanged | lldb.SBProcess.eBroadcastBitSTDOUT | lldb.SBProcess.eBroadcastBitSTDERR)
event = lldb.SBEvent()
while True:
if listener.WaitForEvent(1, event) and lldb.SBProcess.EventIsProcessEvent(event):
state = lldb.SBProcess.GetStateFromEvent(event)
else:
state = process.GetState()
if state == lldb.eStateExited:
os._exit(process.GetExitStatus())
elif state == lldb.eStateStopped:
debugger.HandleCommand('bt')
os._exit({exitcode_app_crash})
stdout = process.GetSTDOUT(1024)
while stdout:
sys.stdout.write(stdout)
stdout = process.GetSTDOUT(1024)
stderr = process.GetSTDERR(1024)
while stderr:
sys.stdout.write(stderr)
stderr = process.GetSTDERR(1024)