一、模拟器

       本次操作分为以下几个方面

  1. 构建目标应用
  2. 启动一个iOS模拟器
  3. 把该app应用安装到上面启动好的模拟器上面
  4. 运行安装好的app
  5. 从模拟器上卸载掉该app
  6. 收集以下的一些基本信息:

需要构建的scheme

如“AwesomeApp”

应用bundle id

如”com.awesome.app”

模拟器的名称

如”iPhone6 Plus”

       如果你不想从Xcode的GUI中获取到这些信息,你可以通过查看命令xcrun simtl list的输出来进行收集。

开始在终端运行命令

       (注意以下的命令需要在你的项目文件夹下面运行)

构建应用(指定在当前目录下生成build文件夹):

xcodebuild -scheme AwesomeApp -destination ‘platform=iphonesimulator,name=iPhone 6 Plus’ -derivedDataPath build

启动模拟器:

xcrun instruments -w ‘iPhone 6 Plus’

安装应用包

       需要在通过以上命令构建好目标应用和启动完成模拟器之后来运行此命令

xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/AwesomeApp.app

启动模拟器中已经安装好的应用

       在该应用已经通过如上命令安装好之后

xcrun simctl launch booted com.awesome.app

删除该安装包

xcrun simctl uninstall booted com.awesome.app

       如果你需要构建的是一个相当复杂的项目的话,你其实是需要给构建命令指定不少的一些参数的。

       具体请阅读RTFMs(Read The Fucking Manuals:阅读那该死的使用手册!)。如果你是像我一样是个懒虫的话,请通过编写一些脚本来自动完成这些步骤吧。

二、真机

2.1 ios-deploy是什么?

       ios-deploy是一个使用命令行安装ios app到连接的设备的工具,原理是根据os x命令行工程调用系统底层函数,获取连接的设备、查询/安装/卸载app。类似的工具有Fruitstrapideviceinstallernode-ios-device等。

2.2 安装

条件

  • iOS 开发证书
  • Xcode6.4+

安装

       需要使用包管理工具node.js安装,如果未安装node.js,管理员权限执行下列命令

brew install node

       安装ios-deploy:

npm install -g ios-deploy

2.3使用

       参数

Usage: ios-deploy [OPTION]…

-d, –debug                 安装app后,在lldb调试环境唤起app
-i, –id <device_id>        设置要连接的设备id
-c, –detect                检测设备是否连接
-b, –bundle <bundle.app>   设置要安装的app budle
-a, –args <args>           启动app时传递的参数
-t, –timeout <timeout>     设置连接设备超时时间
-u, –unbuffered            不缓存stdout
-n, –nostart               调试时不唤起app
-I, –noninteractive        在非交互模式启动 (app异常退出时退出调试)
-L, –justlaunch            启动app并关闭lldb调试
-v, –verbose               enable verbose output
-m, –noinstall             不安装app直接启动调试 (-d not required)
-p, –port <number>         指定设备端口, default: dynamic
-r, –uninstall             安装时先卸载老的app(do not use with -m;
                           app cache and data are cleared)
-9, –uninstall_only        仅仅卸载app. 仅仅和 -1 <bundle_id>搭配使用。
-1, –bundle_id <bundle id> 指定bundle id
-l, –list                  列出所有文件
-o, –upload <file>         上传指定文件
-w, –download              下载app tree
-2, –to <target pathname>  use together with up/download  
                           file/tree. specify target
-D, –mkdir <dir>           在设备上创建文件
-R, –rm <path>             移除设备上的文件/目录 (目录一定为空时)
-V, –version               打印执行文件版本
-e, –exists                检查指定的bundle id是否安装
-B, –list_bundle_id        列出所有安装的bundle id
-W, –no-wifi               ignore wifi devices

使用示例

// 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

// 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