Skip to content

Commit 010500a

Browse files
authored
Stop repeating the simulator version throughout the Fastfile. (#4677)
1 parent 9338916 commit 010500a

File tree

1 file changed

+26
-25
lines changed

1 file changed

+26
-25
lines changed

fastlane/Fastfile

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ if File.exist?(enterprise)
77
import enterprise
88
end
99

10+
simulator_version = "26.0"
11+
1012
before_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

109108
lane :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.
335336
end

0 commit comments

Comments
 (0)