背景
Apple M1, M2 等系列芯片的电脑,在 iOS 模拟器上滑动列表页面,滑动会比真机快,让列表的内容定位变得异常困难。
补充一点,在真机上无论是 iOS 还是 Android 滑动的速度都是正常的。
方案
获取当前电脑的设备列表
xcrun simctl list
下面是这个命令完整的输出,内容有点长,可以不看,直接往下看
剔除了部分干扰信息后,找到我们的设备,我当前用的设备是iPhone 14 (iOS 16.1)
可以看到 == Devices ==
区域下面的设备和我们当前iOS模拟器的可用设备是一一对应的
在这个表里面找到我们当前设备的id,这里是445029B1-3728-41DF-B351-D3AFF0EC9580
对应的状态是已启动(Booted)就是
更新指定设备启动架构配置
xcrun simctl boot [deviceID] --arch=x86_64
[deviceID] 就是来自上面的设备id,这里已经获取到,带 入最终要执行的命令如下:
xcrun simctl boot 445029B1-3728-41DF-B351-D3AFF0EC9580 --arch=x86_64
如果设备已经启动,执行这个命令会报错,错误信息如下:
杀掉设备后再执行一次,没有任何错误信息代表成功了,这个时候再启动设备验证一下,是否生效
重启刚才修改配置的设备验证
这边亲测 M1,M2都是可行,这个问题困扰我们团队已久了,大家有遇到这个问题快来试试吧!
补充知识点
xcrun simctl 命令
官方说明
Command line utility to control the Simulator
翻译过来:
控制模拟器的命令行工具
通过xcrun simctl
可以查看这个命令的说明
常用命令
- 运行
list
子命令以获取可用运行时、设备类型、设备和设备对的列表
xcrun simctl list
- 通过uuid启动设备,每个设备都有一个关联的 UDID
xcrun simctl boot $UDID
- 抓取已启动设备信息
xcrun simctl list | grep Booted
- 关闭指定设备
xcrun simctl shutdown $UDID
- 擦除指定设备
xcrun simctl erase $UDID
- 擦除所有设备
批量清理模拟器缓存很有用💪🏻,毕竟 iOS 模拟器缓存增长的速度太快了。。。
xcrun simctl erase all
- 在模拟器中打开 URL
用这个来测试deeplink,或者跳转应用非常有用 👊
xcrun simctl openurl booted "https://nshipster.com/simctl"
xcrun simctl openurl booted maps://?s=Apple+Park
更多命令
请参考下面的文章
- simctl: Control iOS Simulators from Command Line
- simctl (From nshipster by Mattt)
设备指令集
什么是设备指令集? 这个概念还蛮重要,这里找了几篇文章可以参考一下
Apple 设备的指令集和设备的对应关系,可以参考下图
设置架构命令的arch参数还支持哪些参数
将 arch
参数设置为空,执行后,系统将告诉你参数无效,并且告诉你支持的可选参数
从结果看,arch
参数支持 arm64
, x86_64
那如果想要回到默认的配置,我们可以将这个参数再设置回 arm64
,体验是不是应该回到原来有问题的版本,打开App体验一下,滚动太快的问题依然不能复现???
xcrun simctl boot 445029B1-3728-41DF-B351-D3AFF0EC9580 --arch=arm64
这个点的疑惑,哪位大佬知道原因请解答一下🙏🏻