-
-
Save cabeca/cbaacbeb6a1cc4683aa5 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby | |
device_types_output = `xcrun simctl list devicetypes` | |
device_types = device_types_output.scan /(.*) \((.*)\)/ | |
runtimes_output = `xcrun simctl list runtimes` | |
runtimes = runtimes_output.scan /(.*) \(.*\) \((com.apple[^)]+)\)$/ | |
devices_output = `xcrun simctl list devices` | |
devices = devices_output.scan /\s\s\s\s(.*) \(([^)]+)\) (.*)/ | |
devices.each do |device| | |
puts "Removing device #{device[0]} (#{device[1]})" | |
`xcrun simctl delete #{device[1]}` | |
end | |
device_types.each do |device_type| | |
runtimes.each do |runtime| | |
puts "Creating #{device_type} with #{runtime}" | |
command = "xcrun simctl create '#{device_type[0]} #{runtime[0]}' #{device_type[1]} #{runtime[1]}" | |
command_output = `#{command}` | |
sleep 0.5 | |
end | |
end |
This fixes the duplicate Simulators problem as well. Thanks so much!
I was about to create exactly THIS, so thank you! It worked beautifully 😄 👍
This is great. Is there any way to make Xcode group the sims by iOS version? That would make it perfect.
Much ❤️!
I really needed this, thanks! One potential issue is that it doesn't name the emulators exactly as the original Xcode does, so scripts depending on them to be named a certain way might not work (saw this when using Appium). Removing " #{runtime[0]}" from line 20 does the trick.
Thanks for this great script. It helped me bring up several bad machines and saved a lot of time for my company. today i just found another way to get a clean slate for all simulators. No code is required:
- delete this entire directory ~/Library/Developer/CoreSimulator/Devices
- run
launchctl list | grep CoreSimulator
and then remove any processes from the output. For example:launchctl remove com.apple.CoreSimulator.CoreSimulatorService.117.15.1.dltcnwGXJZL4
- run
xcrun simctl list
. Setting DEVELOPER_DIR might be needed
I don't fully understand the rationale behind this but this seems to work fine for me.
The bash commands are probably simpler but you can try this for a easier yet more complex solution:
Per @saniul
gem install snapshot; snapshot reset_simulators
https://github.com/KrauseFx/snapshot
Per SO:
killall Xcode
sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
rm -rf ~/Library/Developer/CoreSimulator/Devices
open /Applications/Xcode.app
This worked brilliantly!
Awesome...it works great...thank you so much..... before I tried deleting old Xcode and install new Xcode..thinking some thing wrong with Xcode...that didn't solve the problem..but this script did.
Thank you guys! both solutions work great!
I can confirm the solution by @tinyfrog works. Thanks!
still good. thanks
You should use the --json
parameter to get machine processable output.
xcrun simctl list devices --json
In Xcode 9 Apple has changed the format of the output of xcrun simctl list runtimes
, so to get it working again you'd need to update the regexp in line 7 to:
runtimes = runtimes_output.scan /(.*) \(.*\) - (com.apple.+)$/
In 2019 (and maybe >2019) do:
device_types_output = `xcrun simctl list devicetypes`
device_types = device_types_output.scan /(.*) \((.*)\)/
runtimes_output = `xcrun simctl list runtimes`
runtimes = runtimes_output.scan /(.*) \(.*\) - (com.apple[^)]+)$/
runtimes.each do |runtime|
puts " #{runtime}"
end
devices_output = `xcrun simctl list devices`
devices = devices_output.scan /[A-Z0-9-]{36}/
devices.each do |device|
puts "Removing device #{device}"
`xcrun simctl delete #{device}`
end
device_types.each do |device_type|
runtimes.each do |runtime|
puts "Creating #{device_type} with #{runtime}"
command = "xcrun simctl create '#{device_type[0]} #{runtime[0]}' #{device_type[1]} #{runtime[1]}"
puts command
command_output = `#{command}`
sleep 0.5
end
end
Or just for erase data:
#!/usr/bin/env ruby
devices_output = `xcrun simctl list devices`
devices = devices_output.scan /[A-Z0-9-]{36}/
devices.each do |device|
puts "Erase device #{device} data"
`xcrun simctl erase #{device}`
end
Warning: This is completely untested. It will REMOVE all your simulators along with all settings and installed Apps. It worked for me to create the initial set of simulators.
Updated version for Xcode 7 here: https://gist.github.com/cabeca/3ff77007204e5479f7af