博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次运行启动多个 iOS 模拟器
阅读量:3591 次
发布时间:2019-05-20

本文共 1904 字,大约阅读时间需要 6 分钟。

当你写完自动布局需要测试在不同模拟器上的运行效果时你是否很头疼,需要一个一个模拟器去启动运行。

这时候如果可以一编译就同时启动多个模拟器那该是多么好啊.XCode 9有一个新的特性 - 允许多个模拟器共存。当然,它不会编译一次同时启动多个模拟器,这需要我们自己写一点脚本去控制。

具体的步骤如下:

0×01

在XCode中,点击Edit Scheme...,在Build 选项下的Pre-actions 卡下选择+ 按钮新增一个Custom Simulators

预作用

custom_sim=`xcrun simctl list | grep 'Custom Simulators' | awk -F'[()]' '{print $2}'`if [ -z "${custom_sim}" ]; then  xcrun simctl create Custom\ Simulators com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-11-2fi

pre-action脚本创建了一个类型为iOS 11.2的iPhone X模拟器  Custom Simulators ,如果你当前的环境中没有该选项,构建一下你的工程,你就能够在模拟器的下拉选项列表里面看到这个了。

定制模拟器

0×02

在你的工程根目录下创建一个名为MultiSimConfig.txt 的文件,这个文件指定了“自定义模拟器”应该启动哪些模拟器。

想知道你的XCode环境中支持哪些模拟器,可以在Terminal 中运行如下命令:

instruments -s devices

类似的,MultiSimConfig.txt可以这样写:

 

iPhone 6 (11.2)iPhone 8 Plus (11.2)iPhone X (11.2)

×03

创建一个脚本launch_multiple_simulators.sh去读取MultiSimConfig.txt并启动里面指定的模拟器。

#!/bin/bashxcrun simctl shutdown allpath=$(find ~/Library/Developer/Xcode/DerivedData/${project_name}-*/Build/Products/Debug-iphonesimulator -name "${app_name}.app" | head -n 1)echo "${path}"filename=${path_to_MultiSimConfig.txt}grep -v '^#' $filename | while read -r linedo  echo $line  xcrun instruments -w "$line"  xcrun simctl install booted $path  xcrun simctl launch booted ${bundle_identifier}done

把上面这个脚本放到工程根目录下。用你工程名字替换${project_name},app名字${app_name} 替换(一般来说工程名字和app名字是一样的),最后用你项目的捆绑标识符替换${bundle_identifier} 这个。该脚本运行的时候会把打开的模拟器关闭,定位到派生数据目录下的执行文件,然后读取MultiSimConfig.txt文件,最后安装app到指定的模拟器并启动。

为0x004

最后一步是将项目跟我们写好的脚步关联起来。

选择项目的目标 - >  Build Phases - >  New RunScript Phase,新增一个自定义执行脚本

运行脚本

custom_sim=`xcrun simctl list | grep 'Custom Simulators' | awk -F'[()]' '{print $2}'`if [ ! -z "${custom_sim}" ] && [ "${TARGET_DEVICE_IDENTIFIER}" = "${custom_sim}" ]; then  /bin/sh launch_multiple_simulators.shfi

这段脚本将“自定义模拟器”的UUID保存到  custom_sim 变量,紧接着如果当前的目标设备跟“自定义模拟器”的UUID匹配的话就执行launch_multiple_simulators.h 脚本。

项目地址如下:: 

编译运行,效果如下

你可能感兴趣的文章
统计一个整数的位数
查看>>
产生一个随机数
查看>>
使用"异或"运算而不需要临时变量交换两个变量的值
查看>>
使用指针对数组求和的三种方法
查看>>
[基于python 3.7+anaconda 3的零基础深度学习环境配置]cuda 11.1+cuDNN v8.1.1+win10+TITAN XP
查看>>
【anaconda或python(pycharm)安装pandas报错】conda install pandas报错,显示下载通道不可用
查看>>
UnavailableInvalidChannel: The channel is not accessible or is invalid. channel name: simple cha
查看>>
python中如何安装cv2(anaconda navigator下载安装cv2)
查看>>
【siamFC之lmdb库报错】ModuleNotFoundError: No module named ‘lmdb‘
查看>>
【siamFC之sklearn库报错】ModuleNotFoundError: No module named ‘sklearn‘
查看>>
如何使用anaconda prompt中清除手动设置的清华镜像源等,直接使用anaconda 的默认通道
查看>>
安装cuda9.0、卸载cuda11.1
查看>>
Siam系列代码抓取、下载
查看>>
完美安装!经验之谈,看它就对了!!!卸载cuda9.0重新安装cuda10.0以及pytorh1.1.0
查看>>
防踩坑!如何安装pillow<7.0.0
查看>>
anaconda设置.condarc文件内清华源
查看>>
(SiamFC)Linux下安装anaconda+pytorch==1.0.1+torchvision==0.2.2+cudatoolkit==10.0
查看>>
linux中压缩/解压zip格式文件命令
查看>>
*p(++)是什么意思
查看>>
如何在windows操作系统下默认使用python自带的IDLE编辑器打开后缀名为.py的文件。
查看>>