appium-xcuitest-driver 12.13.0 → 12.13.1

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,9 @@
1
+ ## [12.13.1](https://github.com/appium/appium-xcuitest-driver/compare/v12.13.0...v12.13.1) (2026-09-20)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **opts:** pass `ActivateSuspended: true` to host opts for backgrounding WDA ([#2980](https://github.com/appium/appium-xcuitest-driver/issues/2980)) ([78361a2](https://github.com/appium/appium-xcuitest-driver/commit/78361a2cad2e66a34f64272113f519a35ce24407))
6
+
1
7
  ## [12.13.0](https://github.com/appium/appium-xcuitest-driver/compare/v12.12.6...v12.13.0) (2026-09-20)
2
8
 
3
9
  ### Features
@@ -105,11 +105,13 @@ function createSimulatorHostOps(driver) {
105
105
  };
106
106
  }
107
107
  /**
108
- * `devicectl device process launch` starts the XCTest runner as a plain app process, without the
109
- * testmanagerd/DVT test-session handshake that RemoteXPC's process control provides. Starting with
110
- * the iOS/tvOS 27 DDI/XCTest stack, the runner launched that way fails to background itself and
111
- * never starts its HTTP server, so devicectl is no longer a reliable launch fallback there (see
112
- * appium/appium#22636). It remains a reasonable fallback for older platforms.
108
+ * An XCTest runner started in the foreground has to press the Home button to background itself
109
+ * before running UI tests. With the Xcode 27 DDI/XCTest stack that synthesized press is ignored on
110
+ * older iOS versions, so the runner exits with "Failed to background test runner" and never starts
111
+ * its HTTP server (see appium/appium#22636 and #2978). RemoteXPC's process control launches the
112
+ * runner directly in the background, like Xcode does, which skips that step. `devicectl` always
113
+ * brings the runner to the foreground, so it is no longer a reliable launch fallback on
114
+ * iOS/tvOS 27+. It remains a reasonable fallback for older platforms.
113
115
  */
114
116
  function createRealDevicePreinstalledHostOps(driver) {
115
117
  return {
@@ -121,6 +123,7 @@ function createRealDevicePreinstalledHostOps(driver) {
121
123
  bundleId,
122
124
  environment: stringifyLaunchEnvironment(env),
123
125
  killExisting: true,
126
+ extraOptions: { ActivateSuspended: true },
124
127
  });
125
128
  }
126
129
  finally {
@@ -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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"}
@@ -161,11 +161,13 @@ function createSimulatorHostOps(driver: XCUITestDriver): SimulatorHostOps {
161
161
  }
162
162
 
163
163
  /**
164
- * `devicectl device process launch` starts the XCTest runner as a plain app process, without the
165
- * testmanagerd/DVT test-session handshake that RemoteXPC's process control provides. Starting with
166
- * the iOS/tvOS 27 DDI/XCTest stack, the runner launched that way fails to background itself and
167
- * never starts its HTTP server, so devicectl is no longer a reliable launch fallback there (see
168
- * appium/appium#22636). It remains a reasonable fallback for older platforms.
164
+ * An XCTest runner started in the foreground has to press the Home button to background itself
165
+ * before running UI tests. With the Xcode 27 DDI/XCTest stack that synthesized press is ignored on
166
+ * older iOS versions, so the runner exits with "Failed to background test runner" and never starts
167
+ * its HTTP server (see appium/appium#22636 and #2978). RemoteXPC's process control launches the
168
+ * runner directly in the background, like Xcode does, which skips that step. `devicectl` always
169
+ * brings the runner to the foreground, so it is no longer a reliable launch fallback on
170
+ * iOS/tvOS 27+. It remains a reasonable fallback for older platforms.
169
171
  */
170
172
  function createRealDevicePreinstalledHostOps(driver: XCUITestDriver): RealDevicePreinstalledHostOps {
171
173
  return {
@@ -179,6 +181,7 @@ function createRealDevicePreinstalledHostOps(driver: XCUITestDriver): RealDevice
179
181
  bundleId,
180
182
  environment: stringifyLaunchEnvironment(env),
181
183
  killExisting: true,
184
+ extraOptions: {ActivateSuspended: true},
182
185
  });
183
186
  } finally {
184
187
  await dvt.dvtService.close();
@@ -1,3 +1,9 @@
1
+ ## [2.0.12](https://github.com/appium/appium-ios-tuntap/compare/v2.0.11...v2.0.12) (2026-09-20)
2
+
3
+ ### Bug Fixes
4
+
5
+ * report a peer hangup during TLS connect as a closed connection, not a timeout ([#113](https://github.com/appium/appium-ios-tuntap/issues/113)) ([f489d18](https://github.com/appium/appium-ios-tuntap/commit/f489d18c4b65f7104e17f3e6d82b10ff094943c5))
6
+
1
7
  ## [2.0.11](https://github.com/appium/appium-ios-tuntap/compare/v2.0.10...v2.0.11) (2026-09-18)
2
8
 
3
9
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-ios-tuntap",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "Native TUN/TAP interface module for Node.js",
5
5
  "bugs": {
6
6
  "url": "https://github.com/appium/appium-ios-tuntap/issues"
@@ -119,7 +119,9 @@ std::string DescribeConnectFailure(int ssl_error) {
119
119
  return "SSL_connect failed: ssl_error=" + std::to_string(ssl_error) + " system_error=" + std::to_string(system_error);
120
120
  }
121
121
 
122
- bool PollConnectFd(int fd, short events, std::chrono::steady_clock::time_point deadline) {
122
+ enum class PollConnectResult : std::uint8_t { Ready, Timeout, Hangup };
123
+
124
+ PollConnectResult PollConnectFd(int fd, short events, std::chrono::steady_clock::time_point deadline) {
123
125
  #ifdef _WIN32
124
126
  WSAPOLLFD pfd{};
125
127
  pfd.fd = static_cast<SOCKET>(fd);
@@ -132,7 +134,7 @@ bool PollConnectFd(int fd, short events, std::chrono::steady_clock::time_point d
132
134
  for (;;) {
133
135
  const Clock::time_point now = Clock::now();
134
136
  if (now >= deadline) {
135
- return false;
137
+ return PollConnectResult::Timeout;
136
138
  }
137
139
  const auto remaining_ms = std::chrono::duration_cast<std::chrono::milliseconds>(deadline - now).count();
138
140
  const int timeout_ms = remaining_ms > 5000 ? 5000 : static_cast<int>(remaining_ms);
@@ -147,9 +149,9 @@ bool PollConnectFd(int fd, short events, std::chrono::steady_clock::time_point d
147
149
  | POLLNVAL
148
150
  #endif
149
151
  )) != 0) {
150
- return false;
152
+ return PollConnectResult::Hangup;
151
153
  }
152
- return (pfd.revents & events) != 0;
154
+ return (pfd.revents & events) != 0 ? PollConnectResult::Ready : PollConnectResult::Timeout;
153
155
  }
154
156
  if (rc == 0) {
155
157
  continue;
@@ -161,8 +163,21 @@ bool PollConnectFd(int fd, short events, std::chrono::steady_clock::time_point d
161
163
  #endif
162
164
  continue;
163
165
  }
164
- return false;
166
+ return PollConnectResult::Timeout;
167
+ }
168
+ }
169
+
170
+ /** Waits for `events` during SSL_connect; on failure sets `error` naming a timeout or a dropped peer. */
171
+ bool WaitForConnectIo(int fd, short events, const char* direction, std::chrono::steady_clock::time_point deadline,
172
+ std::string& error) {
173
+ const PollConnectResult result = PollConnectFd(fd, events, deadline);
174
+ if (result == PollConnectResult::Ready) {
175
+ return true;
165
176
  }
177
+ error = result == PollConnectResult::Hangup
178
+ ? std::string("SSL_connect failed: connection closed by peer while waiting to ") + direction
179
+ : std::string("SSL_connect timed out waiting to ") + direction;
180
+ return false;
166
181
  }
167
182
 
168
183
  } // namespace
@@ -231,15 +246,13 @@ bool TunnelSslClient::ConnectTls(int timeout_ms, std::string& error) {
231
246
  }
232
247
  const int err = SSL_get_error(ssl_, rc);
233
248
  if (err == SSL_ERROR_WANT_READ) {
234
- if (!PollConnectFd(owned_fd_, kPollIn, connect_deadline)) {
235
- error = "SSL_connect timed out waiting to read";
249
+ if (!WaitForConnectIo(owned_fd_, kPollIn, "read", connect_deadline, error)) {
236
250
  return false;
237
251
  }
238
252
  continue;
239
253
  }
240
254
  if (err == SSL_ERROR_WANT_WRITE) {
241
- if (!PollConnectFd(owned_fd_, kPollOut, connect_deadline)) {
242
- error = "SSL_connect timed out waiting to write";
255
+ if (!WaitForConnectIo(owned_fd_, kPollOut, "write", connect_deadline, error)) {
243
256
  return false;
244
257
  }
245
258
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "12.13.0",
3
+ "version": "12.13.1",
4
4
  "description": "Appium driver for iOS using XCUITest for backend",
5
5
  "keywords": [
6
6
  "appium",