10 Commits
1.3.1 ... 1.4.0

Author SHA1 Message Date
Shazron Abdullah
56abf4e92e Updated version to 1.4.0 2015-03-02 16:15:11 -08:00
Shazron Abdullah
05edec9562 Fixes #90, #91 - EXC_BAD_ACCESS crash 2015-03-02 16:09:07 -08:00
Shazron Abdullah
48f7881a0b Fixes #105 - ios-deploy --version returns a non-zero exit code 2015-03-02 16:04:43 -08:00
Shazron Abdullah
abbd1a3769 Merge pull request #94 from alexdunn/master
Clarify what npm is and how to get it
2014-12-24 16:36:23 -05:00
Alex Dunn
e5e2a6349d Clarify what npm is and how to get it 2014-12-23 04:53:35 -08:00
Shazron Abdullah
5a8d7f9efb Merge pull request #92 from diaswrd/master
Add installation instructions in README.
2014-12-15 09:25:51 -08:00
William Dias
0dece5157e Add installation instructions in README. 2014-12-15 09:28:13 -02:00
Shazron Abdullah
e1aacc0ba1 Model table typo (copy paste error) for iPhone 5 models. 2014-12-12 17:46:56 -08:00
Shazron Abdullah
e4c4660f2a Cleaned up get_device_hardware_name by using a macro (related to issue #88).
This prepares it for adding models that are missing, see: https://theiphonewiki.com/wiki/Models
2014-12-12 17:43:50 -08:00
Shazron Abdullah
33f6a83e1d Fixes phonegap/ios-deploy#80 (re-fix) --detect not showing non-zero exit code when no devices are detected.
When --detect is turned on, --debug is turned on implicitly so you won't get a segmentation fault.
2014-11-16 20:49:33 -08:00
3 changed files with 82 additions and 83 deletions

View File

@@ -8,6 +8,17 @@ Install and debug iOS apps without using Xcode. Designed to work on un-jailbroke
* You need to have a valid iOS development certificate installed.
* Xcode 6.1 should be installed
## Installation
ios-deploy installation is made simple using the node.js package manager. If you use [Homebrew](http://brew.sh/), install node.js:
```bash
brew install node
```
Now install ios-deploy with the node.js package manager:
```bash
$ npm install -g ios-deploy
```
## Usage
Usage: ios-deploy [OPTION]...

View File

@@ -16,7 +16,7 @@
#include <netinet/tcp.h>
#include "MobileDevice.h"
#define APP_VERSION "1.3.1"
#define APP_VERSION "1.4.0"
#define PREP_CMDS_PATH "/tmp/fruitstrap-lldb-prep-cmds-"
#define LLDB_SHELL "lldb -s " PREP_CMDS_PATH
/*
@@ -312,87 +312,71 @@ CFStringRef copy_xcode_path_for(CFStringRef subPath, CFStringRef search) {
}
}
#define GET_FRIENDLY_MODEL_NAME(VALUE, INTERNAL_NAME, FRIENDLY_NAME) if (kCFCompareEqualTo == CFStringCompare(VALUE, CFSTR(INTERNAL_NAME), kCFCompareNonliteral)) { return CFSTR( FRIENDLY_NAME); };
// Please ensure that device is connected or the name will be unknown
const CFStringRef get_device_hardware_name(const AMDeviceRef device) {
CFStringRef model = AMDeviceCopyValue(device, 0, CFSTR("HardwareModel"));
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("M68AP"), kCFCompareNonliteral))
return CFSTR("iPhone");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N45AP"), kCFCompareNonliteral))
return CFSTR("iPod touch");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N82AP"), kCFCompareNonliteral))
return CFSTR("iPhone 3G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N72AP"), kCFCompareNonliteral))
return CFSTR("iPod touch 2G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N88AP"), kCFCompareNonliteral))
return CFSTR("iPhone 3GS");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N18AP"), kCFCompareNonliteral))
return CFSTR("iPod touch 3G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K48AP"), kCFCompareNonliteral))
return CFSTR("iPad");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N90AP"), kCFCompareNonliteral))
return CFSTR("iPhone 4 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N81AP"), kCFCompareNonliteral))
return CFSTR("iPod touch 4G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K66AP"), kCFCompareNonliteral))
return CFSTR("Apple TV 2G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N92AP"), kCFCompareNonliteral))
return CFSTR("iPhone 4 (CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N90BAP"), kCFCompareNonliteral))
return CFSTR("iPhone 4 (GSM, revision A)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K93AP"), kCFCompareNonliteral))
return CFSTR("iPad 2");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K94AP"), kCFCompareNonliteral))
return CFSTR("iPad 2 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K95AP"), kCFCompareNonliteral))
return CFSTR("iPad 2 (CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("K93AAP"), kCFCompareNonliteral))
return CFSTR("iPad 2 (Wi-Fi, revision A)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P105AP"), kCFCompareNonliteral))
return CFSTR("iPad mini");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P106AP"), kCFCompareNonliteral))
return CFSTR("iPad mini (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P107AP"), kCFCompareNonliteral))
return CFSTR("iPad mini (CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N94AP"), kCFCompareNonliteral))
return CFSTR("iPhone 4S");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N41AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N42AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5 (Global/CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N48AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5c (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N49AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5c (Global/CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N51AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5s (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N53AP"), kCFCompareNonliteral))
return CFSTR("iPhone 5s (Global/CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N61AP"), kCFCompareNonliteral))
return CFSTR("iPhone 6 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("J1AP"), kCFCompareNonliteral))
return CFSTR("iPad 3");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("J2AP"), kCFCompareNonliteral))
return CFSTR("iPad 3 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("J2AAP"), kCFCompareNonliteral))
return CFSTR("iPad 3 (CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P101AP"), kCFCompareNonliteral))
return CFSTR("iPad 4");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P102AP"), kCFCompareNonliteral))
return CFSTR("iPad 4 (GSM)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("P103AP"), kCFCompareNonliteral))
return CFSTR("iPad 4 (CDMA)");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("N78AP"), kCFCompareNonliteral))
return CFSTR("iPod touch 5G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("A1509"), kCFCompareNonliteral))
return CFSTR("iPod touch 5G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("J33AP"), kCFCompareNonliteral))
return CFSTR("Apple TV 3G");
if (kCFCompareEqualTo == CFStringCompare(model,CFSTR("J33IAP"), kCFCompareNonliteral))
return CFSTR("Apple TV 3.1G");
if (model == NULL) {
return CFSTR("Unknown Device");
}
// iPod Touch
GET_FRIENDLY_MODEL_NAME(model, "N45AP", "iPod Touch")
GET_FRIENDLY_MODEL_NAME(model, "N72AP", "iPod Touch 2G")
GET_FRIENDLY_MODEL_NAME(model, "N18AP", "iPod Touch 3G")
GET_FRIENDLY_MODEL_NAME(model, "N81AP", "iPod Touch 4G")
GET_FRIENDLY_MODEL_NAME(model, "N78AP", "iPod Touch 5G")
GET_FRIENDLY_MODEL_NAME(model, "N78AAP", "iPod Touch 5G")
// iPad
GET_FRIENDLY_MODEL_NAME(model, "K48AP", "iPad")
GET_FRIENDLY_MODEL_NAME(model, "K93AP", "iPad 2")
GET_FRIENDLY_MODEL_NAME(model, "K94AP", "iPad 2 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "K95AP", "iPad 2 (CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "K93AAP", "iPad 2 (Wi-Fi, revision A)")
GET_FRIENDLY_MODEL_NAME(model, "J1AP", "iPad 3")
GET_FRIENDLY_MODEL_NAME(model, "J2AP", "iPad 3 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "J2AAP", "iPad 3 (CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "P101AP", "iPad 4")
GET_FRIENDLY_MODEL_NAME(model, "P102AP", "iPad 4 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "P103AP", "iPad 4 (CDMA)")
// iPad Mini
GET_FRIENDLY_MODEL_NAME(model, "P105AP", "iPad mini")
GET_FRIENDLY_MODEL_NAME(model, "P106AP", "iPad mini (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "P107AP", "iPad mini (CDMA)")
// Apple TV
GET_FRIENDLY_MODEL_NAME(model, "K66AP", "Apple TV 2G")
GET_FRIENDLY_MODEL_NAME(model, "J33AP", "Apple TV 3G")
GET_FRIENDLY_MODEL_NAME(model, "J33IAP", "Apple TV 3.1G")
// iPhone
GET_FRIENDLY_MODEL_NAME(model, "M68AP", "iPhone")
GET_FRIENDLY_MODEL_NAME(model, "N82AP", "iPhone 3G")
GET_FRIENDLY_MODEL_NAME(model, "N88AP", "iPhone 3GS")
GET_FRIENDLY_MODEL_NAME(model, "N90AP", "iPhone 4 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "N92AP", "iPhone 4 (CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "N90BAP", "iPhone 4 (GSM, revision A)")
GET_FRIENDLY_MODEL_NAME(model, "N94AP", "iPhone 4S")
GET_FRIENDLY_MODEL_NAME(model, "N41AP", "iPhone 5 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "N42AP", "iPhone 5 (Global/CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "N48AP", "iPhone 5c (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "N49AP", "iPhone 5c (Global/CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "N51AP", "iPhone 5s (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "N53AP", "iPhone 5s (Global/CDMA)")
GET_FRIENDLY_MODEL_NAME(model, "N61AP", "iPhone 6 (GSM)")
GET_FRIENDLY_MODEL_NAME(model, "N56AP", "iPhone 6 Plus")
return model;
//return CFStringCreateWithFormat(NULL, NULL, CFSTR("%s"), hwmodel);
//return CFSTR("Unknown Device");
}
char * MYCFStringCopyUTF8String(CFStringRef aString) {
@@ -1448,6 +1432,7 @@ void handle_device(AMDeviceRef device) {
if (detect_only) {
printf("[....] Found %s connected through %s.\n", CFStringGetCStringPtr(device_full_name, CFStringGetSystemEncoding()), CFStringGetCStringPtr(device_interface_name, CFStringGetSystemEncoding()));
found_device = true;
return;
}
if (device_id != NULL) {
@@ -1609,10 +1594,12 @@ void timeout_callback(CFRunLoopTimerRef timer, void *info) {
{
if (!debug) {
printf("[....] No more devices found.\n");
exit(exitcode_error);
}
else
{
if (detect_only && !found_device) {
exit(exitcode_error);
return;
} else {
int mypid = getpid();
if ((parent != 0) && (parent == mypid) && (child != 0))
{
@@ -1630,7 +1617,7 @@ void timeout_callback(CFRunLoopTimerRef timer, void *info) {
void usage(const char* app) {
printf(
"Usage: %s [OPTION]...\n"
" -d, --debug launch the app in GDB after installation\n"
" -d, --debug launch the app in lldb after installation\n"
" -i, --id <device_id> the id of the device to connect to\n"
" -c, --detect only detect if the device is connected\n"
" -b, --bundle <bundle.app> the path to the app bundle to be installed\n"
@@ -1723,10 +1710,11 @@ int main(int argc, char *argv[]) {
break;
case 'c':
detect_only = true;
debug = 1;
break;
case 'V':
show_version();
return exitcode_error;
return 0;
case 'p':
port = atoi(optarg);
break;

View File

@@ -1,6 +1,6 @@
{
"name": "ios-deploy",
"version": "1.3.1",
"version": "1.4.0",
"description": "launch iOS apps iOS devices from the command line (Xcode 6)",
"main": "ios-deploy",
"scripts": {