解决 Apple M1/M2 iOS模拟器上列表滚动过快问题,终于有方案了!

595 阅读3分钟

sung-jin-cho-NBVi9zj2egU-unsplash.jpg

背景

Apple M1, M2 等系列芯片的电脑,在 iOS 模拟器上滑动列表页面,滑动会比真机快,让列表的内容定位变得异常困难。

补充一点,在真机上无论是 iOS 还是 Android 滑动的速度都是正常的。

方案

获取当前电脑的设备列表

xcrun simctl list

下面是这个命令完整的输出,内容有点长,可以不看,直接往下看 code-snapshot.png

剔除了部分干扰信息后,找到我们的设备,我当前用的设备是iPhone 14 (iOS 16.1) image.png

可以看到 == Devices == 区域下面的设备和我们当前iOS模拟器的可用设备是一一对应的 image.png

在这个表里面找到我们当前设备的id,这里是445029B1-3728-41DF-B351-D3AFF0EC9580 对应的状态是已启动(Booted)就是 image.png

更新指定设备启动架构配置

xcrun simctl boot [deviceID] --arch=x86_64

[deviceID] 就是来自上面的设备id,这里已经获取到,带 入最终要执行的命令如下:

xcrun simctl boot 445029B1-3728-41DF-B351-D3AFF0EC9580 --arch=x86_64

如果设备已经启动,执行这个命令会报错,错误信息如下:

image.png

杀掉设备后再执行一次,没有任何错误信息代表成功了,这个时候再启动设备验证一下,是否生效

image.png

重启刚才修改配置的设备验证

这边亲测 M1,M2都是可行,这个问题困扰我们团队已久了,大家有遇到这个问题快来试试吧!

参考:stackoverflow.com/questions/6…

补充知识点

xcrun simctl 命令

官方说明

Command line utility to control the Simulator

翻译过来:

控制模拟器的命令行工具

通过xcrun simctl可以查看这个命令的说明

image.png

常用命令

  • 运行list子命令以获取可用运行时、设备类型、设备和设备对的列表
xcrun simctl list
  • 通过uuid启动设备,每个设备都有一个关联的 UDID
xcrun simctl boot $UDID
  • 抓取已启动设备信息
xcrun simctl list | grep Booted

image.png

  • 关闭指定设备
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

更多命令

请参考下面的文章

设备指令集

什么是设备指令集? 这个概念还蛮重要,这里找了几篇文章可以参考一下

Apple 设备的指令集和设备的对应关系,可以参考下图

image.png

设置架构命令的arch参数还支持哪些参数

arch 参数设置为空,执行后,系统将告诉你参数无效,并且告诉你支持的可选参数 image.png

从结果看,arch 参数支持 arm64, x86_64

那如果想要回到默认的配置,我们可以将这个参数再设置回 arm64 ,体验是不是应该回到原来有问题的版本,打开App体验一下,滚动太快的问题依然不能复现???

xcrun simctl boot 445029B1-3728-41DF-B351-D3AFF0EC9580 --arch=arm64

这个点的疑惑,哪位大佬知道原因请解答一下🙏🏻 image.png