File tree Expand file tree Collapse file tree 1 file changed +13
-0
lines changed Expand file tree Collapse file tree 1 file changed +13
-0
lines changed Original file line number Diff line number Diff line change 3535
3636lane :create_simulators do
3737 require 'json'
38+ require 'set'
3839
3940 # map Fastfile platform keys to display names used by CoreSimulator runtimes
4041 platforms_to_os = {
@@ -50,10 +51,16 @@ lane :create_simulators do
5051 list = JSON . parse ( list_json )
5152 devtypes = list [ "devicetypes" ] || [ ]
5253 runtimes = list [ "runtimes" ] || [ ]
54+
55+ # Build a set of existing simulator names to prevent duplicates
56+ devices_json = sh ( "xcrun simctl list -j devices" , log : false )
57+ devices_list = JSON . parse ( devices_json )
58+ existing_names = ( devices_list [ "devices" ] || { } ) . values . flatten . map { |d | d [ "name" ] } . compact . to_set
5359 rescue => e
5460 UI . message ( "Failed to read simctl lists: #{ e } " )
5561 devtypes = [ ]
5662 runtimes = [ ]
63+ existing_names = Set . new
5764 end
5865
5966 device_name_to_id = devtypes . each_with_object ( { } ) do |dt , h |
@@ -103,7 +110,13 @@ lane :create_simulators do
103110
104111 sim_name = descriptor # keep the nice human-readable name
105112
113+ if existing_names . include? ( sim_name )
114+ UI . message ( "Already exists: #{ sim_name } , skipping" )
115+ next
116+ end
117+
106118 sh ( %(xcrun simctl create "#{ sim_name } " "#{ device_type_id } " "#{ runtime_id } " || true) )
119+ existing_names . add ( sim_name )
107120 rescue => e
108121 UI . message ( "Skipping #{ descriptor } : #{ e } " )
109122 end
You can’t perform that action at this time.
0 commit comments