@@ -7,6 +7,8 @@ if File.exist?(enterprise)
77 import enterprise
88end
99
10+ simulator_version = "26.0"
11+
1012before_all do
1113 xcversion ( version : "~> 26.0.0" )
1214
@@ -20,7 +22,7 @@ lane :unit_tests do |options|
2022
2123 run_tests (
2224 scheme : "UnitTests" ,
23- device : "iPhone 17 (26.0 )" ,
25+ device : "iPhone 17 (#{ simulator_version } )" ,
2426 ensure_devices_found : true ,
2527 result_bundle : true ,
2628 number_of_retries : 3 ,
@@ -29,14 +31,13 @@ lane :unit_tests do |options|
2931
3032 if !options [ :skip_previews ]
3133 create_simulator_if_necessary (
32- name : "iPhone-SE-3rd-generation-26.0" ,
33- type : "com.apple.CoreSimulator.SimDeviceType.iPhone-SE-3rd-generation" ,
34- runtime : "com.apple.CoreSimulator.SimRuntime.iOS-26-0"
34+ name : "iPhone SE (3rd generation)" ,
35+ type : "com.apple.CoreSimulator.SimDeviceType.iPhone-SE-3rd-generation"
3536 )
3637
3738 run_tests (
3839 scheme : "PreviewTests" ,
39- device : "iPhone-SE- 3rd- generation-26.0 (26.0 )" ,
40+ device : "iPhone SE ( 3rd generation) ( #{ simulator_version } )" ,
4041 ensure_devices_found : true ,
4142 result_bundle : true ,
4243 number_of_retries : 3 ,
@@ -56,16 +57,14 @@ lane :ui_tests do |options|
5657
5758 create_simulator_if_necessary (
5859 name : "iPhone-26.0" ,
59- type : "com.apple.CoreSimulator.SimDeviceType.iPhone-17" ,
60- runtime : "com.apple.CoreSimulator.SimRuntime.iOS-26-0"
60+ type : "com.apple.CoreSimulator.SimDeviceType.iPhone-17"
6161 )
6262 elsif options [ :device ] == "iPad"
6363 device = "iPad-26.0"
6464
6565 create_simulator_if_necessary (
6666 name : "iPad-26.0" ,
67- type : "com.apple.CoreSimulator.SimDeviceType.iPad-A16" ,
68- runtime : "com.apple.CoreSimulator.SimRuntime.iOS-26-0"
67+ type : "com.apple.CoreSimulator.SimDeviceType.iPad-A16"
6968 )
7069 else
7170 UI . user_error! ( "Please supply a device argument as device:iPhone or device:iPad" )
@@ -81,7 +80,7 @@ lane :ui_tests do |options|
8180
8281 run_tests (
8382 scheme : "UITests" ,
84- device : device ,
83+ device : " #{ device } ( #{ simulator_version } )" ,
8584 ensure_devices_found : true ,
8685 prelaunch_simulator : false ,
8786 result_bundle : true ,
@@ -96,7 +95,7 @@ lane :accessibility_tests do |options|
9695
9796 run_tests (
9897 scheme : "AccessibilityTests" ,
99- device : "iPhone 17 (26.0 )" ,
98+ device : "iPhone 17 (#{ simulator_version } )" ,
10099 ensure_devices_found : true ,
101100 prelaunch_simulator : false ,
102101 result_bundle : true ,
@@ -108,18 +107,12 @@ end
108107
109108lane :integration_tests do
110109 clear_derived_data ( )
111-
112- create_simulator_if_necessary (
113- name : "iPhone-26.0" ,
114- type : "com.apple.CoreSimulator.SimDeviceType.iPhone-17-Pro" ,
115- runtime : "com.apple.CoreSimulator.SimRuntime.iOS-26-0"
116- )
117110
118111 reset_simulator = ENV . key? ( 'CI' )
119112
120113 run_tests (
121114 scheme : "IntegrationTests" ,
122- device : "iPhone-26.0 " ,
115+ device : "iPhone 17 ( #{ simulator_version } ) " ,
123116 ensure_devices_found : true ,
124117 result_bundle : true ,
125118 reset_simulator : reset_simulator
@@ -321,15 +314,23 @@ private_lane :create_simulator_if_necessary do |options|
321314
322315 simulator_type = options [ :type ]
323316 UI . user_error! ( "Invalid simulator type" ) unless !simulator_type . to_s . empty?
324-
325- simulator_runtime = options [ :runtime ]
326- UI . user_error! ( "Invalid simulator runtime" ) unless !simulator_runtime . to_s . empty?
327317
318+ simulator_runtime = "com.apple.CoreSimulator.SimRuntime.iOS-#{ simulator_version . gsub ( '.' , '-' ) } "
328319
320+ simulators = sh ( "xcrun simctl list devices \" iOS #{ simulator_version } \" available" )
329321 # Use a `(` here to avoid matching `iPhone 14 Pro` on `iPhone 14 Pro Max` for example
330- begin sh ( "xcrun simctl list devices | grep '#{ simulator_name } ('" )
331- UI . success "Simulator already exists"
332- rescue
333- sh ( "xcrun simctl create '#{ simulator_name } ' #{ simulator_type } #{ simulator_runtime } " )
322+ existing_simulator = simulators . lines . find { |line | line . include? ( "#{ simulator_name } (" ) }
323+
324+ if existing_simulator
325+ UI . message ( "Found simulator: #{ existing_simulator . inspect } " )
326+ device_id = existing_simulator . match ( /\( ([A-F0-9-]+)\) / ) [ 1 ] # Extract the device ID for the existing simulator
327+ else
328+ UI . message "Simulator #{ simulator_name } not found. Creating new simulator…"
329+ create_command = "xcrun simctl create '#{ simulator_name } \' #{ simulator_type } #{ simulator_runtime } "
330+ device_id = sh ( create_command ) . strip # Create a new simulator and get its device ID.
331+
332+ UI . message "Created new simulator: #{ simulator_name } (#{ device_id } )"
334333 end
334+
335+ # device_id is unused right now but is useful to check e.g. the boot status of a simulator.
335336end
0 commit comments