appium-xcuitest-driver 11.2.2 → 11.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [11.2.4](https://github.com/appium/appium-xcuitest-driver/compare/v11.2.3...v11.2.4) (2026-05-08)
2
+
3
+ ### Bug Fixes
4
+
5
+ * Tunnels cleanup ([#2834](https://github.com/appium/appium-xcuitest-driver/issues/2834)) ([e17218c](https://github.com/appium/appium-xcuitest-driver/commit/e17218c49111c500bef98aeee8d3739aafdfeb24))
6
+
7
+ ## [11.2.3](https://github.com/appium/appium-xcuitest-driver/compare/v11.2.2...v11.2.3) (2026-05-07)
8
+
9
+ ### Miscellaneous Chores
10
+
11
+ * Bump appium-ios-device ([#2833](https://github.com/appium/appium-xcuitest-driver/issues/2833)) ([b3549bc](https://github.com/appium/appium-xcuitest-driver/commit/b3549bcc5e5e6809b0e7c1f19604c5a2d71693ad))
12
+
1
13
  ## [11.2.2](https://github.com/appium/appium-xcuitest-driver/compare/v11.2.1...v11.2.2) (2026-05-07)
2
14
 
3
15
  ### Bug Fixes
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "11.2.2",
3
+ "version": "11.2.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-xcuitest-driver",
9
- "version": "11.2.2",
9
+ "version": "11.2.4",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@appium/strongbox": "^1.0.0-rc.1",
13
13
  "@colors/colors": "^1.6.0",
14
- "appium-ios-device": "^3.0.0",
14
+ "appium-ios-device": "^3.1.12",
15
15
  "appium-ios-simulator": "^8.0.0",
16
16
  "appium-remote-debugger": "^15.7.3",
17
17
  "appium-webdriveragent": "^12.0.0",
@@ -35,7 +35,7 @@
35
35
  "ws": "^8.13.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@appium/docutils": "^2.0.0-rc.1",
38
+ "@appium/docutils": "^2.4.0",
39
39
  "@appium/eslint-config-appium-ts": "^3.0.0",
40
40
  "@appium/tsconfig": "^1.0.0-rc.1",
41
41
  "@appium/types": "^1.0.0-rc.1",
@@ -72,17 +72,17 @@
72
72
  }
73
73
  },
74
74
  "node_modules/@appium/base-driver": {
75
- "version": "10.5.0",
76
- "resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-10.5.0.tgz",
77
- "integrity": "sha512-i7mpN/1EkE6q6Dq7Qs9cuyJ+L7hL4Q+JPxqki/H8gBznaU/JUwPbu6uI3Wb+1Fjs32u8aDyNUCN0UHasHKWZXQ==",
75
+ "version": "10.5.2",
76
+ "resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-10.5.2.tgz",
77
+ "integrity": "sha512-nTsGHbE9fwi9BxMzD2mBv2EFZgRDAiNqZn6NMLTs1bD/lc3tNflqelq6tEVhrbHwpyWDkaorNACKNz5u/e6BEw==",
78
78
  "license": "Apache-2.0",
79
79
  "dependencies": {
80
- "@appium/support": "7.2.0",
80
+ "@appium/support": "7.2.2",
81
81
  "@appium/types": "1.4.0",
82
82
  "@colors/colors": "1.6.0",
83
83
  "async-lock": "1.4.1",
84
84
  "asyncbox": "6.2.0",
85
- "axios": "1.15.2",
85
+ "axios": "1.16.0",
86
86
  "bluebird": "3.7.2",
87
87
  "body-parser": "2.2.2",
88
88
  "express": "5.2.1",
@@ -104,72 +104,40 @@
104
104
  "spdy": "4.0.2"
105
105
  }
106
106
  },
107
- "node_modules/@appium/base-driver/node_modules/@appium/support": {
108
- "version": "7.2.0",
109
- "resolved": "https://registry.npmjs.org/@appium/support/-/support-7.2.0.tgz",
110
- "integrity": "sha512-3WgwrJc1ynpZ01niStObELDm6LyOwm94OpDwVirKqJRqQEs4aIOQxi7bDvfbTtfwbUBo2kFB1OXMcdv/+bcrrQ==",
107
+ "node_modules/@appium/base-driver/node_modules/lru-cache": {
108
+ "version": "11.3.5",
109
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz",
110
+ "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==",
111
+ "license": "BlueOak-1.0.0",
112
+ "engines": {
113
+ "node": "20 || >=22"
114
+ }
115
+ },
116
+ "node_modules/@appium/docutils": {
117
+ "version": "2.4.2",
118
+ "resolved": "https://registry.npmjs.org/@appium/docutils/-/docutils-2.4.2.tgz",
119
+ "integrity": "sha512-NV7rSZohVDFUg8+dkbU6HsGmVv6fOQV2HPmZpQH9vOtY+FdKYkMpc2PtZfC/OOvC5kT/eeXWssE5aPwujjSksg==",
111
120
  "license": "Apache-2.0",
112
121
  "dependencies": {
113
- "@appium/logger": "2.0.7",
114
- "@appium/tsconfig": "1.1.2",
115
- "@appium/types": "1.4.0",
116
- "@colors/colors": "1.6.0",
117
- "archiver": "7.0.1",
118
- "asyncbox": "6.2.0",
119
- "axios": "1.15.2",
120
- "base64-stream": "1.0.0",
121
- "bluebird": "3.7.2",
122
- "bplist-creator": "0.1.1",
123
- "bplist-parser": "0.3.2",
124
- "form-data": "4.0.5",
125
- "get-stream": "9.0.1",
126
- "glob": "13.0.5",
127
- "jsftp": "2.1.3",
128
- "klaw": "4.1.0",
129
- "lockfile": "1.0.4",
130
- "log-symbols": "7.0.1",
131
- "ncp": "2.0.0",
122
+ "@appium/support": "7.2.2",
123
+ "consola": "3.4.2",
124
+ "diff": "9.0.0",
125
+ "lilconfig": "3.1.3",
126
+ "lodash": "4.18.1",
132
127
  "package-directory": "8.2.0",
133
- "plist": "4.0.0",
134
- "pluralize": "8.0.0",
135
128
  "read-pkg": "10.1.0",
136
- "resolve-from": "5.0.0",
137
- "sanitize-filename": "1.6.4",
138
- "semver": "7.7.4",
139
- "shell-quote": "1.8.3",
140
- "supports-color": "10.2.2",
141
129
  "teen_process": "4.1.3",
142
130
  "type-fest": "5.6.0",
143
- "uuid": "14.0.0",
144
- "which": "6.0.1",
145
- "yauzl": "3.3.0"
131
+ "yaml": "2.8.4",
132
+ "yargs": "18.0.0",
133
+ "yargs-parser": "22.0.0"
134
+ },
135
+ "bin": {
136
+ "appium-docs": "bin/appium-docs.js"
146
137
  },
147
138
  "engines": {
148
139
  "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
149
140
  "npm": ">=10"
150
- },
151
- "optionalDependencies": {
152
- "sharp": "0.34.5"
153
- }
154
- },
155
- "node_modules/@appium/base-driver/node_modules/axios": {
156
- "version": "1.15.2",
157
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz",
158
- "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==",
159
- "license": "MIT",
160
- "dependencies": {
161
- "follow-redirects": "^1.15.11",
162
- "form-data": "^4.0.5",
163
- "proxy-from-env": "^2.1.0"
164
- }
165
- },
166
- "node_modules/@appium/base-driver/node_modules/lru-cache": {
167
- "version": "11.3.5",
168
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz",
169
- "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==",
170
- "license": "BlueOak-1.0.0",
171
- "engines": {
172
- "node": "20 || >=22"
173
141
  }
174
142
  },
175
143
  "node_modules/@appium/logger": {
@@ -225,9 +193,9 @@
225
193
  }
226
194
  },
227
195
  "node_modules/@appium/support": {
228
- "version": "7.2.1",
229
- "resolved": "https://registry.npmjs.org/@appium/support/-/support-7.2.1.tgz",
230
- "integrity": "sha512-cmzSPLddzHhxM9guyPM7jphotZMJ662Du055eauIZ4av4yVGeibA2MEiLnnizczHoLv1YtVnmvTsQe6Uvcmc6g==",
196
+ "version": "7.2.2",
197
+ "resolved": "https://registry.npmjs.org/@appium/support/-/support-7.2.2.tgz",
198
+ "integrity": "sha512-SfaFg0tAy0cqHQixtyB3BdZSyv287381McIq4/Zd6J070KFGNjXhF2wDGO3f2uN5VaYugwBYz/ZQEgozh6tK8g==",
231
199
  "license": "Apache-2.0",
232
200
  "dependencies": {
233
201
  "@appium/logger": "2.0.7",
@@ -583,14 +551,14 @@
583
551
  }
584
552
  },
585
553
  "node_modules/appium-ios-device": {
586
- "version": "3.1.11",
587
- "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-3.1.11.tgz",
588
- "integrity": "sha512-ccW8jAfZTtKc6mvFbbHCkVbB8/OxOdBolAB/sAHmwGl0jDrCrzMWOINkx1EdZx6QIrNPAw11Op1HibIRU66RWA==",
554
+ "version": "3.1.12",
555
+ "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-3.1.12.tgz",
556
+ "integrity": "sha512-2EEeGzWz2uDmUJftxuZ4b5DCptGqvQuND+FDMQ6p4qOpxbQX6E5HmAs0LyeepB/xAxkUP9wXZdBRl1OnrLKqvg==",
589
557
  "license": "Apache-2.0",
590
558
  "dependencies": {
591
- "@appium/support": "^7.0.0-rc.1",
559
+ "@appium/support": "^7.2.2",
592
560
  "asyncbox": "^6.0.1",
593
- "axios": "^1.6.7",
561
+ "axios": "^1.16.0",
594
562
  "bluebird": "^3.1.1",
595
563
  "bplist-creator": "^0.x",
596
564
  "bplist-parser": "^0.x",
@@ -627,12 +595,12 @@
627
595
  }
628
596
  },
629
597
  "node_modules/appium-ios-simulator": {
630
- "version": "8.1.2",
631
- "resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-8.1.2.tgz",
632
- "integrity": "sha512-rA5FXFMMPYYNqStHK9k4OBlpqiogXnHASp3QdLtDOEEzjQZMPV1QPHfeoa/W3jmlLGxICkHSdlP2NB5CbJBJmA==",
598
+ "version": "8.1.3",
599
+ "resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-8.1.3.tgz",
600
+ "integrity": "sha512-ED3dNbxTO7YC/8UNKECY2mvePELtTKp9AXj+qwccK0UOMPWLURPszB1vVmZA5UGIykyeOeHBVcKbkSk709R8Gg==",
633
601
  "license": "Apache-2.0",
634
602
  "dependencies": {
635
- "@appium/support": "^7.0.0-rc.1",
603
+ "@appium/support": "^7.2.2",
636
604
  "@xmldom/xmldom": "^0.x",
637
605
  "appium-xcode": "^6.0.0",
638
606
  "async-lock": "^1.0.0",
@@ -708,12 +676,12 @@
708
676
  }
709
677
  },
710
678
  "node_modules/appium-xcode": {
711
- "version": "6.2.1",
712
- "resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.2.1.tgz",
713
- "integrity": "sha512-vY7D7GSm/m9KvRwJjk0AP9U+hT/MRoLN5OEohC2/vvbe5hxGp2H0nhUFYal2/6VwrL5U/P1zQKEIFUe3O8g0Dw==",
679
+ "version": "6.2.2",
680
+ "resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.2.2.tgz",
681
+ "integrity": "sha512-THnFNNPW2M680OzSdyHHcvF46CusrvW+/t+zCvVA+MK/sO1AE22GIHoUScbl8HeRxVI9gf1SsXravNSh8OoNaA==",
714
682
  "license": "Apache-2.0",
715
683
  "dependencies": {
716
- "@appium/support": "^7.0.0-rc.1",
684
+ "@appium/support": "^7.2.2",
717
685
  "asyncbox": "^6.0.1",
718
686
  "semver": "^7.0.0",
719
687
  "teen_process": "^4.0.4"
@@ -1094,9 +1062,9 @@
1094
1062
  }
1095
1063
  },
1096
1064
  "node_modules/brace-expansion": {
1097
- "version": "5.0.5",
1098
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
1099
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
1065
+ "version": "5.0.6",
1066
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
1067
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
1100
1068
  "license": "MIT",
1101
1069
  "dependencies": {
1102
1070
  "balanced-match": "^4.0.2"
@@ -1222,7 +1190,6 @@
1222
1190
  "version": "9.0.1",
1223
1191
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
1224
1192
  "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
1225
- "extraneous": true,
1226
1193
  "license": "ISC",
1227
1194
  "dependencies": {
1228
1195
  "string-width": "^7.2.0",
@@ -1237,14 +1204,12 @@
1237
1204
  "version": "10.6.0",
1238
1205
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
1239
1206
  "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
1240
- "extraneous": true,
1241
1207
  "license": "MIT"
1242
1208
  },
1243
1209
  "node_modules/cliui/node_modules/string-width": {
1244
1210
  "version": "7.2.0",
1245
1211
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
1246
1212
  "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
1247
- "extraneous": true,
1248
1213
  "license": "MIT",
1249
1214
  "dependencies": {
1250
1215
  "emoji-regex": "^10.3.0",
@@ -1262,7 +1227,6 @@
1262
1227
  "version": "7.2.0",
1263
1228
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
1264
1229
  "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
1265
- "extraneous": true,
1266
1230
  "license": "MIT",
1267
1231
  "dependencies": {
1268
1232
  "ansi-regex": "^6.2.2"
@@ -1361,7 +1325,6 @@
1361
1325
  "version": "3.4.2",
1362
1326
  "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
1363
1327
  "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
1364
- "extraneous": true,
1365
1328
  "license": "MIT",
1366
1329
  "engines": {
1367
1330
  "node": "^14.18.0 || >=16.10.0"
@@ -1551,7 +1514,6 @@
1551
1514
  "version": "9.0.0",
1552
1515
  "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz",
1553
1516
  "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==",
1554
- "extraneous": true,
1555
1517
  "license": "BSD-3-Clause",
1556
1518
  "engines": {
1557
1519
  "node": ">=0.3.1"
@@ -1684,7 +1646,6 @@
1684
1646
  "version": "3.2.0",
1685
1647
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1686
1648
  "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1687
- "extraneous": true,
1688
1649
  "license": "MIT",
1689
1650
  "engines": {
1690
1651
  "node": ">=6"
@@ -1986,17 +1947,15 @@
1986
1947
  "version": "2.0.5",
1987
1948
  "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1988
1949
  "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1989
- "extraneous": true,
1990
1950
  "license": "ISC",
1991
1951
  "engines": {
1992
1952
  "node": "6.* || 8.* || >= 10.*"
1993
1953
  }
1994
1954
  },
1995
1955
  "node_modules/get-east-asian-width": {
1996
- "version": "1.5.0",
1997
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
1998
- "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
1999
- "extraneous": true,
1956
+ "version": "1.6.0",
1957
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
1958
+ "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
2000
1959
  "license": "MIT",
2001
1960
  "engines": {
2002
1961
  "node": ">=18"
@@ -2507,7 +2466,6 @@
2507
2466
  "version": "3.1.3",
2508
2467
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
2509
2468
  "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
2510
- "extraneous": true,
2511
2469
  "license": "MIT",
2512
2470
  "engines": {
2513
2471
  "node": ">=14"
@@ -2822,9 +2780,9 @@
2822
2780
  }
2823
2781
  },
2824
2782
  "node_modules/node-devicectl": {
2825
- "version": "1.3.0",
2826
- "resolved": "https://registry.npmjs.org/node-devicectl/-/node-devicectl-1.3.0.tgz",
2827
- "integrity": "sha512-BrX8w5XkqeiZHW6wbfQBTnfu9HUAb/dPdNphtmiO4xrQJQBdxB44nyhtsTHMcdLzZLJJGJhyT+YWMNudFx9/dA==",
2783
+ "version": "1.3.1",
2784
+ "resolved": "https://registry.npmjs.org/node-devicectl/-/node-devicectl-1.3.1.tgz",
2785
+ "integrity": "sha512-hjjE/1RuvQ7BnjHqTfi4yhKGVVcTo/rEPdVzj1sIIQk29cvdsa1yXqfM4v4tQNiRcL2lMMqbO1hSkCBVAJ/w1g==",
2828
2786
  "license": "Apache-2.0",
2829
2787
  "dependencies": {
2830
2788
  "@appium/logger": "^2.0.0-rc.1",
@@ -2848,9 +2806,9 @@
2848
2806
  }
2849
2807
  },
2850
2808
  "node_modules/node-simctl": {
2851
- "version": "8.2.2",
2852
- "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.2.2.tgz",
2853
- "integrity": "sha512-VdEsKHI9r1dih0UvYejNG1sFqb/EYjfr4fp5LiV3ny7PEni3j7IzYIqQzJ1XilTdI7mk8vZG7kTOKqr24OCq9Q==",
2809
+ "version": "8.2.3",
2810
+ "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.2.3.tgz",
2811
+ "integrity": "sha512-udjYoXRsApFQP0fggKwGWFWUqinJKY11zIUmMxMv8Q4sfMLV0Uu9iavRUfiB3QOmJvL4WAXTaHv+tZvkiT+nyQ==",
2854
2812
  "license": "Apache-2.0",
2855
2813
  "dependencies": {
2856
2814
  "@appium/logger": "^2.0.0-rc.1",
@@ -4331,7 +4289,6 @@
4331
4289
  "version": "9.0.2",
4332
4290
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
4333
4291
  "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
4334
- "extraneous": true,
4335
4292
  "license": "MIT",
4336
4293
  "dependencies": {
4337
4294
  "ansi-styles": "^6.2.1",
@@ -4400,14 +4357,12 @@
4400
4357
  "version": "10.6.0",
4401
4358
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
4402
4359
  "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
4403
- "extraneous": true,
4404
4360
  "license": "MIT"
4405
4361
  },
4406
4362
  "node_modules/wrap-ansi/node_modules/string-width": {
4407
4363
  "version": "7.2.0",
4408
4364
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
4409
4365
  "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
4410
- "extraneous": true,
4411
4366
  "license": "MIT",
4412
4367
  "dependencies": {
4413
4368
  "emoji-regex": "^10.3.0",
@@ -4425,7 +4380,6 @@
4425
4380
  "version": "7.2.0",
4426
4381
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
4427
4382
  "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
4428
- "extraneous": true,
4429
4383
  "license": "MIT",
4430
4384
  "dependencies": {
4431
4385
  "ansi-regex": "^6.2.2"
@@ -4477,7 +4431,6 @@
4477
4431
  "version": "5.0.8",
4478
4432
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
4479
4433
  "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
4480
- "extraneous": true,
4481
4434
  "license": "ISC",
4482
4435
  "engines": {
4483
4436
  "node": ">=10"
@@ -4487,7 +4440,6 @@
4487
4440
  "version": "2.8.4",
4488
4441
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz",
4489
4442
  "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==",
4490
- "extraneous": true,
4491
4443
  "license": "ISC",
4492
4444
  "bin": {
4493
4445
  "yaml": "bin.mjs"
@@ -4503,7 +4455,6 @@
4503
4455
  "version": "18.0.0",
4504
4456
  "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz",
4505
4457
  "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==",
4506
- "extraneous": true,
4507
4458
  "license": "MIT",
4508
4459
  "dependencies": {
4509
4460
  "cliui": "^9.0.1",
@@ -4521,7 +4472,6 @@
4521
4472
  "version": "22.0.0",
4522
4473
  "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
4523
4474
  "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
4524
- "extraneous": true,
4525
4475
  "license": "ISC",
4526
4476
  "engines": {
4527
4477
  "node": "^20.19.0 || ^22.12.0 || >=23"
@@ -4531,14 +4481,12 @@
4531
4481
  "version": "10.6.0",
4532
4482
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
4533
4483
  "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
4534
- "extraneous": true,
4535
4484
  "license": "MIT"
4536
4485
  },
4537
4486
  "node_modules/yargs/node_modules/string-width": {
4538
4487
  "version": "7.2.0",
4539
4488
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
4540
4489
  "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
4541
- "extraneous": true,
4542
4490
  "license": "MIT",
4543
4491
  "dependencies": {
4544
4492
  "emoji-regex": "^10.3.0",
@@ -4556,7 +4504,6 @@
4556
4504
  "version": "7.2.0",
4557
4505
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
4558
4506
  "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
4559
- "extraneous": true,
4560
4507
  "license": "MIT",
4561
4508
  "dependencies": {
4562
4509
  "ansi-regex": "^6.2.2"
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "11.2.2",
11
+ "version": "11.2.4",
12
12
  "author": "Appium Contributors",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -82,7 +82,7 @@
82
82
  "dependencies": {
83
83
  "@appium/strongbox": "^1.0.0-rc.1",
84
84
  "@colors/colors": "^1.6.0",
85
- "appium-ios-device": "^3.0.0",
85
+ "appium-ios-device": "^3.1.12",
86
86
  "appium-ios-simulator": "^8.0.0",
87
87
  "appium-remote-debugger": "^15.7.3",
88
88
  "appium-webdriveragent": "^12.0.0",
@@ -143,7 +143,7 @@
143
143
  "appium": "^3.0.0-rc.2"
144
144
  },
145
145
  "devDependencies": {
146
- "@appium/docutils": "^2.0.0-rc.1",
146
+ "@appium/docutils": "^2.4.0",
147
147
  "@appium/eslint-config-appium-ts": "^3.0.0",
148
148
  "@appium/tsconfig": "^1.0.0-rc.1",
149
149
  "@appium/types": "^1.0.0-rc.1",
@@ -41,6 +41,8 @@ class TunnelCreator {
41
41
  this._tunnelRegistryPort = 42314;
42
42
  /** @type {import('appium-ios-remotexpc').TunnelRegistry | null} */
43
43
  this._registry = null;
44
+ /** @type {import('appium-ios-remotexpc').TunnelRegistryServer | null} */
45
+ this._registryServer = null;
44
46
  /** @type {Map<string, import('appium-ios-remotexpc').UsbmuxDevice>} */
45
47
  this._usbDevices = new Map();
46
48
  /** @type {Map<string, Promise<void>>} */
@@ -75,6 +77,10 @@ class TunnelCreator {
75
77
  return this._registry;
76
78
  }
77
79
 
80
+ get registryServer() {
81
+ return this._registryServer;
82
+ }
83
+
78
84
  set packetStreamBasePort(port) {
79
85
  this._packetStreamBasePort = port;
80
86
  }
@@ -97,6 +103,13 @@ class TunnelCreator {
97
103
  this._registry = value;
98
104
  }
99
105
 
106
+ /**
107
+ * @param {import('appium-ios-remotexpc').TunnelRegistryServer | null} value
108
+ */
109
+ set registryServer(value) {
110
+ this._registryServer = value;
111
+ }
112
+
100
113
  /**
101
114
  * @param {number | null} maxAttempts - null disables retries; 0 means unlimited retries
102
115
  * @param {number} intervalMs
@@ -171,12 +184,29 @@ class TunnelCreator {
171
184
  async cleanup() {
172
185
  this._isCleaningUp = true;
173
186
  log.warn('Cleaning up tunnel resources...');
187
+ /** @type {Error[]} */
188
+ const cleanupErrors = [];
189
+ const recordCleanupError = (message, err) => {
190
+ const wrapped = err instanceof Error ? err : new Error(String(err));
191
+ cleanupErrors.push(new Error(message, {cause: wrapped}));
192
+ log.warn(`${message}: ${wrapped.message}`);
193
+ };
194
+
174
195
  while (this._registryWatcherStops.length > 0) {
175
196
  const stop = this._registryWatcherStops.pop();
176
197
  try {
177
198
  await stop?.();
178
199
  } catch (err) {
179
- log.warn(`Failed to stop tunnel registry watcher: ${err}`);
200
+ recordCleanupError('Failed to stop tunnel registry watcher', err);
201
+ }
202
+ }
203
+ if (this._registryServer) {
204
+ try {
205
+ await this._registryServer.stop();
206
+ } catch (err) {
207
+ recordCleanupError('Failed to stop tunnel registry server', err);
208
+ } finally {
209
+ this._registryServer = null;
180
210
  }
181
211
  }
182
212
 
@@ -194,7 +224,7 @@ class TunnelCreator {
194
224
  await server.stop();
195
225
  log.info(`Closed packet stream server for device ${udid}`);
196
226
  } catch (err) {
197
- log.warn(`Failed to close packet stream server for device ${udid}: ${err}`);
227
+ recordCleanupError(`Failed to close packet stream server for device ${udid}`, err);
198
228
  }
199
229
  }),
200
230
  );
@@ -216,9 +246,18 @@ class TunnelCreator {
216
246
  })();
217
247
 
218
248
  await Promise.allSettled([closeUsbPacketStreamServers, closeAppleTVTunnels]);
249
+ try {
250
+ await TunnelManager.closeAllTunnels();
251
+ } catch (err) {
252
+ recordCleanupError('Failed to close managed tunnel(s)', err);
253
+ }
219
254
  await Promise.allSettled([...this._reconnectTasks.values()]);
220
255
 
221
- log.info('Cleanup completed.');
256
+ if (cleanupErrors.length > 0) {
257
+ throw new AggregateError(cleanupErrors, 'Tunnel cleanup encountered errors');
258
+ } else {
259
+ log.info('Cleanup completed.');
260
+ }
222
261
  }
223
262
 
224
263
  /**
@@ -914,6 +953,9 @@ function setupCleanupHandlers(tunnelCreator) {
914
953
  await tunnelCreator.cleanup();
915
954
  } catch (err) {
916
955
  log.warn(`Error during tunnel cleanup: ${err?.message ?? err}`);
956
+ if (!process.exitCode) {
957
+ process.exitCode = 1;
958
+ }
917
959
  }
918
960
  };
919
961
 
@@ -923,7 +965,8 @@ function setupCleanupHandlers(tunnelCreator) {
923
965
  if (process.exitCode == null) {
924
966
  // Follow conventional POSIX exit codes for signals where possible.
925
967
  if (signal === 'SIGINT') {
926
- process.exitCode = 130;
968
+ // SIGINT is typically sent by Ctrl+C, so we exit with code 0 to indicate success.
969
+ process.exitCode = 0;
927
970
  } else if (signal === 'SIGTERM') {
928
971
  process.exitCode = 143;
929
972
  } else {
@@ -1093,7 +1136,10 @@ async function main() {
1093
1136
  return;
1094
1137
  }
1095
1138
 
1096
- await startTunnelRegistryServer(registry, tunnelCreator.tunnelRegistryPort);
1139
+ tunnelCreator.registryServer = await startTunnelRegistryServer(
1140
+ registry,
1141
+ tunnelCreator.tunnelRegistryPort,
1142
+ );
1097
1143
  tunnelCreator._attachTunnelRegistryLifecycleWatch(watchTunnelRegistrySockets, usbResults, {
1098
1144
  onTunnelDead: async ({udid}) => {
1099
1145
  tunnelCreator._reconnectTunnelByUdid(udid);