要想实现命令行控制模拟器需要用的到命令是simctl
: Simulators Control
看这命令的意思像是这两个单词的缩写,搭载xcrun
命令,可以通过这个命令实现以下功能
- 创建、删除、开启 模拟器
- 添加图片到模拟器
- 安装、卸载、打开、关闭APP
帮助命令
1 | xcrun simctl --help |
查看当前有哪些模拟器
1 | xcrun simctl list |
截取部分日志如下
1 | == Device Types == |
搭载查找命令grep
可以查看正在使用的模拟器
1 | ➜ ~ xcrun simctl list | grep Booted |
添加一个模拟器
设备名称、设备类型、设备的操作系统、可以定位出一个设备信息,比如我们要增加一个名为DemoDevice
、iPhone 7
、iOS 11.4
命令如下
1 | ➜ ~ xcrun simctl create DemoDevice com.apple.CoreSimulator.SimDeviceType.iPhone-7 com.apple.CoreSimulator.SimRuntime.iOS-11-4 |
创建成果的话会返回设备的id这里是4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0
list
下
1 | -- iOS 11.4 -- |
也可以通过grep搜索一下
1 | ➜ ~ xcrun simctl list | grep 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |
开启一个模拟器
以刚才那个自己创建的为例子吧
1 | ➜ ~ xcrun simctl boot 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |
写个图片到刚才的模拟器中
桌面准备一张图片`google@2x.png`
1 | ➜ ~ xcrun simctl addmedia 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 ~/Desktop/google@2x.png |
打开相册会发现多了一张图片,就不截图了
重置模拟器
重置模拟器的命令
1 | ➜ ~ xcrun simctl erase 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |
如果你的模拟器已经开启的情况下可能会报下面的错误
1 | An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=164): |
提示你的模拟器当前的状态是booted的,所有要先关掉模拟器
1 | ➜ ~ xcrun simctl shutdown 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |
再执行1
➜ ~ xcrun simctl erase 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0
会发现之前的所有的修改都没了
如果发现设备卡住了,可以关掉再重新boot
下
通过DerivedData来安装app
(1) 在桌面下新建一个名为TestSimctl
的工程
(2)cd到TestSimctl
目录下通过build
命令来得到DerivedData
路径
1 | xcodebuild build -scheme 'TestSimctl' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -sdk iphonesimulator11.4 |
会得到~/Library/Developer/Xcode/DerivedData/TestSimctl-heyedthdtyuorceyxhlduzjcoqol/Build/Products/Debug-iphonesimulator/TestSimctl.app
每个人的机器路径会有些不一样复制一下就好了
(2)通过刚才的DerivedData
来安装TestSimctl应用
1 | xcrun simctl install booted ~/Library/Developer/Xcode/DerivedData/TestSimctl-heyedthdtyuorceyxhlduzjcoqol/Build/Products/Debug-iphoneos/TestSimctl.app |
(3)通过bundleid来卸载刚才那个app,我这里是com.TestSimctl
1 | xcrun simctl uninstall booted com.TestSimctl |
发现哪个app不见了
(4)通过bundleid来启动刚才app, 先保证已经安装了app
1 | xcrun simctl launch booted com.TestSimctl |
会发现已经启动起来了
(4)通过bundleid来关闭已经打开的app
1 | xcrun simctl terminate booted com.TestSimctl |
截图功能
1 | ➜ TestSimctl git:(master) ✗ xcrun simctl io booted screenshot test.png |
会发现当前目录下多了一张照片
1 | └── test.png |
日志功能
1 | xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "TestSimctl"' |
改造下viewcontroller
代码
1 | - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { |
重新build后可以发现终端可以看到日志了
删除模拟器
先shutdown
1 | xcrun simctl shutdown 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |
再删除
1 | xcrun simctl delete 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 |