#通过命令行控制模拟器--simctl

要想实现命令行控制模拟器需要用的到命令是simctl: Simulators Control 看这命令的意思像是这两个单词的缩写,搭载xcrun命令,可以通过这个命令实现以下功能

  1. 创建、删除、开启 模拟器
  2. 添加图片到模拟器
  3. 安装、卸载、打开、关闭APP

帮助命令

xcrun simctl --help

查看当前有哪些模拟器

xcrun simctl list

截取部分日志如下

== Device Types ==
iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)
iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5)

== Runtimes ==
iOS 8.1 (8.1 - 12B411) - com.apple.CoreSimulator.SimRuntime.iOS-8-1
iOS 9.0 (9.0 - 13A344) - com.apple.CoreSimulator.SimRuntime.iOS-9-0
iOS 10.0 (10.0 - 14A345) - com.apple.CoreSimulator.SimRuntime.iOS-10-0
iOS 11.4 (11.4 - 15F79) - com.apple.CoreSimulator.SimRuntime.iOS-11-4

== Devices ==
-- iOS 8.1 --
    iPhone 4s (134D6998-BB21-4E41-BF30-F2475B71518C) (Shutdown)
    iPhone 5 (C284C3E1-6297-452C-AADF-2AFA0D3D9931) (Shutdown)
    iPhone 5s (1417E9B3-FA40-42D3-BF04-F7DD469DDA7E) (Shutdown)
    iPhone 6 (A8BA264E-115F-4B64-85FF-63E1C9B8E4CC) (Shutdown)
    
-- iOS 10.0 --
iPhone 5 (6B088A91-F77C-4FA6-A6DA-0E4722B11DE5) (Shutdown)
iPhone 5s (38D06629-1F4B-46A2-A986-CBE28503E63F) (Shutdown)
iPhone 6 (598F3D6F-5439-4216-808D-D14857B6B68B) (Shutdown)
iPhone 6 Plus (B79E33B8-0944-4509-8DAA-15D00C3FF8E1) (Shutdown)
iPhone 6s (26A06303-C684-46F1-AF9B-9ECEB737B2AA) (Booted)

-- iOS 11.4 --
iPhone 5s (8B31401D-41BE-40F9-8ED1-F17C93C87F8A) (Shutdown)
iPhone 6 (12D46DEB-71A0-4009-A83D-C96A4AACBD3D) (Shutdown)

搭载查找命令grep可以查看正在使用的模拟器

➜  ~ xcrun simctl list | grep Booted
    iPhone 6s (26A06303-C684-46F1-AF9B-9ECEB737B2AA) (Booted)
    

添加一个模拟器

设备名称、设备类型、设备的操作系统、可以定位出一个设备信息,比如我们要增加一个名为DemoDeviceiPhone 7iOS 11.4命令如下

➜  ~ xcrun simctl create DemoDevice com.apple.CoreSimulator.SimDeviceType.iPhone-7  com.apple.CoreSimulator.SimRuntime.iOS-11-4
4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

创建成果的话会返回设备的id这里是4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

list

-- iOS 11.4 --
    iPhone 5s (8B31401D-41BE-40F9-8ED1-F17C93C87F8A) (Shutdown)
    iPhone 6 (12D46DEB-71A0-4009-A83D-C96A4AACBD3D) (Shutdown)
    iPhone 6 Plus (40F90FF9-D7F8-4D44-85BB-F69B97909CC3) (Shutdown)
    iPhone 6s (61DFD682-9E00-4120-9AAF-132D6F2A2DCD) (Shutdown)
    iPhone 6s Plus (648433A5-2CDE-4982-BF00-7F70EA20739F) (Shutdown)
    DemoDevice (4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0) (Shutdown)
    

也可以通过grep搜索一下

➜  ~ xcrun simctl list | grep  4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0
    DemoDevice (4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0) (Shutdown)
➜  ~

开启一个模拟器

以刚才那个自己创建的为例子吧

➜  ~ xcrun simctl boot 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0
15313910142713.jpg

写个图片到刚才的模拟器中

桌面准备一张图片google@2x.png

➜  ~ xcrun simctl addmedia 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0 ~/Desktop/google@2x.png

打开相册会发现多了一张图片,就不截图了

重置模拟器

重置模拟器的命令

➜  ~ xcrun simctl erase 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

如果你的模拟器已经开启的情况下可能会报下面的错误

An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=164):
Unable to erase contents and settings in current state: Booted

提示你的模拟器当前的状态是booted的,所有要先关掉模拟器

➜  ~ xcrun simctl shutdown 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

再执行

➜  ~ xcrun simctl erase 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

会发现之前的所有的修改都没了

如果发现设备卡住了,可以关掉再重新boot

通过DerivedData来安装app

(1) 在桌面下新建一个名为TestSimctl的工程

(2)cd到TestSimctl目录下通过build命令来得到DerivedData路径

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应用

xcrun simctl install booted ~/Library/Developer/Xcode/DerivedData/TestSimctl-heyedthdtyuorceyxhlduzjcoqol/Build/Products/Debug-iphoneos/TestSimctl.app
15314471990147.jpg

(3)通过bundleid来卸载刚才那个app,我这里是com.TestSimctl

xcrun simctl uninstall booted com.TestSimctl

发现哪个app不见了

(4)通过bundleid来启动刚才app, 先保证已经安装了app

xcrun simctl launch booted com.TestSimctl

会发现已经启动起来了

(4)通过bundleid来关闭已经打开的app

xcrun simctl terminate  booted com.TestSimctl

截图功能

➜  TestSimctl git:(master) ✗ xcrun simctl io booted screenshot test.png
Detected file type 'PNG' from extension
Wrote screenshot to: test.png

会发现当前目录下多了一张照片

└── test.png

日志功能

xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "TestSimctl"'

改造下viewcontroller代码

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesBegan");
}

重新build后可以发现终端可以看到日志了

删除模拟器

先shutdown

xcrun simctl shutdown 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0

再删除

xcrun simctl delete 4F5A92A2-8241-4A8E-8A22-2E5A87FECCC0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,988评论 0 13
  • 前言:各类证书生产就不赘诉公司或个人开发者证书与企业开发者证书的申请和发布不同之处在于用企业账号申请的证书不需要添...
    二先生Developer阅读 5,280评论 1 5
  • 一.应用场景 先来谈谈是什么情况下,会有在模拟器上安装app的需求。 在一个大公司里,对源码的管理有严格的制度,非...
    一叶夏幕阅读 7,345评论 1 2
  • iOS学习之深入理解程序编译过程 https://juejin.im/post/5a352bb0f265da433...
    111浪子111阅读 1,705评论 0 2
  • 曾在知乎上看过这样的故事:我是别人口中的“别人家的孩子”成绩优秀,优等生,后来考上了好的大学,找了份很好的工作,他...
    bym_f742阅读 753评论 0 1