appium-xcuitest-driver 12.14.1 → 12.15.0
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 +6 -0
- package/build/lib/device/wda-host-ops.js +3 -0
- package/build/lib/device/wda-host-ops.js.map +1 -1
- package/lib/device/wda-host-ops.ts +3 -0
- package/node_modules/appium-ios-remotexpc/CHANGELOG.md +8 -0
- package/node_modules/appium-ios-remotexpc/package.json +3 -3
- package/node_modules/appium-ios-tuntap/CHANGELOG.md +7 -0
- package/node_modules/appium-ios-tuntap/lib/src/TunTap.d.ts.map +1 -1
- package/node_modules/appium-ios-tuntap/lib/src/TunTap.js +5 -7
- package/node_modules/appium-ios-tuntap/lib/src/TunTap.js.map +1 -1
- package/node_modules/appium-ios-tuntap/package.json +2 -2
- package/node_modules/appium-ios-tuntap/prebuilds/darwin-arm64/appium-ios-tuntap.node +0 -0
- package/node_modules/appium-ios-tuntap/prebuilds/linux-arm64/appium-ios-tuntap.node +0 -0
- package/node_modules/appium-ios-tuntap/prebuilds/linux-x64/appium-ios-tuntap.node +0 -0
- package/node_modules/appium-ios-tuntap/prebuilds/win32-x64/appium-ios-tuntap.node +0 -0
- package/node_modules/appium-ios-tuntap/src/TunTap.ts +5 -9
- package/node_modules/appium-ios-tuntap/src/native/tun_backend.h +8 -1
- package/node_modules/appium-ios-tuntap/src/native/tun_backend_darwin.cc +16 -10
- package/node_modules/appium-ios-tuntap/src/native/tun_backend_linux.cc +11 -7
- package/node_modules/appium-ios-tuntap/src/native/tun_backend_windows.cc +14 -11
- package/node_modules/appium-ios-tuntap/src/tuntap.cc +37 -2
- package/node_modules/appium-remote-debugger/CHANGELOG.md +8 -0
- package/node_modules/appium-remote-debugger/package.json +3 -3
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [12.15.0](https://github.com/appium/appium-xcuitest-driver/compare/v12.14.1...v12.15.0) (2026-10-03)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* support launching WDA on Duo ([#3000](https://github.com/appium/appium-xcuitest-driver/issues/3000)) ([a097de0](https://github.com/appium/appium-xcuitest-driver/commit/a097de0798995ffff1ee40882bab6a0e6eb430dd))
|
|
6
|
+
|
|
1
7
|
## [12.14.1](https://github.com/appium/appium-xcuitest-driver/compare/v12.14.0...v12.14.1) (2026-10-03)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -94,9 +94,12 @@ function stringifyLaunchEnvironment(env) {
|
|
|
94
94
|
function createSimulatorHostOps(driver) {
|
|
95
95
|
return {
|
|
96
96
|
async launchPreinstalled({ bundleId, env }) {
|
|
97
|
+
// XCTest backgrounds a foreground runner with a Home-button press, which can
|
|
98
|
+
// stall on iPhone Duo. Start in the background, as xcodebuild does.
|
|
97
99
|
await driver.device.launchApp(bundleId, {
|
|
98
100
|
environment: stringifyLaunchEnvironment(env),
|
|
99
101
|
terminateExisting: true,
|
|
102
|
+
activateSuspended: true,
|
|
100
103
|
});
|
|
101
104
|
},
|
|
102
105
|
async terminate({ bundleId }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wda-host-ops.js","sourceRoot":"","sources":["../../../lib/device/wda-host-ops.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wda-host-ops.js","sourceRoot":"","sources":["../../../lib/device/wda-host-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,9 +148,12 @@ function stringifyLaunchEnvironment(env: WdaLaunchEnvironment): Record<string, s
|
|
|
148
148
|
function createSimulatorHostOps(driver: XCUITestDriver): SimulatorHostOps {
|
|
149
149
|
return {
|
|
150
150
|
async launchPreinstalled({bundleId, env}) {
|
|
151
|
+
// XCTest backgrounds a foreground runner with a Home-button press, which can
|
|
152
|
+
// stall on iPhone Duo. Start in the background, as xcodebuild does.
|
|
151
153
|
await (driver.device as Simulator).launchApp(bundleId, {
|
|
152
154
|
environment: stringifyLaunchEnvironment(env),
|
|
153
155
|
terminateExisting: true,
|
|
156
|
+
activateSuspended: true,
|
|
154
157
|
});
|
|
155
158
|
},
|
|
156
159
|
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [5.24.5](https://github.com/appium/appium-ios/compare/appium-ios-remotexpc@5.24.4...appium-ios-remotexpc@5.24.5) (2026-10-03)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package appium-ios-remotexpc
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [5.24.4](https://github.com/appium/appium-ios/compare/appium-ios-remotexpc@5.24.3...appium-ios-remotexpc@5.24.4) (2026-10-03)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package appium-ios-remotexpc
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-ios-remotexpc",
|
|
3
|
-
"version": "5.24.
|
|
3
|
+
"version": "5.24.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"bugs": {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"@appium/strongbox": "^2.0.0",
|
|
94
94
|
"@appium/support": "^7.2.6",
|
|
95
95
|
"@xmldom/xmldom": "^0.x",
|
|
96
|
-
"appium-ios-tuntap": "^2.2.
|
|
96
|
+
"appium-ios-tuntap": "^2.2.5",
|
|
97
97
|
"async-lock": "^1.4.1",
|
|
98
98
|
"axios": "^1.18.0",
|
|
99
99
|
"commander": "^14.0.1",
|
|
@@ -114,5 +114,5 @@
|
|
|
114
114
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
115
115
|
"npm": ">=10"
|
|
116
116
|
},
|
|
117
|
-
"gitHead": "
|
|
117
|
+
"gitHead": "bd9ba5fd86b87035b15023ae46d3bcec928266b5"
|
|
118
118
|
}
|
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.2.5](https://github.com/appium/appium-ios/compare/appium-ios-tuntap@2.2.4...appium-ios-tuntap@2.2.5) (2026-10-03)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* classify TunTap.open() errors by errno code instead of message text ([#34](https://github.com/appium/appium-ios/issues/34)) ([2663782](https://github.com/appium/appium-ios/commit/266378211eaf7629d8e154fa3f35eb5a41e77eb5))
|
|
11
|
+
|
|
12
|
+
|
|
6
13
|
## [2.2.4](https://github.com/appium/appium-ios/compare/appium-ios-tuntap@2.2.3...appium-ios-tuntap@2.2.4) (2026-10-03)
|
|
7
14
|
|
|
8
15
|
### Bug Fixes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TunTap.d.ts","sourceRoot":"","sources":["../../src/TunTap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,oBAAoB,EAAiB,MAAM,qBAAqB,CAAC;AAwC9E;;;;GAIG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAU;IAE3B;;;OAGG;gBACS,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B;IAO3E,sFAAsF;IACtF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,gFAAgF;IAChF,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,0DAA0D;IAC1D,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,kEAAkE;IAClE,IAAI,EAAE,IAAI,MAAM,CAEf;IAQD;;;;;;;OAOG;IACH,IAAI,IAAI,OAAO;
|
|
1
|
+
{"version":3,"file":"TunTap.d.ts","sourceRoot":"","sources":["../../src/TunTap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,oBAAoB,EAAiB,MAAM,qBAAqB,CAAC;AAwC9E;;;;GAIG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAU;IAE3B;;;OAGG;gBACS,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B;IAO3E,sFAAsF;IACtF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,gFAAgF;IAChF,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,0DAA0D;IAC1D,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,kEAAkE;IAClE,IAAI,EAAE,IAAI,MAAM,CAEf;IAQD;;;;;;;OAOG;IACH,IAAI,IAAI,OAAO;IAuBf;;;;;OAKG;IACH,KAAK,IAAI,OAAO;IAiBhB;;;;;;;;;OASG;IACH,IAAI,CAAC,OAAO,GAAE,MAAiC,GAAG,MAAM;IAgBxD;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAsB3B;;;;;;;;OAQG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1E;;;;;;OAMG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlD;;;;;;OAMG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrD;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAa/C;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}
|
|
@@ -78,20 +78,18 @@ export class TunTap {
|
|
|
78
78
|
}
|
|
79
79
|
if (!this._isOpen) {
|
|
80
80
|
try {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
throw new TunTapDeviceError('Failed to open TUN device');
|
|
84
|
-
}
|
|
81
|
+
// Native open() throws on failure; it never returns false.
|
|
82
|
+
this.device.open();
|
|
85
83
|
}
|
|
86
84
|
catch (err) {
|
|
87
85
|
const message = err.message ?? '';
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
message.includes('sudo')) {
|
|
86
|
+
const code = err.code;
|
|
87
|
+
if (code === 'EACCES' || code === 'EPERM') {
|
|
91
88
|
throw new TunTapPermissionError(message, { cause: err });
|
|
92
89
|
}
|
|
93
90
|
throw new TunTapDeviceError(message, { cause: err });
|
|
94
91
|
}
|
|
92
|
+
this._isOpen = true;
|
|
95
93
|
openDevices.add(this);
|
|
96
94
|
}
|
|
97
95
|
return this._isOpen;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TunTap.js","sourceRoot":"","sources":["../../src/TunTap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAClF,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AAGnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,4DAA4D;AAC5F,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,OAAO,GAAG,IAAI,CAAC;AAkBrB,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAuB,CAAC;AAEnF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AAEtC,wEAAwE;AACxE,2EAA2E;AAC3E,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;IACxB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,OAAO,MAAM;IACA,MAAM,CAAkB;IACxB,eAAe,CAAiB;IACzC,OAAO,CAAU;IACjB,SAAS,CAAU;IAE3B;;;OAGG;IACH,YAAY,OAAe,EAAE,EAAE,WAA4B,OAAO,CAAC,QAAQ;QACzE,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,sFAAsF;IACtF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,gFAAgF;IAChF,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,kEAAkE;IAClE,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,uEAAuE;IACvE,IAAI,gBAAgB;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CAAC,+CAA+C,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,
|
|
1
|
+
{"version":3,"file":"TunTap.js","sourceRoot":"","sources":["../../src/TunTap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-ios-tuntap",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.5",
|
|
4
4
|
"description": "Native TUN/TAP interface module for Node.js",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/appium/appium-ios/issues"
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"npm": ">=10"
|
|
62
62
|
},
|
|
63
63
|
"gypfile": true,
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "bd9ba5fd86b87035b15023ae46d3bcec928266b5"
|
|
65
65
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -108,21 +108,17 @@ export class TunTap {
|
|
|
108
108
|
|
|
109
109
|
if (!this._isOpen) {
|
|
110
110
|
try {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
throw new TunTapDeviceError('Failed to open TUN device');
|
|
114
|
-
}
|
|
111
|
+
// Native open() throws on failure; it never returns false.
|
|
112
|
+
this.device.open();
|
|
115
113
|
} catch (err: unknown) {
|
|
116
114
|
const message = (err as Error).message ?? '';
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
message.includes('Operation not permitted') ||
|
|
120
|
-
message.includes('sudo')
|
|
121
|
-
) {
|
|
115
|
+
const code = (err as NodeJS.ErrnoException).code;
|
|
116
|
+
if (code === 'EACCES' || code === 'EPERM') {
|
|
122
117
|
throw new TunTapPermissionError(message, {cause: err});
|
|
123
118
|
}
|
|
124
119
|
throw new TunTapDeviceError(message, {cause: err});
|
|
125
120
|
}
|
|
121
|
+
this._isOpen = true;
|
|
126
122
|
openDevices.add(this);
|
|
127
123
|
}
|
|
128
124
|
return this._isOpen;
|
|
@@ -25,6 +25,13 @@ enum class ReadPacketStatus : std::uint8_t {
|
|
|
25
25
|
Error,
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
+
// Failure reported by `TunPlatformBackend::OpenDevice`.
|
|
29
|
+
struct TunError {
|
|
30
|
+
std::string message;
|
|
31
|
+
// POSIX errno behind the failure (Windows maps the Win32 error), or 0 when there is no OS cause.
|
|
32
|
+
int sys_errno = 0;
|
|
33
|
+
};
|
|
34
|
+
|
|
28
35
|
/**
|
|
29
36
|
* Backend abstraction that hides OS-specific TUN device handling from the
|
|
30
37
|
* N-API surface. Each backend owns its native handle (POSIX file descriptor
|
|
@@ -34,7 +41,7 @@ class TunPlatformBackend {
|
|
|
34
41
|
public:
|
|
35
42
|
virtual ~TunPlatformBackend() = default;
|
|
36
43
|
|
|
37
|
-
virtual bool OpenDevice(const std::string& requested_name, std::string& out_interface_name,
|
|
44
|
+
virtual bool OpenDevice(const std::string& requested_name, std::string& out_interface_name, TunError& error) = 0;
|
|
38
45
|
virtual void CloseDevice() = 0;
|
|
39
46
|
[[nodiscard]] virtual bool IsOpen() const = 0;
|
|
40
47
|
|
|
@@ -30,17 +30,19 @@ class DarwinTunBackend : public PosixTunBackend {
|
|
|
30
30
|
public:
|
|
31
31
|
static constexpr size_t kUtunHeaderSize = 4;
|
|
32
32
|
|
|
33
|
-
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name,
|
|
33
|
+
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name, TunError& error) override {
|
|
34
34
|
struct ctl_info ctl_info {};
|
|
35
35
|
struct sockaddr_ctl socket_addr {};
|
|
36
36
|
|
|
37
37
|
FileDescriptor temp_fd(socket(PF_SYSTEM, SOCK_DGRAM, SYSPROTO_CONTROL));
|
|
38
38
|
if (!temp_fd.is_valid()) {
|
|
39
|
-
error =
|
|
39
|
+
error.sys_errno = errno;
|
|
40
|
+
error.message = std::string("Failed to create control socket: ") + strerror(error.sys_errno);
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
42
43
|
if (fcntl(temp_fd.get(), F_SETFD, FD_CLOEXEC) < 0) {
|
|
43
|
-
error =
|
|
44
|
+
error.sys_errno = errno;
|
|
45
|
+
error.message = std::string("Failed to set close-on-exec on control socket: ") + strerror(error.sys_errno);
|
|
44
46
|
return false;
|
|
45
47
|
}
|
|
46
48
|
|
|
@@ -49,7 +51,8 @@ class DarwinTunBackend : public PosixTunBackend {
|
|
|
49
51
|
ctl_info.ctl_name[sizeof(ctl_info.ctl_name) - 1] = '\0';
|
|
50
52
|
|
|
51
53
|
if (ioctl(temp_fd.get(), CTLIOCGINFO, &ctl_info) < 0) {
|
|
52
|
-
error =
|
|
54
|
+
error.sys_errno = errno;
|
|
55
|
+
error.message = std::string("Failed to get utun control info: ") + strerror(error.sys_errno);
|
|
53
56
|
return false;
|
|
54
57
|
}
|
|
55
58
|
|
|
@@ -63,7 +66,8 @@ class DarwinTunBackend : public PosixTunBackend {
|
|
|
63
66
|
if (utun_unit > 0) {
|
|
64
67
|
socket_addr.sc_unit = utun_unit;
|
|
65
68
|
if (connect(temp_fd.get(), reinterpret_cast<struct sockaddr*>(&socket_addr), sizeof(socket_addr)) < 0) {
|
|
66
|
-
error =
|
|
69
|
+
error.sys_errno = errno;
|
|
70
|
+
error.message = std::string("Failed to connect to utun with specified unit: ") + strerror(error.sys_errno);
|
|
67
71
|
return false;
|
|
68
72
|
}
|
|
69
73
|
} else if (!ConnectFirstAvailableUnit(temp_fd.get(), socket_addr, error)) {
|
|
@@ -73,11 +77,12 @@ class DarwinTunBackend : public PosixTunBackend {
|
|
|
73
77
|
std::array<char, 20> interface_name{};
|
|
74
78
|
socklen_t interface_name_len = interface_name.size();
|
|
75
79
|
if (getsockopt(temp_fd.get(), SYSPROTO_CONTROL, UTUN_OPT_IFNAME, interface_name.data(), &interface_name_len) < 0) {
|
|
76
|
-
error =
|
|
80
|
+
error.sys_errno = errno;
|
|
81
|
+
error.message = std::string("Failed to get utun interface name: ") + strerror(error.sys_errno);
|
|
77
82
|
return false;
|
|
78
83
|
}
|
|
79
84
|
|
|
80
|
-
if (!SetNonBlocking(temp_fd.get(), error)) {
|
|
85
|
+
if (!SetNonBlocking(temp_fd.get(), error.message)) {
|
|
81
86
|
return false;
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -159,18 +164,19 @@ class DarwinTunBackend : public PosixTunBackend {
|
|
|
159
164
|
}
|
|
160
165
|
}
|
|
161
166
|
|
|
162
|
-
static bool ConnectFirstAvailableUnit(int fd, struct sockaddr_ctl& socket_addr,
|
|
167
|
+
static bool ConnectFirstAvailableUnit(int fd, struct sockaddr_ctl& socket_addr, TunError& error) {
|
|
163
168
|
for (socket_addr.sc_unit = 1; socket_addr.sc_unit < 255; socket_addr.sc_unit++) {
|
|
164
169
|
if (connect(fd, reinterpret_cast<struct sockaddr*>(&socket_addr), sizeof(socket_addr)) == 0) {
|
|
165
170
|
return true;
|
|
166
171
|
}
|
|
167
172
|
if (errno != EBUSY) {
|
|
168
|
-
error =
|
|
173
|
+
error.sys_errno = errno;
|
|
174
|
+
error.message = std::string("Failed to connect to utun control socket: ") + strerror(error.sys_errno);
|
|
169
175
|
return false;
|
|
170
176
|
}
|
|
171
177
|
}
|
|
172
178
|
|
|
173
|
-
error = "Could not find an available utun device";
|
|
179
|
+
error.message = "Could not find an available utun device";
|
|
174
180
|
return false;
|
|
175
181
|
}
|
|
176
182
|
|
|
@@ -24,10 +24,11 @@ constexpr const char* kTunDevicePath = "/dev/net/tun";
|
|
|
24
24
|
|
|
25
25
|
class LinuxTunBackend : public PosixTunBackend {
|
|
26
26
|
public:
|
|
27
|
-
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name,
|
|
27
|
+
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name, TunError& error) override {
|
|
28
28
|
struct stat statbuf {};
|
|
29
29
|
if (stat(kTunDevicePath, &statbuf) != 0) {
|
|
30
|
-
error =
|
|
30
|
+
error.sys_errno = errno;
|
|
31
|
+
error.message =
|
|
31
32
|
"TUN/TAP device not available: /dev/net/tun does not exist. "
|
|
32
33
|
"Please ensure the TUN/TAP kernel module is loaded (modprobe tun).";
|
|
33
34
|
return false;
|
|
@@ -35,9 +36,11 @@ class LinuxTunBackend : public PosixTunBackend {
|
|
|
35
36
|
|
|
36
37
|
FileDescriptor temp_fd(open(kTunDevicePath, O_RDWR | O_CLOEXEC));
|
|
37
38
|
if (!temp_fd.is_valid()) {
|
|
38
|
-
error =
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
error.sys_errno = errno;
|
|
40
|
+
error.message = std::string("Failed to open ") + kTunDevicePath + ": " + strerror(error.sys_errno);
|
|
41
|
+
if (error.sys_errno == EACCES || error.sys_errno == EPERM) {
|
|
42
|
+
error.message += ". Try running with sudo or add your user to the 'tun' group.";
|
|
43
|
+
}
|
|
41
44
|
return false;
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -51,11 +54,12 @@ class LinuxTunBackend : public PosixTunBackend {
|
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
if (ioctl(temp_fd.get(), TUNSETIFF, &ifr) < 0) {
|
|
54
|
-
error =
|
|
57
|
+
error.sys_errno = errno;
|
|
58
|
+
error.message = std::string("Failed to configure TUN device: ") + strerror(error.sys_errno);
|
|
55
59
|
return false;
|
|
56
60
|
}
|
|
57
61
|
|
|
58
|
-
if (!SetNonBlocking(temp_fd.get(), error)) {
|
|
62
|
+
if (!SetNonBlocking(temp_fd.get(), error.message)) {
|
|
59
63
|
return false;
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include <windows.h>
|
|
6
6
|
|
|
7
7
|
#include <atomic>
|
|
8
|
+
#include <cerrno>
|
|
8
9
|
#include <chrono>
|
|
9
10
|
#include <cstdint>
|
|
10
11
|
#include <cstring>
|
|
@@ -41,23 +42,22 @@ class WindowsTunBackend : public TunPlatformBackend {
|
|
|
41
42
|
WindowsTunBackend(WindowsTunBackend&&) = delete;
|
|
42
43
|
WindowsTunBackend& operator=(WindowsTunBackend&&) = delete;
|
|
43
44
|
|
|
44
|
-
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name,
|
|
45
|
+
bool OpenDevice(const std::string& requested_name, std::string& out_interface_name, TunError& error) override {
|
|
45
46
|
auto& api = WintunApi::Instance();
|
|
46
|
-
if (!api.Load(error)) {
|
|
47
|
+
if (!api.Load(error.message)) {
|
|
47
48
|
return false;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
std::wstring adapter_name = requested_name.empty() ? BuildDefaultAdapterName() : Utf8ToUtf16(requested_name);
|
|
51
52
|
if (adapter_name.empty()) {
|
|
52
|
-
error = "Failed to encode adapter name as UTF-16";
|
|
53
|
+
error.message = "Failed to encode adapter name as UTF-16";
|
|
53
54
|
return false;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
// Creating or opening a WinTun adapter requires the process to run with
|
|
57
58
|
// administrator privileges (elevated). Without elevation `CreateAdapter`
|
|
58
|
-
// fails with ERROR_ACCESS_DENIED, which
|
|
59
|
-
//
|
|
60
|
-
// POSIX backends.
|
|
59
|
+
// fails with ERROR_ACCESS_DENIED, which is reported as EPERM below. This
|
|
60
|
+
// mirrors the root (EUID 0) requirement of the POSIX backends.
|
|
61
61
|
//
|
|
62
62
|
// Prefer creating a fresh adapter: `WintunCloseAdapter` removes only
|
|
63
63
|
// adapters this process created. One obtained through the `OpenAdapter`
|
|
@@ -68,22 +68,25 @@ class WindowsTunBackend : public TunPlatformBackend {
|
|
|
68
68
|
adapter_ = api.OpenAdapter(adapter_name.c_str());
|
|
69
69
|
if (adapter_ == nullptr) {
|
|
70
70
|
DWORD opened_err = ::GetLastError();
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
if (created_err == ERROR_ACCESS_DENIED || opened_err == ERROR_ACCESS_DENIED) {
|
|
72
|
+
error.sys_errno = EPERM;
|
|
73
|
+
}
|
|
74
|
+
error.message = "Failed to create or open WinTun adapter: create failed with " + FormatLastError(created_err) +
|
|
75
|
+
"; open failed with " + FormatLastError(opened_err);
|
|
73
76
|
return false;
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
session_ = api.StartSession(adapter_, kSessionCapacity);
|
|
78
81
|
if (session_ == nullptr) {
|
|
79
|
-
error = "Failed to start WinTun session: " + FormatLastError(::GetLastError());
|
|
82
|
+
error.message = "Failed to start WinTun session: " + FormatLastError(::GetLastError());
|
|
80
83
|
CloseAdapterInternal();
|
|
81
84
|
return false;
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
read_event_ = api.GetReadWaitEvent(session_);
|
|
85
88
|
if (read_event_ == nullptr) {
|
|
86
|
-
error = "Failed to acquire WinTun read-wait event: " + FormatLastError(::GetLastError());
|
|
89
|
+
error.message = "Failed to acquire WinTun read-wait event: " + FormatLastError(::GetLastError());
|
|
87
90
|
EndSessionInternal();
|
|
88
91
|
CloseAdapterInternal();
|
|
89
92
|
return false;
|
|
@@ -91,7 +94,7 @@ class WindowsTunBackend : public TunPlatformBackend {
|
|
|
91
94
|
|
|
92
95
|
interface_name_ = Utf16ToUtf8(adapter_name);
|
|
93
96
|
if (interface_name_.empty()) {
|
|
94
|
-
error = "Failed to encode adapter name as UTF-8";
|
|
97
|
+
error.message = "Failed to encode adapter name as UTF-8";
|
|
95
98
|
EndSessionInternal();
|
|
96
99
|
CloseAdapterInternal();
|
|
97
100
|
return false;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include <napi.h>
|
|
2
2
|
|
|
3
|
+
#include <cerrno>
|
|
3
4
|
#include <memory>
|
|
4
5
|
#include <mutex>
|
|
5
6
|
#include <string>
|
|
@@ -10,6 +11,36 @@
|
|
|
10
11
|
|
|
11
12
|
namespace {
|
|
12
13
|
|
|
14
|
+
// Node.js-style `err.code` for the errno behind a backend failure, or nullptr when unmapped.
|
|
15
|
+
const char* ErrnoCode(int sys_errno) {
|
|
16
|
+
switch (sys_errno) {
|
|
17
|
+
case EACCES:
|
|
18
|
+
return "EACCES";
|
|
19
|
+
case EBUSY:
|
|
20
|
+
return "EBUSY";
|
|
21
|
+
case EINVAL:
|
|
22
|
+
return "EINVAL";
|
|
23
|
+
case EMFILE:
|
|
24
|
+
return "EMFILE";
|
|
25
|
+
case ENFILE:
|
|
26
|
+
return "ENFILE";
|
|
27
|
+
case ENOBUFS:
|
|
28
|
+
return "ENOBUFS";
|
|
29
|
+
case ENODEV:
|
|
30
|
+
return "ENODEV";
|
|
31
|
+
case ENOENT:
|
|
32
|
+
return "ENOENT";
|
|
33
|
+
case ENOMEM:
|
|
34
|
+
return "ENOMEM";
|
|
35
|
+
case ENXIO:
|
|
36
|
+
return "ENXIO";
|
|
37
|
+
case EPERM:
|
|
38
|
+
return "EPERM";
|
|
39
|
+
default:
|
|
40
|
+
return nullptr;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
13
44
|
class TunDevice : public Napi::ObjectWrap<TunDevice> {
|
|
14
45
|
public:
|
|
15
46
|
static Napi::Object Init(Napi::Env env, Napi::Object exports);
|
|
@@ -86,10 +117,14 @@ Napi::Value TunDevice::Open(const Napi::CallbackInfo& info) {
|
|
|
86
117
|
return Napi::Boolean::New(env, false);
|
|
87
118
|
}
|
|
88
119
|
|
|
89
|
-
|
|
120
|
+
TunError error;
|
|
90
121
|
std::string assigned_name;
|
|
91
122
|
if (!backend_->OpenDevice(requested_name_, assigned_name, error)) {
|
|
92
|
-
Napi::Error::New(env, error
|
|
123
|
+
Napi::Error js_error = Napi::Error::New(env, error.message);
|
|
124
|
+
if (const char* code = ErrnoCode(error.sys_errno); code != nullptr) {
|
|
125
|
+
js_error.Set("code", Napi::String::New(env, code));
|
|
126
|
+
}
|
|
127
|
+
js_error.ThrowAsJavaScriptException();
|
|
93
128
|
return Napi::Boolean::New(env, false);
|
|
94
129
|
}
|
|
95
130
|
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [17.5.7](https://github.com/appium/appium-ios/compare/appium-remote-debugger@17.5.6...appium-remote-debugger@17.5.7) (2026-10-03)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package appium-remote-debugger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [17.5.6](https://github.com/appium/appium-ios/compare/appium-remote-debugger@17.5.5...appium-remote-debugger@17.5.6) (2026-10-03)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package appium-remote-debugger
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-remote-debugger",
|
|
3
|
-
"version": "17.5.
|
|
3
|
+
"version": "17.5.7",
|
|
4
4
|
"description": "Appium proxy for Remote Debugger protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"appium"
|
|
@@ -86,11 +86,11 @@
|
|
|
86
86
|
"sinon": "^22.0.0"
|
|
87
87
|
},
|
|
88
88
|
"optionalDependencies": {
|
|
89
|
-
"appium-ios-remotexpc": "^5.24.
|
|
89
|
+
"appium-ios-remotexpc": "^5.24.5"
|
|
90
90
|
},
|
|
91
91
|
"engines": {
|
|
92
92
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
93
93
|
"npm": ">=10"
|
|
94
94
|
},
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "bd9ba5fd86b87035b15023ae46d3bcec928266b5"
|
|
96
96
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-xcuitest-driver",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.15.0",
|
|
4
4
|
"description": "Appium driver for iOS using XCUITest for backend",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"appium",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@colors/colors": "1.6.1",
|
|
48
48
|
"appium-ios-device": "3.1.24",
|
|
49
49
|
"appium-ios-simulator": "10.7.0",
|
|
50
|
-
"appium-remote-debugger": "17.5.
|
|
50
|
+
"appium-remote-debugger": "17.5.7",
|
|
51
51
|
"appium-webdriveragent": "16.13.6",
|
|
52
52
|
"appium-xcode": "7.2.3",
|
|
53
53
|
"async-lock": "1.4.1",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"appium": "^3.0.0-rc.2"
|
|
69
69
|
},
|
|
70
70
|
"optionalDependencies": {
|
|
71
|
-
"appium-ios-remotexpc": "5.24.
|
|
71
|
+
"appium-ios-remotexpc": "5.24.5",
|
|
72
72
|
"sharp": "0.35.5"
|
|
73
73
|
},
|
|
74
74
|
"engines": {
|