115 Commits
1.0.9 ... 1.7.0

Author SHA1 Message Date
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
Shazron Abdullah
33f6a83e1d Fixes phonegap/ios-deploy#80 (re-fix) --detect not showing non-zero exit code when no devices are detected.
When --detect is turned on, --debug is turned on implicitly so you won't get a segmentation fault.
2014-11-16 20:49:33 -08:00
Shazron Abdullah
7c9af71d86 Updated version to 1.3.1 2014-11-14 13:09:11 -08:00
Shazron Abdullah
767c386ba9 Fixes phonegap/ios-deploy#80 --detect not showing non-zero exit code when no devices are detected. 2014-11-14 13:07:19 -08:00
Shazron Abdullah
7a447b480f Fixes phonegap/ios-deploy#79 - Update README.md for sample usage of ios-deploy flags and options 2014-11-13 23:47:50 -08:00
Shazron Abdullah
021c222a55 Update README. Removed gdbargs, gdbexec. Added download. 2014-11-13 23:24:51 -08:00
Shazron Abdullah
63303ea4b0 Removed unused gdbargs and gdbexec options. 2014-11-13 23:24:27 -08:00
Shazron Abdullah
5bfc25376a Update package.json version to 1.3.0 2014-11-13 22:58:18 -08:00
Shazron Abdullah
7075657015 Fixes phonegap/ios-deploy#74 - SIGSEGV-ed while listing the sandbox of an application on iOS8 2014-11-13 22:57:58 -08:00
Shazron Abdullah
6f662ae450 Fixes phonegap/ios-deploy#37 - AMDeviceValidatePairing fails when uninstalling 2014-11-13 17:33:44 -08:00
Shazron Abdullah
4617a7df59 Merge pull request #72 from CSOscarTanner/master
Fixed problem with the parser of the value of the parameter -i.
2014-11-12 16:22:33 -08:00
Shazron Abdullah
7ca72695b6 Merge pull request #68 from senthilmanick/master
Fixed the hang when the device is locked.

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

Multiple bug fixes: 
1. When multiple devices are connected, the detect was not listing all the devices ios-deploy -c -t 1
2. Fixes for issue #75 - non-interactive mode broken lldb and ios-deploy may still be running ios-deploy -b ... -d -I -L
3. Fixes for issue #60 - -L option not working properly ios-deploy will not quit or sometimes hang
4. When multiple devices are connected, cannot use -i option to specify the device ios-deploy -b ... -i -d -I -L
5. Allow timeout when downloading
2014-11-12 16:11:52 -08:00
senthil
dbe381112a Removed the wrong comment 2014-11-12 16:23:20 -05:00
senthil
72caad4526 Allow timeout for download and run 2014-11-12 16:15:53 -05:00
senthil
06187e348a updated the version to 1.3.0 2014-11-12 12:04:47 -05:00
senthil
b4f91912ee fixed the lauch using python 2014-11-11 20:15:39 -05:00
senthil
b796b70e29 updated the version 2014-11-07 18:43:02 -05:00
senthil
1a309dcebf Merge branch 'disk-image-fix' of https://github.com/eddieh/ios-deploy
Conflicts:
	ios-deploy.c
2014-11-07 18:40:28 -05:00
Eddie Hillenbrand
049a89e873 Fix for mismatched build numbers. 2014-11-04 12:35:14 -08:00
Eddie Hillenbrand
4aa233d147 Allow the symbols and the disk images to be in different DeviceSupport directories. 2014-11-03 16:09:36 -08:00
CSOscarTanner
d51bb22f23 Fixed problem with the parser of the value of the parameter -i. 2014-10-21 14:33:33 -02:00
senthil
54600a9eaf Fixed two issues:
1. When the device is locked, the python source prints and exists. The
server sees this as an empty packet. We are using this to exit out of
the connection
2. When we use just launch, we need to do safequit and detach. Otherwise
we hang for ever
2014-10-13 17:20:52 -04:00
senthil
d86b0cad0d Merged with phone-gap and fixed the hang 2014-10-13 16:59:19 -04:00
senthil
029d22ecef added iPhone 6 2014-10-09 14:29:15 -04:00
Shazron Abdullah
63917d796b Added scripts for buildbox. 2014-10-07 14:35:45 -07:00
Shazron Abdullah
0b89be65bd Merge pull request #67 from dot-asm/master
Add download option.
2014-10-07 11:04:10 -07:00
Andy Polyakov
7742c5d532 Allow --list and --download to pick specific subdirectories.
Note that in a way it introduces inconsistency with help message.
This is because arguments to --list and --download are optional
and has to be passed with '=', e.g. --list=/Documents.
2014-10-07 11:23:33 +02:00
Andy Polyakov
9f0c8a85c6 Add download option.
Unlike upload option, download pulls down whole tree. For this reason
--to is expected to be directory path.
2014-10-07 09:23:34 +02:00
Shazron Abdullah
c57f208422 Update version to 1.2.0 2014-10-06 22:09:39 -07:00
Shazron Abdullah
0467b69fd8 Merge pull request #66 from dot-asm/master
Fix AFCFileRef[Read|Write] prototypes
2014-10-06 21:56:59 -07:00
Shazron Abdullah
77116e3f7c Merge pull request #65 from alexmipego/lldb-python-connect-fix
Fix lldb status checking
2014-10-06 21:55:19 -07:00
Andy Polyakov
4589cd5d05 arrange callback in read_dir for future use
Custom callback is called for every file or directory listed on device. This will be used for file download.
2014-10-06 23:16:40 +02:00
Andy Polyakov
9a2da6f642 Fix usage semantic and pair of resource leaks
AFCConnectionOpen and AFCFIleInfoOpen don't require initialized pointer to pointer to result, but do require corresponding Close calls.
2014-10-06 23:02:06 +02:00
Andy Polyakov
23afce0d37 handle no --args
When no --args are passed application was started with {args} as argument instead of no argument.
2014-10-06 22:40:43 +02:00
Andy Polyakov
4869a343e8 fix AFCFileRef[Read|Write] prototypes
Incorrect AFCFileRefRead prototype was causing crashes in 64-bit build when reading large files.
2014-10-06 22:32:36 +02:00
Alexandre Gomes
bf5a1e065e fix lldb status checking 2014-10-06 13:36:31 +01:00
senthil
6bd90a5133 a minor debugging version 2014-09-02 16:18:33 -04:00
Shazron Abdullah
e2f436ad52 Merge pull request #57 from hinesmr/patch-1
Include iPods for device search in the README "Listing Device IDs" section.
2014-08-29 16:36:51 -07:00
Michael R. Hines
35097bd5a0 Don't forget about iPods too =)
Update the readme to include iPods in the device identifier search.
2014-08-19 19:51:20 +08:00
senthilmanick
c85248c88a Merge pull request #1 from phonegap/master
Merge with main
2014-08-05 19:12:45 -04:00
Shazron Abdullah
0f1ef6f4ef Fixes #54 - Publish 1.1.0 version 2014-08-04 19:07:31 -07:00
Shazron Abdullah
6801052024 Merge pull request #53 from senthilmanick/master
Fixes #51 - When the device is locked, ios-deploy hangs.
Fixes #52 - Enhancement: Add "Just launch" option
2014-08-04 18:56:51 -07:00
senthil
616b6ab1ff updated to version 1.0.10 2014-08-03 13:43:38 -04:00
senthil
55a12cb02e Fix for issues 51 and 52
51: Updated the python:run_command to look for : Locked.
52: Added option -L that is a variation of non-interactive
Added the constant with safequit and implemented the equivalent python
2014-08-03 12:56:17 -04:00
7 changed files with 1250 additions and 347 deletions

View File

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

View File

@@ -396,11 +396,11 @@ afc_error_t AFCFileRefOpen(afc_connection *conn, const char *path,
afc_error_t AFCFileRefSeek(afc_connection *conn, afc_file_ref ref,
unsigned long long offset1, unsigned long long offset2);
afc_error_t AFCFileRefRead(afc_connection *conn, afc_file_ref ref,
void *buf, unsigned int *len);
void *buf, size_t *len);
afc_error_t AFCFileRefSetFileSize(afc_connection *conn, afc_file_ref ref,
unsigned long long offset);
afc_error_t AFCFileRefWrite(afc_connection *conn, afc_file_ref ref,
const void *buf, unsigned int len);
const void *buf, size_t len);
afc_error_t AFCFileRefClose(afc_connection *conn, afc_file_ref ref);
afc_error_t AFCFileInfoOpen(afc_connection *conn, const char *path, struct
@@ -493,4 +493,4 @@ typedef unsigned int (*t_performOperation)(struct am_restore_device *rdev,
}
#endif
#endif
#endif

117
README.md
View File

@@ -1,16 +1,48 @@
ios-deploy
==========
Install and debug iPhone apps without using Xcode. Designed to work on unjailbroken devices.
Install and debug iOS apps without using Xcode. Designed to work on un-jailbroken devices.
## Requirements
* Mac OS X. Tested on Snow Leopard only.
* You need to have a valid iPhone development certificate installed.
* Xcode must be installed, along with the SDK for your iOS version.
* Mac OS X. Tested on 10.10 Yosemite and iOS 8.3
* You need to have a valid iOS Development certificate installed.
* Xcode 6 or greater should be installed
## 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)
2.0.0 will break out the commands into their own files, and create ios-deploy-lib for node.js use
## Installation
=======
ios-deploy installation is made simple using the node.js package manager. If you use [Homebrew](http://brew.sh/), install [node.js](https://nodejs.org):
```
brew install node
```
Now install ios-deploy with the [node.js](https://nodejs.org) package manager:
```
npm install -g ios-deploy
```
To install from source:
```
make install prefix=/usr/local
```
This will install ios-deploy in the `bin` folder of `/usr/local`, i.e. `/usr/local/bin`
## Usage
Usage: ./ios-deploy [OPTION]...
Usage: ios-deploy [OPTION]...
-d, --debug launch the app in GDB after installation
-i, --id <device_id> the id of the device to connect to
-c, --detect only detect if the device is connected
@@ -18,33 +50,72 @@ Install and debug iPhone apps without using Xcode. Designed to work on unjailbro
-a, --args <args> command line arguments to pass to the app when launching it
-t, --timeout <timeout> number of seconds to wait for a device to be connected
-u, --unbuffered don't buffer stdout
-g, --gdbargs <args> extra arguments to pass to GDB when starting the debugger
-x, --gdbexec <file> GDB commands script file
-n, --nostart do not start the app when debugging
-I, --noninteractive start in non interactive mode (quit when app crashes or exits)
-L, --justlaunch just launch the app and exit lldb
-v, --verbose enable verbose output
-m, --noinstall directly start debugging without app install (-d not required)
-p, --port <number> port used for device, default: 12345
-r, --uninstall uninstall the app before install (do not use with -m; app cache and data are cleared)
-1, --bundle_id <bundle id> specify bundle id for list and upload
-p, --port <number> port used for device, default: 12345
-r, --uninstall uninstall the app before install (do not use with -m; app cache and data are cleared)
-9, --uninstall_only uninstall the app ONLY. Use only with -1 <bundle_id>
-1, --bundle_id <bundle id> specify bundle id for list, upload, and uninstall_only
-l, --list list files
-o, --upload <file> upload file
-2, --to <target pathname> use together with upload file. specify target for upload
-V, --version print the executable version
-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
## Examples
The commands below assume that you have an app called `my.app` with bundle id `bundle.id`. Substitute where necessary.
// deploy and debug your app to a connected device
ios-deploy --debug --bundle my.app
// deploy and launch your app to a connected device, but quit the debugger after
ios-deploy --justlaunch --debug --bundle my.app
// deploy and launch your app to a connected device, quit when app crashes or exits
ios-deploy --noninteractive --debug --bundle my.app
// Upload a file to your app's Documents folder
ios-deploy --bundle_id 'bundle.id' --upload test.txt --to Documents/test.txt
// Download your app's Documents, Library and tmp folders
ios-deploy --bundle_id 'bundle.id' --download --to MyDestinationFolder
// List the contents of your app's Documents, Library and tmp folders
ios-deploy --bundle_id 'bundle.id' --list
// deploy and debug your app to a connected device, uninstall the app first
ios-deploy --uninstall --debug --bundle my.app
// check whether an app by bundle id exists on the device (check return code `echo $?`)
ios-deploy --exists --bundle_id com.apple.mobilemail
// Download the Documents directory of the app *only*
ios-deploy --download=/Documents -bundle_id my.app.id --to ./my_download_location
// List ids and names of connected devices
ios-deploy -c
// Uninstall an app
ios-deploy --uninstall_only --bundle_id my.bundle.id
// 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). GDB would also run slower as symbols would be downloaded from the device on-the-fly.
## Listing Device Ids
Device Ids are the UDIDs of the iOS devices. From the command line, you can list device ids [this way](http://javierhz.blogspot.com/2012/06/how-to-get-udid-of-iphone-using-shell.html):
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'
* With some modifications, it may be possible to use this without Xcode installed; however, you would need a copy of the relevant DeveloperDiskImage.dmg (included with Xcode). lldb would also run slower as symbols would be downloaded from the device on-the-fly.

358
errors.h Normal file
View File

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

File diff suppressed because it is too large Load Diff

View File

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

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

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