如何通过命令行/脚本控制iOS模拟器切换「Freeway Drive」模式?
嘿,这个问题我之前折腾定位自动化测试的时候刚好踩过坑!其实xcrun simctl的能力比你想的要全,控制「Freeway Drive」高速行驶模拟的功能,就藏在它的location子命令里,不用找第三方工具,一条命令就能搞定。
下面给你一步步拆解操作:
第一步:先锁定目标模拟器的标识符
如果你同时运行多个模拟器,得先指定操作哪一个。用这条命令可以列出所有可用模拟器:xcrun simctl list devices输出里会显示每个模拟器的名称、UDID(唯一标识符)和状态(比如
Booted代表正在运行)。你可以直接用名称或者UDID来指定目标,UDID更不容易重名出错,比如ABC123-4567-890D-EFGH-IJKL12345678。
要是只想快速找到正在运行的模拟器,加个过滤更高效:xcrun simctl list devices | grep Booted第二步:一键切换到Freeway Drive模式
直接用simctl location的simulate子命令,传入模拟器标识符和「Freeway Drive」场景名称即可:# 用UDID指定模拟器的例子 xcrun simctl location ABC123-4567-890D-EFGH-IJKL12345678 simulate "Freeway Drive" # 用模拟器名称指定的例子(比如你的模拟器叫"iPhone 15") xcrun simctl location "iPhone 15" simulate "Freeway Drive"执行完这条命令,你打开模拟器里的定位类APP,就能看到位置在模拟高速路持续移动的状态了。
额外实用操作:停止模拟/切换其他场景
要是想停止定位模拟,用这条命令:xcrun simctl location <模拟器标识符> stop另外苹果还内置了其他预设模拟场景,比如「City Bicycle Ride」「Run」,把命令里的场景名称换成对应字符串就能直接切换,用法完全一致。
脚本自动化小技巧
如果你想写脚本自动处理,不用手动复制UDID,可以用命令直接捕获正在运行的模拟器UDID:BOOTED_SIM_UDID=$(xcrun simctl list devices | grep Booted | awk -F'[^0-9A-F-]+' '{print $2}') xcrun simctl location $BOOTED_SIM_UDID simulate "Freeway Drive"这样脚本就能自动识别当前运行的模拟器,不用每次手动修改参数~
我自己做定位相关的自动化测试时一直用这套命令,亲测在Xcode 14+的版本上都稳定可用,你可以放心试试!
备注:内容来源于stack exchange,提问作者infoMining

