如何为所有模拟器启用/禁用“显示为运行目标”

时间:2018-06-11 11:44:46

标签: xcode ios-simulator

是否可以为多个iOS模拟器切换“显示为运行目标”标志,而不是在“设备和模拟器”窗口中逐个更改? 是否有命令行用于此目的?

enter image description here

1 个答案:

答案 0 :(得分:10)

我决定自己使用fswatch找到它。顺便说一句,它对这种情况非常有用。通过在切换" 显示为运行目标"时监控文件的更改。 flag,我发现Xcode正在更改 ~/Library/Preferences/com.apple.dt.Xcode.plist 文件

经过一些分析后,我注意到我需要改变的关键,以实现我的想法。关键是 DVTIgnoredDevices ,它包含一系列模拟器。因此,Xcode中将忽略该列表中的每个模拟器UUID。

现在,我可以使用defaults命令行工具更改DVTIgnoredDevices密钥,指定所需的值类型:

  

-array 允许用户将数组指定为给定首选项键的值:

defaults write somedomain preferenceKey -array element1 element2 element3
     

如果在写入时键存在,则指定的数组会覆盖键的值。如果密钥不存在,则使用新值创建。

示例:

defaults write com.apple.dt.Xcode DVTIgnoredDevices '(
  "80E16DBC-2FE5-48AC-8A44-1F5DEFA00EA7",
  "B8C4D5FF-8F1A-4895-BD16-CCAFECD71098"
)'

设置DVTIgnoredDevices密钥后,需要清除DerivedData文件夹并重新启动Xcode。要清除DerivedData文件夹,请参阅this回答或只需运行快捷方式shift+alt+cmd+k(这就是我通常所做的事情)。

在Xcode版本9.4(9F1027a)上测试。

<强>更新

我通常喜欢在列表中只有几个模拟器,因此我决定使用instruments -s devices执行脚本并将所有当前模拟器添加到DVTIgnoredDevices键。然后我选择了哪个模拟器将会显示

<强> Xcode-hide-all-iPhone-simulators.sh

simulatorsIdentifiers=$(instruments -s devices |
  grep -o "iPhone .* (.*) \[.*\]" | #only iPhone
  grep -o "\[.*\]" | #only UUID
  sed "s/^\[\(.*\)\]$/\1/" | #remove square brackets
  sed 's/^/"/;$!s/$/"/;$s/$/"/' | #add quotes
  sed '$!s/$/,/' #add comma to separate each element
)

arrayOfSimulatorsIdentifiers=($(echo "$simulatorsIdentifiers" | tr ',' '\n'))

# Add simulators to DVTIgnoredDevices
echo "${#arrayOfSimulatorsIdentifiers[@]}"
for index in "${!arrayOfSimulatorsIdentifiers[@]}"
do
    echo "$index Adding: ${arrayOfSimulatorsIdentifiers[index]}"
done

defaults write com.apple.dt.Xcode DVTIgnoredDevices -array ${arrayOfSimulatorsIdentifiers[@]}

Gist file