一、模拟器
本次操作分为以下几个方面:
- 构建目标应用
- 启动一个iOS模拟器
- 把该app应用安装到上面启动好的模拟器上面
- 运行安装好的app
- 从模拟器上卸载掉该app
- 收集以下的一些基本信息:
需要构建的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。类似的工具有Fruitstrap,ideviceinstaller、node-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