如何动态获取IOS模拟器设备的UID,然后在该设备上安装

How to dynamically get the UID of the IOS simulator device and then install in that device

如何动态获取IOS模拟器设备的UID,然后将其安装到该设备中。我目前有这个 BASH 脚本来完成这项工作,但是,当我 运行 在另一台机器上编写该代码时,我每次都需要手动更改 ID,这使得自动化变得困难。如何仅通过定义设备类型来获取 UID,例如 IPHONE.8 获取 ID 并使用它来代替

#!/bin/bash
export PATH=/usr/local/bin:$PATH

# define variables
DESTINATION="platform=iOS Simulator,name=iPhone 8,OS=13.4.1"
IPHONE_VERSION_ONE="iPhone-7"
APPDIR="$HOME/Library/Developer/Xcode/DerivedData/"
APP_NAME="In-House-iphonesimulator/test.app"
PHONE_ID_ONE="AB877AA-2178-4C29-BF4F-556456C"


xcrun simctl install $PHONE_ID_ONE $APP_LOCATION || { echo 'Unable to install App to Iphone7' ; exit 1; }

我也把下面的答案放在变量中,但是如何在将它存储在变量中时加上引号?

PHONE_ID="instruments -s devices | grep -m 1 "iPhone 8" | awk -F'[][]' '{print }'"

您可以获得模拟器列表及其 ID :

instruments -s devices

instruments -s devices | grep "iPhone 8" | awk -F'[][]' '{print }'

这是这个命令的作用:

  1. 列出您的所有 iOS 设备
  2. 正在搜索 iPhone 8 个结果
  3. 用方括号拆分字符串并打印第二个标记。

因此您应该只获得 UDID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

如果你的系统中有多个 iPhone8 模拟器,你可以通过在 grep 命令中添加 -m 1 键来限制输出:

instruments -s devices | grep -m 1 "iPhone 8" | awk -F'[][]' '{print }'

只需使用 $():

将此命令的结果分配给您的 PHONE_ID_ONE 变量
PHONE_ID="$(instruments -s devices | grep -m 1 'iPhone 8' | awk -F'[][]' '{print }')"

希望对您有所帮助

以 xctrace 为例

   xctrace list  devices | grep -m 1 "iPhone 12" | awk '{print substr([=10=],length([=10=])-36,36)}'

我已经使用下面的命令来获取启动模拟器的设备 ID。

xcrun simctl list devices | grep "(Booted)" | grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})"

如果有多个设备启动,我们可以通过给定的设备名称获取指定设备的id

xcrun simctl list devices | grep "(Booted)" | grep "iPhone 12" |grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})"