appium-xcuitest-driver 11.7.6 → 11.8.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 CHANGED
@@ -1,3 +1,15 @@
1
+ ## [11.8.0](https://github.com/appium/appium-xcuitest-driver/compare/v11.7.7...v11.8.0) (2026-06-02)
2
+
3
+ ### Features
4
+
5
+ * **app:** use zip_conduit service for IPA installation/upgrade ([#2860](https://github.com/appium/appium-xcuitest-driver/issues/2860)) ([308ccfd](https://github.com/appium/appium-xcuitest-driver/commit/308ccfd1851a7bad1e0ae709aef617b32e07c922))
6
+
7
+ ## [11.7.7](https://github.com/appium/appium-xcuitest-driver/compare/v11.7.6...v11.7.7) (2026-06-01)
8
+
9
+ ### Miscellaneous Chores
10
+
11
+ * Tune AFC performance logging ([#2858](https://github.com/appium/appium-xcuitest-driver/issues/2858)) ([03a9145](https://github.com/appium/appium-xcuitest-driver/commit/03a91454a8db7571e401bd9dc6d42aae4552133a))
12
+
1
13
  ## [11.7.6](https://github.com/appium/appium-xcuitest-driver/compare/v11.7.5...v11.7.6) (2026-05-31)
2
14
 
3
15
  ### Miscellaneous Chores
@@ -3,10 +3,11 @@ import type { ContainerObject, ContainerRootSupplier } from './types';
3
3
  /**
4
4
  * Parses the actual path and the bundle identifier from the given path string.
5
5
  *
6
+ * @param driver - The driver instance
6
7
  * @param remotePath - Path string matching `CONTAINER_PATH_PATTERN`, e.g. `@bundle.id:container/relative/path`
7
8
  * @param containerRootSupplier - Container root path supplier or explicit root
8
9
  */
9
- export declare function parseContainerPath(this: XCUITestDriver, remotePath: string, containerRootSupplier?: ContainerRootSupplier | string): Promise<ContainerObject>;
10
+ export declare function parseContainerPath(driver: XCUITestDriver, remotePath: string, containerRootSupplier?: ContainerRootSupplier | string): Promise<ContainerObject>;
10
11
  /**
11
12
  * Pushes the given data to a file on the remote device.
12
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"file-movement.d.ts","sourceRoot":"","sources":["../../../lib/commands/file-movement.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AA+BpE;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,MAAM,GACrD,OAAO,CAAC,eAAe,CAAC,CAkC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GACrC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9F;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1F;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhG"}
1
+ {"version":3,"file":"file-movement.d.ts","sourceRoot":"","sources":["../../../lib/commands/file-movement.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AA+BpE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,MAAM,GACrD,OAAO,CAAC,eAAe,CAAC,CAkC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GACrC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9F;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1F;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhG"}
@@ -31,10 +31,11 @@ const OBJECT_NOT_FOUND_ERROR_MESSAGE = 'OBJECT_NOT_FOUND';
31
31
  /**
32
32
  * Parses the actual path and the bundle identifier from the given path string.
33
33
  *
34
+ * @param driver - The driver instance
34
35
  * @param remotePath - Path string matching `CONTAINER_PATH_PATTERN`, e.g. `@bundle.id:container/relative/path`
35
36
  * @param containerRootSupplier - Container root path supplier or explicit root
36
37
  */
37
- async function parseContainerPath(remotePath, containerRootSupplier) {
38
+ async function parseContainerPath(driver, remotePath, containerRootSupplier) {
38
39
  const match = CONTAINER_PATH_PATTERN.exec(remotePath);
39
40
  if (!match) {
40
41
  throw new Error(`It is expected that package identifier ` +
@@ -50,7 +51,7 @@ async function parseContainerPath(remotePath, containerRootSupplier) {
50
51
  if (typeSeparatorPos > 0) {
51
52
  if (typeSeparatorPos < bundleId.length - 1) {
52
53
  containerType = bundleId.substring(typeSeparatorPos + 1);
53
- this.log.debug(`Parsed container type: ${containerType}`);
54
+ driver.log.debug(`Parsed container type: ${containerType}`);
54
55
  }
55
56
  // Always strip the colon and everything after it
56
57
  bundleId = bundleId.substring(0, typeSeparatorPos);
@@ -217,12 +218,12 @@ function verifyIsSubPath(originalPath, root) {
217
218
  /**
218
219
  * Create AFC client for file operations
219
220
  */
220
- async function createAfcClient(opts = {}) {
221
+ async function createAfcClient(driver, opts = {}) {
221
222
  const { bundleId, containerType } = opts;
222
- const udid = this.device.udid;
223
- const useIos18 = (0, helpers_1.isIos18OrNewer)(this.opts);
223
+ const udid = driver.device.udid;
224
+ const useIos18 = (0, helpers_1.isIos18OrNewer)(driver.opts);
224
225
  if (bundleId) {
225
- const skipDocumentsCheck = this.settings.getSettings().skipDocumentsContainerCheck ?? false;
226
+ const skipDocumentsCheck = driver.settings.getSettings().skipDocumentsContainerCheck ?? false;
226
227
  return await afc_client_1.AfcClient.createForApp(udid, bundleId, useIos18, {
227
228
  containerType: containerType ?? null,
228
229
  skipDocumentsCheck,
@@ -233,10 +234,10 @@ async function createAfcClient(opts = {}) {
233
234
  /**
234
235
  * Create service for file operations
235
236
  */
236
- async function createService(remotePath) {
237
+ async function createService(driver, remotePath) {
237
238
  if (CONTAINER_PATH_PATTERN.test(remotePath)) {
238
- const { bundleId, pathInContainer, containerType } = await parseContainerPath.bind(this)(remotePath);
239
- const client = await createAfcClient.bind(this)({ bundleId, containerType });
239
+ const { bundleId, pathInContainer, containerType } = await parseContainerPath(driver, remotePath);
240
+ const client = await createAfcClient(driver, { bundleId, containerType });
240
241
  let relativePath = isDocumentsContainer(containerType)
241
242
  ? node_path_1.default.join(CONTAINER_DOCUMENTS_PATH, pathInContainer)
242
243
  : pathInContainer;
@@ -246,7 +247,7 @@ async function createService(remotePath) {
246
247
  }
247
248
  return { client, relativePath };
248
249
  }
249
- const client = await createAfcClient.bind(this)({});
250
+ const client = await createAfcClient(driver, {});
250
251
  return { client, relativePath: remotePath };
251
252
  }
252
253
  /**
@@ -261,7 +262,7 @@ async function pushFileToSimulator(remotePath, base64Data) {
261
262
  const buffer = Buffer.from(base64Data, 'base64');
262
263
  const device = this.device;
263
264
  if (CONTAINER_PATH_PATTERN.test(remotePath)) {
264
- const { bundleId, pathInContainer: dstPath } = await parseContainerPath.bind(this)(remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
265
+ const { bundleId, pathInContainer: dstPath } = await parseContainerPath(this, remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
265
266
  this.log.info(`Parsed bundle identifier '${bundleId}' from '${remotePath}'. ` +
266
267
  `Will put the data into '${dstPath}'`);
267
268
  if (!(await support_1.fs.exists(node_path_1.default.dirname(dstPath)))) {
@@ -290,9 +291,11 @@ async function pushFileToSimulator(remotePath, base64Data) {
290
291
  * @param base64Data - Base-64 encoded content of the file to be uploaded.
291
292
  */
292
293
  async function pushFileToRealDevice(remotePath, base64Data) {
293
- const { client, relativePath } = await createService.bind(this)(remotePath);
294
+ const { client, relativePath } = await createService(this, remotePath);
294
295
  try {
295
- await (0, real_device_management_1.pushFile)(client, Buffer.from(base64Data, 'base64'), relativePath);
296
+ await (0, real_device_management_1.pushFile)(client, Buffer.from(base64Data, 'base64'), relativePath, {
297
+ log: this.log,
298
+ });
296
299
  }
297
300
  catch (e) {
298
301
  this.log.debug(e.stack);
@@ -319,7 +322,7 @@ async function pullFromSimulator(remotePath, isFile) {
319
322
  let pathOnServer;
320
323
  const device = this.device;
321
324
  if (CONTAINER_PATH_PATTERN.test(remotePath)) {
322
- const { bundleId, pathInContainer: dstPath } = await parseContainerPath.bind(this)(remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
325
+ const { bundleId, pathInContainer: dstPath } = await parseContainerPath(this, remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
323
326
  this.log.info(`Parsed bundle identifier '${bundleId}' from '${remotePath}'. ` +
324
327
  `Will get the data from '${dstPath}'`);
325
328
  pathOnServer = dstPath;
@@ -359,7 +362,7 @@ async function pullFromSimulator(remotePath, isFile) {
359
362
  * @returns Base-64 encoded content of the remote file
360
363
  */
361
364
  async function pullFromRealDevice(remotePath, isFile) {
362
- const { client, relativePath } = await createService.bind(this)(remotePath);
365
+ const { client, relativePath } = await createService(this, remotePath);
363
366
  try {
364
367
  // Check if path is a directory
365
368
  const isDirectory = await client.isDirectory(relativePath);
@@ -370,8 +373,8 @@ async function pullFromRealDevice(remotePath, isFile) {
370
373
  throw new Error(`The requested path is not a folder. Path: '${remotePath}'`);
371
374
  }
372
375
  return isDirectory
373
- ? (await (0, real_device_management_1.pullFolder)(client, relativePath)).toString()
374
- : (await (0, real_device_management_1.pullFile)(client, relativePath)).toString('base64');
376
+ ? (await (0, real_device_management_1.pullFolder)(client, relativePath, { log: this.log })).toString()
377
+ : (await (0, real_device_management_1.pullFile)(client, relativePath, { log: this.log })).toString('base64');
375
378
  }
376
379
  finally {
377
380
  await client.close();
@@ -392,7 +395,7 @@ async function deleteFromSimulator(remotePath) {
392
395
  let pathOnServer;
393
396
  const device = this.device;
394
397
  if (CONTAINER_PATH_PATTERN.test(remotePath)) {
395
- const { bundleId, pathInContainer: dstPath } = await parseContainerPath.bind(this)(remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
398
+ const { bundleId, pathInContainer: dstPath } = await parseContainerPath(this, remotePath, async (appBundle, containerType) => await device.simctl.getAppContainer(appBundle, containerType));
396
399
  this.log.info(`Parsed bundle identifier '${bundleId}' from '${remotePath}'. ` +
397
400
  `'${dstPath}' will be deleted`);
398
401
  pathOnServer = dstPath;
@@ -427,7 +430,7 @@ async function deleteFromSimulator(remotePath) {
427
430
  * @returns Nothing
428
431
  */
429
432
  async function deleteFromRealDevice(remotePath) {
430
- const { client, relativePath } = await createService.bind(this)(remotePath);
433
+ const { client, relativePath } = await createService(this, remotePath);
431
434
  try {
432
435
  await client.deleteDirectory(relativePath);
433
436
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-movement.js","sourceRoot":"","sources":["../../../lib/commands/file-movement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-movement.js","sourceRoot":"","sources":["../../../lib/commands/file-movement.ts"],"names":[],"mappings":"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"}
@@ -4,16 +4,23 @@ import type { XCUITestDriver, XCUITestDriverOpts } from '../driver';
4
4
  import { AfcClient } from './afc-client';
5
5
  export declare const IO_TIMEOUT_MS: number;
6
6
  export declare const MAX_IO_CHUNK_SIZE = 8;
7
- export interface PushFileOptions {
7
+ export interface AfcTransferOptions {
8
+ log?: AppiumLogger;
9
+ }
10
+ export interface PushFileOptions extends AfcTransferOptions {
8
11
  /** The maximum count of milliseconds to wait until file push is completed. Cannot be lower than 60000ms */
9
12
  timeoutMs?: number;
10
13
  }
11
- export interface PushFolderOptions {
14
+ export interface PushFolderOptions extends AfcTransferOptions {
12
15
  /** The maximum timeout to wait until a single file is copied */
13
16
  timeoutMs?: number;
14
17
  /** Whether to push files in parallel. This usually gives better performance, but might sometimes be less stable. */
15
18
  enableParallelPush?: boolean;
16
19
  }
20
+ export interface PullFileOptions extends AfcTransferOptions {
21
+ }
22
+ export interface PullFolderOptions extends AfcTransferOptions {
23
+ }
17
24
  export interface RealDeviceInstallOptions {
18
25
  /** Application installation timeout in milliseconds */
19
26
  timeoutMs?: number;
@@ -90,23 +97,36 @@ export declare class RealDevice {
90
97
  bundleId?: string;
91
98
  fullReset?: boolean;
92
99
  }): Promise<void>;
100
+ /**
101
+ * Attempt a streaming zip_conduit install of an `.ipa` over RemoteXPC.
102
+ *
103
+ * @param appPath - Local path to the app package
104
+ * @param timeoutMs - Overall install timeout in milliseconds
105
+ * @returns `true` when the app was installed via zip_conduit; `false` when the
106
+ * package is not an eligible `.ipa`, the service is unavailable, or the
107
+ * streamed install failed. A `false` result tells the caller to fall back to
108
+ * the AFC upload + installation_proxy path.
109
+ */
110
+ private installViaZipConduit;
93
111
  }
94
112
  /**
95
113
  * Retrieve a file from a real device
96
114
  *
97
115
  * @param client AFC client instance
98
116
  * @param remotePath Relative path to the file on the device
117
+ * @param opts Pull file options
99
118
  * @returns The file content as a buffer
100
119
  */
101
- export declare function pullFile(client: AfcClient, remotePath: string): Promise<Buffer>;
120
+ export declare function pullFile(client: AfcClient, remotePath: string, opts?: PullFileOptions): Promise<Buffer>;
102
121
  /**
103
122
  * Retrieve a folder from a real device
104
123
  *
105
124
  * @param client AFC client instance
106
125
  * @param remoteRootPath Relative path to the folder on the device
126
+ * @param opts Pull folder options
107
127
  * @returns The folder content as a zipped base64-encoded buffer
108
128
  */
109
- export declare function pullFolder(client: AfcClient, remoteRootPath: string): Promise<Buffer>;
129
+ export declare function pullFolder(client: AfcClient, remoteRootPath: string, opts?: PullFolderOptions): Promise<Buffer>;
110
130
  /**
111
131
  * Pushes a file to a real device
112
132
  *
@@ -1 +1 @@
1
- {"version":3,"file":"real-device-management.d.ts","sourceRoot":"","sources":["../../../lib/device/real-device-management.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"real-device-management.d.ts","sourceRoot":"","sources":["../../../lib/device/real-device-management.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ const asyncbox_1 = require("asyncbox");
18
18
  const node_path_1 = __importDefault(require("node:path"));
19
19
  const helpers_1 = require("../commands/helpers");
20
20
  const utils_1 = require("../utils");
21
+ const constants_1 = require("../commands/constants");
21
22
  const logger_1 = require("../logger");
22
23
  const node_devicectl_1 = require("node-devicectl");
23
24
  const afc_client_1 = require("./afc-client");
@@ -26,6 +27,7 @@ const installation_proxy_client_1 = require("./installation-proxy-client");
26
27
  const notification_client_1 = require("./notification-client");
27
28
  const lockdown_client_1 = require("./lockdown-client");
28
29
  const app_termination_client_1 = require("./app-termination-client");
30
+ const zip_conduit_client_1 = require("./zip-conduit-client");
29
31
  const DEFAULT_APP_INSTALLATION_TIMEOUT_MS = 8 * 60 * 1000;
30
32
  exports.IO_TIMEOUT_MS = 4 * 60 * 1000;
31
33
  // Mobile devices use NAND memory modules for the storage,
@@ -65,6 +67,12 @@ class RealDevice {
65
67
  const { timeoutMs = exports.IO_TIMEOUT_MS } = opts;
66
68
  const timer = new support_1.timing.Timer().start();
67
69
  const useRemoteXPC = (0, helpers_1.isIos18OrNewer)(this.driverOpts);
70
+ // first try with zip_conduit service for iOS/tvOS 18+ and IPA only
71
+ // fall through to the AFC + installation_proxy path for other cases/zip_conduit failure
72
+ if (useRemoteXPC && (await this.installViaZipConduit(appPath, timeoutMs))) {
73
+ this.log.info(`The installation of '${bundleId}' succeeded after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
74
+ return;
75
+ }
68
76
  const afcClient = await afc_client_1.AfcClient.createForDevice(this.udid, useRemoteXPC);
69
77
  try {
70
78
  let bundlePathOnPhone;
@@ -73,6 +81,7 @@ class RealDevice {
73
81
  bundlePathOnPhone = `/${node_path_1.default.basename(appPath)}`;
74
82
  await pushFile(afcClient, appPath, bundlePathOnPhone, {
75
83
  timeoutMs,
84
+ log: this.log,
76
85
  });
77
86
  }
78
87
  else {
@@ -80,6 +89,7 @@ class RealDevice {
80
89
  await pushFolder(afcClient, appPath, bundlePathOnPhone, {
81
90
  enableParallelPush: true,
82
91
  timeoutMs,
92
+ log: this.log,
83
93
  });
84
94
  }
85
95
  await this.installOrUpgradeApplication(bundlePathOnPhone, {
@@ -247,6 +257,42 @@ class RealDevice {
247
257
  }
248
258
  this.log.debug(`Reset: removed '${bundleId}'`);
249
259
  }
260
+ /**
261
+ * Attempt a streaming zip_conduit install of an `.ipa` over RemoteXPC.
262
+ *
263
+ * @param appPath - Local path to the app package
264
+ * @param timeoutMs - Overall install timeout in milliseconds
265
+ * @returns `true` when the app was installed via zip_conduit; `false` when the
266
+ * package is not an eligible `.ipa`, the service is unavailable, or the
267
+ * streamed install failed. A `false` result tells the caller to fall back to
268
+ * the AFC upload + installation_proxy path.
269
+ */
270
+ async installViaZipConduit(appPath, timeoutMs) {
271
+ // zip_conduit only accepts .ipa archives. Unpacked .app bundles (and any
272
+ // other non-.ipa package) must use the AFC + installation_proxy
273
+ // path, so anything that is not a regular .ipa file is skipped here.
274
+ if (!appPath.toLowerCase().endsWith(constants_1.IPA_EXT) || !(await support_1.fs.stat(appPath)).isFile()) {
275
+ return false;
276
+ }
277
+ let client = null;
278
+ try {
279
+ client = await zip_conduit_client_1.ZipConduitClient.create(this.udid, this.log);
280
+ if (!client) {
281
+ return false;
282
+ }
283
+ this.log.debug(`Installing '${node_path_1.default.basename(appPath)}' via streaming zip_conduit`);
284
+ await client.install(appPath, { timeoutMs });
285
+ return true;
286
+ }
287
+ catch (err) {
288
+ this.log.warn(`Fast zip_conduit install of '${node_path_1.default.basename(appPath)}' failed; falling back to ` +
289
+ `AFC upload + installation_proxy. Original error: ${err.message}`);
290
+ return false;
291
+ }
292
+ finally {
293
+ await client?.close();
294
+ }
295
+ }
250
296
  }
251
297
  exports.RealDevice = RealDevice;
252
298
  /**
@@ -254,20 +300,29 @@ exports.RealDevice = RealDevice;
254
300
  *
255
301
  * @param client AFC client instance
256
302
  * @param remotePath Relative path to the file on the device
303
+ * @param opts Pull file options
257
304
  * @returns The file content as a buffer
258
305
  */
259
- async function pullFile(client, remotePath) {
260
- return await (0, helpers_1.withTimeout)(client.getFileContents(remotePath), exports.IO_TIMEOUT_MS, `Timed out after ${exports.IO_TIMEOUT_MS}ms while pulling file from '${remotePath}'`);
306
+ async function pullFile(client, remotePath, opts = {}) {
307
+ const log = opts.log ?? logger_1.log;
308
+ const timer = new support_1.timing.Timer().start();
309
+ const buffer = await (0, helpers_1.withTimeout)(client.getFileContents(remotePath), exports.IO_TIMEOUT_MS, `Timed out after ${exports.IO_TIMEOUT_MS}ms while pulling file from '${remotePath}'`);
310
+ logAfcTransferPerformance(log, 'download', buffer.length, remotePath, timer);
311
+ return buffer;
261
312
  }
262
313
  /**
263
314
  * Retrieve a folder from a real device
264
315
  *
265
316
  * @param client AFC client instance
266
317
  * @param remoteRootPath Relative path to the folder on the device
318
+ * @param opts Pull folder options
267
319
  * @returns The folder content as a zipped base64-encoded buffer
268
320
  */
269
- async function pullFolder(client, remoteRootPath) {
321
+ async function pullFolder(client, remoteRootPath, opts = {}) {
322
+ const log = opts.log ?? logger_1.log;
323
+ const timer = new support_1.timing.Timer().start();
270
324
  const tmpFolder = await support_1.tempDir.openDir();
325
+ let totalBytes = 0;
271
326
  try {
272
327
  let localTopItem = null;
273
328
  let countFilesSuccess = 0;
@@ -275,7 +330,7 @@ async function pullFolder(client, remoteRootPath) {
275
330
  await client.pull(remoteRootPath, tmpFolder, {
276
331
  recursive: true,
277
332
  overwrite: true,
278
- onEntry: async (remotePath, localPath, isDirectory) => {
333
+ onEntry: async (_remotePath, localPath, isDirectory) => {
279
334
  if (!localTopItem ||
280
335
  localPath.split(node_path_1.default.sep).length < localTopItem.split(node_path_1.default.sep).length) {
281
336
  localTopItem = localPath;
@@ -285,10 +340,14 @@ async function pullFolder(client, remoteRootPath) {
285
340
  }
286
341
  else {
287
342
  ++countFilesSuccess;
343
+ totalBytes += (await support_1.fs.stat(localPath)).size;
288
344
  }
289
345
  },
290
346
  });
291
- logger_1.log.info(`Pulled ${support_1.util.pluralize('file', countFilesSuccess, true)} and ${support_1.util.pluralize('folder', countFolders, true)} from '${remoteRootPath}'`);
347
+ logAfcTransferPerformance(log, 'download', totalBytes, remoteRootPath, timer, {
348
+ fileCount: countFilesSuccess,
349
+ folderCount: countFolders,
350
+ });
292
351
  return await support_1.zip.toInMemoryZip(localTopItem ? node_path_1.default.dirname(localTopItem) : tmpFolder, {
293
352
  encodeToBase64: true,
294
353
  });
@@ -308,21 +367,18 @@ async function pullFolder(client, remoteRootPath) {
308
367
  * @param opts Push file options
309
368
  */
310
369
  async function pushFile(client, localPathOrPayload, remotePath, opts = {}) {
311
- const { timeoutMs = exports.IO_TIMEOUT_MS } = opts;
370
+ const { timeoutMs = exports.IO_TIMEOUT_MS, log = logger_1.log } = opts;
312
371
  const timer = new support_1.timing.Timer().start();
313
372
  await remoteMkdirp(client, node_path_1.default.dirname(remotePath));
314
- // AfcClient handles the branching internally
315
373
  const pushPromise = Buffer.isBuffer(localPathOrPayload)
316
374
  ? client.setFileContents(remotePath, localPathOrPayload)
317
375
  : client.writeFromStream(remotePath, support_1.fs.createReadStream(localPathOrPayload, { autoClose: true }));
318
- // Wrap with timeout
319
376
  const actualTimeout = Math.max(timeoutMs, 60000);
320
377
  await (0, helpers_1.withTimeout)(pushPromise, actualTimeout, `Timed out after ${actualTimeout}ms while pushing file to '${remotePath}'`);
321
378
  const fileSize = Buffer.isBuffer(localPathOrPayload)
322
379
  ? localPathOrPayload.length
323
380
  : (await support_1.fs.stat(localPathOrPayload)).size;
324
- logger_1.log.debug(`Successfully pushed the file payload (${support_1.util.toReadableSizeString(fileSize)}) ` +
325
- `to the remote location '${remotePath}' in ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
381
+ logAfcTransferPerformance(log, 'upload', fileSize, remotePath, timer);
326
382
  }
327
383
  /**
328
384
  * Pushes a folder to a real device
@@ -334,14 +390,14 @@ async function pushFile(client, localPathOrPayload, remotePath, opts = {}) {
334
390
  * @param opts Push folder options
335
391
  */
336
392
  async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
337
- const { timeoutMs = exports.IO_TIMEOUT_MS, enableParallelPush = false } = opts;
393
+ const { timeoutMs = exports.IO_TIMEOUT_MS, enableParallelPush = false, log = logger_1.log } = opts;
338
394
  const timer = new support_1.timing.Timer().start();
339
395
  const allItems =
340
396
  /** @type {import('path-scurry').Path[]} */ /** @type {unknown} */ (await support_1.fs.glob('**', {
341
397
  cwd: srcRootPath,
342
398
  withFileTypes: true,
343
399
  }));
344
- logger_1.log.debug(`Successfully scanned the tree structure of '${srcRootPath}'`);
400
+ log.debug(`Successfully scanned the tree structure of '${srcRootPath}'`);
345
401
  // top-level folders go first
346
402
  const foldersToPush = allItems
347
403
  .filter((x) => x.isDirectory())
@@ -352,13 +408,17 @@ async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
352
408
  .filter((x) => !x.isDirectory())
353
409
  .sort((a, b) => (b.size ?? 0) - (a.size ?? 0))
354
410
  .map((x) => x.relative());
355
- logger_1.log.debug(`Got ${support_1.util.pluralize('folder', foldersToPush.length, true)} and ` +
411
+ const totalBytes = allItems
412
+ .filter((x) => !x.isDirectory())
413
+ .reduce((sum, x) => sum + (x.size ?? 0), 0);
414
+ log.debug(`Got ${support_1.util.pluralize('folder', foldersToPush.length, true)} and ` +
356
415
  `${support_1.util.pluralize('file', filesToPush.length, true)} to push`);
357
416
  // Create the folder structure
358
417
  try {
359
418
  await client.deleteDirectory(dstRootPath);
360
419
  }
361
420
  catch { }
421
+ // do not forget about the root folder
362
422
  await client.createDirectory(dstRootPath);
363
423
  for (const relativeFolderPath of foldersToPush) {
364
424
  let absoluteFolderPath = node_path_1.default.join(dstRootPath, relativeFolderPath);
@@ -369,8 +429,7 @@ async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
369
429
  await client.createDirectory(absoluteFolderPath);
370
430
  }
371
431
  }
372
- // do not forget about the root folder
373
- logger_1.log.debug(`Successfully created the remote folder structure ` +
432
+ log.debug(`Successfully created the remote folder structure ` +
374
433
  `(${support_1.util.pluralize('item', foldersToPush.length + 1, true)})`);
375
434
  const _pushFile = async (relativePath) => {
376
435
  const absoluteSourcePath = node_path_1.default.join(srcRootPath, relativePath);
@@ -381,7 +440,7 @@ async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
381
440
  await (0, helpers_1.withTimeout)(pushPromise, actualTimeout, `Timed out after ${actualTimeout}ms while pushing '${relativePath}' to '${absoluteDestinationPath}'`);
382
441
  };
383
442
  if (enableParallelPush) {
384
- logger_1.log.debug(`Proceeding to parallel files push (max ${exports.MAX_IO_CHUNK_SIZE} writers)`);
443
+ log.debug(`Proceeding to parallel files push (max ${exports.MAX_IO_CHUNK_SIZE} writers)`);
385
444
  await (0, helpers_1.withTimeout)((0, asyncbox_1.asyncmap)(filesToPush, async (relativeFilePath) => {
386
445
  await _pushFile(relativeFilePath);
387
446
  const elapsedMs = timer.getDuration().asMilliSeconds;
@@ -391,7 +450,7 @@ async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
391
450
  }, { concurrency: exports.MAX_IO_CHUNK_SIZE }), Math.max(timeoutMs - timer.getDuration().asMilliSeconds, 60000));
392
451
  }
393
452
  else {
394
- logger_1.log.debug(`Proceeding to serial files push`);
453
+ log.debug(`Proceeding to serial files push`);
395
454
  for (const relativeFilePath of filesToPush) {
396
455
  await _pushFile(relativeFilePath);
397
456
  const elapsedMs = timer.getDuration().asMilliSeconds;
@@ -400,9 +459,10 @@ async function pushFolder(client, srcRootPath, dstRootPath, opts = {}) {
400
459
  }
401
460
  }
402
461
  }
403
- logger_1.log.debug(`Successfully pushed ${support_1.util.pluralize('folder', foldersToPush.length, true)} ` +
404
- `and ${support_1.util.pluralize('file', filesToPush.length, true)} ` +
405
- `within ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
462
+ logAfcTransferPerformance(log, 'upload', totalBytes, dstRootPath, timer, {
463
+ fileCount: filesToPush.length,
464
+ folderCount: foldersToPush.length,
465
+ });
406
466
  }
407
467
  /**
408
468
  * Get list of connected devices.
@@ -515,6 +575,22 @@ async function detectUdid() {
515
575
  return udid;
516
576
  }
517
577
  // #region Private Helper Functions
578
+ function logAfcTransferPerformance(log, direction, byteCount, remotePath, timer, stats = {}) {
579
+ const elapsedMs = timer.getDuration().asMilliSeconds;
580
+ const elapsedSec = elapsedMs / 1000;
581
+ const preposition = direction === 'upload' ? 'to' : 'from';
582
+ const { fileCount, folderCount } = stats;
583
+ const itemSummary = fileCount !== undefined || folderCount !== undefined
584
+ ? ` (${support_1.util.pluralize('file', fileCount ?? 0, true)}` +
585
+ `${folderCount !== undefined ? ` and ${support_1.util.pluralize('folder', folderCount, true)}` : ''})`
586
+ : '';
587
+ log.debug(`AFC ${direction} of ${support_1.util.toReadableSizeString(byteCount)} ${preposition} '${remotePath}'` +
588
+ `${itemSummary} completed in ${elapsedMs.toFixed(0)}ms`);
589
+ if (elapsedSec >= 1 && byteCount > 0) {
590
+ const bytesPerSec = Math.floor(byteCount / elapsedSec);
591
+ log.debug(`Approximate average AFC ${direction} speed: ${support_1.util.toReadableSizeString(bytesPerSec)}/s`);
592
+ }
593
+ }
518
594
  /**
519
595
  * If the environment variable enables APPIUM_XCUITEST_PREFER_DEVICECTL.
520
596
  * This is a workaround for wireless tvOS.