答案 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[@]}