Skip to content

Commit f2ab588

Browse files
committed
Add patch for handling empty simulator lists.
1 parent 1640499 commit f2ab588

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

patch/Python/Python.patch

+46-3
Original file line numberDiff line numberDiff line change
@@ -1270,10 +1270,53 @@ index c3e261ecd9e..26ef7a95de4 100644
12701270
<array>
12711271
<string>iPhoneOS</string>
12721272
diff --git a/iOS/testbed/__main__.py b/iOS/testbed/__main__.py
1273-
index b4499f5ac17..08fbe90a1c6 100644
1273+
index b4499f5ac17..d12a5ab065b 100644
12741274
--- a/iOS/testbed/__main__.py
12751275
+++ b/iOS/testbed/__main__.py
1276-
@@ -230,33 +230,69 @@
1276+
@@ -82,19 +82,29 @@
1277+
1278+
# Return a list of UDIDs associated with booted simulators
1279+
async def list_devices():
1280+
- # List the testing simulators, in JSON format
1281+
- raw_json = await async_check_output(
1282+
- "xcrun", "simctl", "--set", "testing", "list", "-j"
1283+
- )
1284+
- json_data = json.loads(raw_json)
1285+
-
1286+
- # Filter out the booted iOS simulators
1287+
- return [
1288+
- simulator["udid"]
1289+
- for runtime, simulators in json_data["devices"].items()
1290+
- for simulator in simulators
1291+
- if runtime.split(".")[-1].startswith("iOS") and simulator["state"] == "Booted"
1292+
- ]
1293+
+ try:
1294+
+ # List the testing simulators, in JSON format
1295+
+ raw_json = await async_check_output(
1296+
+ "xcrun", "simctl", "--set", "testing", "list", "-j"
1297+
+ )
1298+
+ json_data = json.loads(raw_json)
1299+
+
1300+
+ # Filter out the booted iOS simulators
1301+
+ return [
1302+
+ simulator["udid"]
1303+
+ for runtime, simulators in json_data["devices"].items()
1304+
+ for simulator in simulators
1305+
+ if runtime.split(".")[-1].startswith("iOS") and simulator["state"] == "Booted"
1306+
+ ]
1307+
+ except subprocess.CalledProcessError as e:
1308+
+ # If there's no ~/Library/Developer/XCTestDevices folder (which is the
1309+
+ # case on fresh installs, and in some CI environments), `simctl list`
1310+
+ # returns error code 1, rather than an empty list. Handle that case,
1311+
+ # but raise all other errors.
1312+
+ if e.returncode == 1:
1313+
+ return []
1314+
+ else:
1315+
+ raise
1316+
1317+
1318+
async def find_device(initial_devices):
1319+
@@ -230,33 +240,69 @@
12771320
shutil.copytree(source, target, symlinks=True)
12781321
print(" done")
12791322

@@ -1350,7 +1393,7 @@ index b4499f5ac17..08fbe90a1c6 100644
13501393

13511394
for app_src in apps:
13521395
print(f" Installing app {app_src.name!r}...", end="", flush=True)
1353-
@@ -372,8 +408,8 @@
1396+
@@ -372,8 +418,8 @@
13541397

13551398
if context.subcommand == "clone":
13561399
clone_testbed(

0 commit comments

Comments
 (0)