iOS模拟器管理工具simctl了解一下

在开发iOS app时,模拟器扮演着十分重要的角色。模拟器可以帮助我们快速、简单的在开发过程中进行测试。针对不同分辨率、不同系统的设备进行适配。苹果提供的模拟器入门文档几乎包含了所有通过图形界面来控制模拟器的知识。尽管模拟器有丰富的图形化界面操作,但是如果要在持续集成服务器上运行脚本来与模拟器交互,似乎是一件非常痛苦的事情。今天我们就来看看如何通过命令行的方式与iOS模拟器进行交互。

simctl

  苹果提供了一个命令行工具来与iOS模拟器进行交互。这与安卓的adb命令非常相似。虽然苹果官方文档没有对它进行任何说明。但是我们可以通过Applications/Xcode.app/Contents/Developer/usr/bin/simctl路径找到它。由于是XCode内置的命令,所以在使用的时候要在该命令前面加上xcrun。我们可以通过以下命令来查看该命令所有的功能选项。

$ xcrun simctl help

image
  我们可以看到功能很多,针对模拟器本身来说可以进行创建、删除、克隆、升级、重置、重命名、启动、关闭。也可以为模拟器安装、卸载、打开、关闭应用,导入照片、视频,查看安装的app等等功能。

子命令 功能
create 新建一个新的模拟器
clone 克隆一个已有的模拟器
upgrade 给模拟器升级系统
delete 删除一个模拟器或删除全部不可用模拟器
pair 将手表模拟器和iPhone模拟器进行配对
unpair 解除手表模拟器和iPhone模拟器的配对
pair_activate 激活手表模拟器和iPhone模拟器的配对
erase 清除模拟器的所有数据和设置
boot 启动一个模拟器
shutdown 关闭一个模拟器
rename 重命名模拟器
getenv 获取模拟器环境变量对应的值
openurl 打开一个链接(不局限于网页链接)
addphoto 给模拟器相册中添加照片
addvideo 给模拟器相册中添加视频
addmedia 给模拟器相册中添加照片、LIVE照片或者视频
install 安装一个应用
uninstall 卸载一个应用
get_app_container 获取应用的沙盒路径
launch 打开一个应用
terminate 关闭一个应用
spawn 开启一个新进程
list 列出所有可用的模拟器、模拟器类型、系统版本、设备配对情况
icloud_sync 触发设备上的iCloud同步
pbinfo 打印模拟器粘贴板的信息
pbsync 将设备粘贴板的信息同步给其他设备
pbcopy 将标准输入复制到设备粘贴板上
pbpaste 将设备的剪切板打印到标准输出中
notify_post 发送一个Darwin通知
notify_get_state 设置Darwin通知的状态值
notify_set_state 获取Darwin通知的状态值
register 注册一个服务
unregister 注销一个服务
keyboard 设置键盘的主语言
monitor 当通知达到的时候,打印出来
appinfo 获取一个已安装app的信息
listapps 获取全部已安装的app
help 显示如何使用
io 设置设备IO操作
diagnose 收集诊断信息和日志
logverbose 启用或禁用设备的详细日志记录
bootstatus 检查设备的运行状态
darwinup 调用darwinup来安装一个root运行环境

  接下来我们来看看一些命令具体的用法。

列出所有可用的模拟器

  我们可以通过命令轻松列出所有可用的模拟器

$ xcrun simctl list

image
  如果某台设备正在运行,那么他的状态,就是booted。如果我们只希望查看正在运行的模拟器,而不需要系统、配对信息的话,可以在命令后面加上devices

$ xcrun simctl list devices

设备的CRUD操作

  我们可以创建、删除、重命名、升级一个模拟器。

创建

  我们来创建一个名字为my_iPhone_X的iOS 11.4系统的iPhone X模拟器(可用的deviceType和Runtime可以通过上面的xcrun simctl list命令来查看)

$ xcrun simctl create "my_iPhone_X" "com.apple.CoreSimulator.SimDeviceType.iPhone-X" "com.apple.CoreSimulator.SimRuntime.iOS-11-4"

  现在我们再进行重命名,修改为new_iPhone

$ xcrun simctl rename "E3AEEEDA-00C7-4AB3-B634-760B0F838DE8" "new_iPhone"

  当我们不需要的时候,删除它

$ xcrun simctl delete "E3AEEEDA-00C7-4AB3-B634-760B0F838DE8"

image

关闭、重置、启动

  在list命令中,我们看到已经有一个正在运行的模拟器了,那让我们关闭它并重置它的内容。我们不能再启动状态下清除一个模拟器,这里必须要先关闭再清除。

$ xcrun simctl shutdown booted
$ xcrun simctl erase "60613B62-A648-4149-BE64-9E6CBD5DBD30"

  shutdown命令参数我们用了booted,该参数代表正在运行的app,要注意的是在Xcode9中,可以同时运行多个模拟器,如果调用该命令,只会对其中一个模拟器起作用。重置之后,我们再启动它吧。

$ xcrun simctl boot "60613B62-A648-4149-BE64-9E6CBD5DBD30"

  这里需要注意的是,如果模拟器应用没有打开,直接调用上面的命令来启动一个模拟器是无效的,所以我们要先打开模拟器应用,然后再启动一个模拟器。

$ open "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/"

  打开了模拟器,让我们上个网冲个浪吧

xcrun simctl openurl booted "https://www.sogou.com"

还在路上,稍等...
  同样我们可以通过URL Scheme方式一样打开一个app

xcrun simctl openurl booted "com.kingsword.tugele:"

还在路上,稍等...

安装、卸载应用

  如果我们在build之后得到了.app文件,我们可以从命令行轻松的在模拟器中安装应用程序。

$ xcrun simctl install booted ~/Desktop/TuGeLe2016.app/

  同样我们可以通过bundle identifier来卸载一个应用

$ xcrun simctl uninstall booted com.kingsword.TuGeLe2016

启动、关闭应用

  与卸载类似,我们可以通过bundle identifier来启动、关闭一个应用,前提是确保这个应用已经安装了。

$ xcrun simctl launch booted "com.kingsword.TuGeLe2016"
$ xcrun simctl terminate booted "com.kingsword.TuGeLe2016"

截图以及视频录制

  Xcode 8.2中增加了模拟器截图以及录制视频的功能,我们可以轻松方便的得到截图和录制视频。那就先截图吧

$ xcrun simctl io booted screenshot "screen.png"

同样我们可以录制模拟器的视频并保存到磁盘上(注意,视频长度最长为30秒,录制过程通过Ctrl+C来提前结束录制)

$ xcrun simctl io booted recordVideo "news.mov"

获取应用的沙盒路径

  我们在开发过程中,经常需要打开模拟器的沙盒做一些调试,而通过命令行就能快速定位到应用的沙盒路径

$ xcrun simctl appinfo booted "com.kingsword.TuGeLe2016"

image
  输出很多的信息,其中DataContainer对应的就是沙盒路径。如果是模拟器重度使用者,我想你一定知道simPholder这款app,很遗憾的是3.0之后收费了。不过通过了了解本文后,是不是感觉通过simctl命令就可以实现出相同的功能呢?有兴趣的同学可以自己造轮子,如果不想的话,可以用用这个开源的应用simsim,与simPholder功能类似,还提供了很多快捷键,使用起来很方便。

实战

  命令讲的差不多了,接下来正式进入战场。场景是这样,在开发一个界面的时候,难免会要到各个分辨率的机器上试一下,看看效果,真机不够的情况下,就只能使用模拟器了,如果通过Xcode打包,每个分辨率要执行一次,效率极低。
  现在我们知道通过simctl命令,可以获取模拟器列表,为模拟器安装并打开应用,再加上Xcode在build的时候提供可以执行shell脚本的能力,那么我们编写shell脚本,把待测试的分辨率的模拟器上都安装上app,并且打开不就可以了么,撸起袖子加油干。

#首先打开模拟器应用
open "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/"

#然后启动待测试的模拟器
xcrun simctl boot "25964441-4EBD-446E-AD94-9DB759A7247D"
xcrun simctl boot "9AD652CC-14BC-4CDB-86D3-38E9B20D2BB4"
xcrun simctl boot "81CCAF77-15D4-4862-9B88-58129733BDFF"
xcrun simctl boot "60613B62-A648-4149-BE64-9E6CBD5DBD30"

#在模拟器上安装待测试的app,下面的变量其实是Xcode的环境变量,在run script中直接使用即可
xcrun simctl install "25964441-4EBD-446E-AD94-9DB759A7247D" "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"
xcrun simctl install "9AD652CC-14BC-4CDB-86D3-38E9B20D2BB4" "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"
xcrun simctl install "81CCAF77-15D4-4862-9B88-58129733BDFF" "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"
xcrun simctl install "60613B62-A648-4149-BE64-9E6CBD5DBD30" "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"

#最后打开应用,收工
xcrun simctl launch "25964441-4EBD-446E-AD94-9DB759A7247D" "${PRODUCT_BUNDLE_IDENTIFIER}"
xcrun simctl launch "9AD652CC-14BC-4CDB-86D3-38E9B20D2BB4" "${PRODUCT_BUNDLE_IDENTIFIER}"
xcrun simctl launch "81CCAF77-15D4-4862-9B88-58129733BDFF" "${PRODUCT_BUNDLE_IDENTIFIER}"
xcrun simctl launch "60613B62-A648-4149-BE64-9E6CBD5DBD30" "${PRODUCT_BUNDLE_IDENTIFIER}"

  把上面代码,放到工程的run script中即可。最后附上效果。

image

猜你喜欢

转载自blog.csdn.net/TuGeLe/article/details/80848300
今日推荐