appium-xcuitest-driver 7.22.1 → 7.23.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/lib/commands/certificate.js +4 -4
  3. package/build/lib/commands/certificate.js.map +1 -1
  4. package/build/lib/commands/log.d.ts.map +1 -1
  5. package/build/lib/commands/log.js +2 -1
  6. package/build/lib/commands/log.js.map +1 -1
  7. package/build/lib/commands/memory.js +1 -1
  8. package/build/lib/commands/memory.js.map +1 -1
  9. package/build/lib/commands/pcap.d.ts.map +1 -1
  10. package/build/lib/commands/pcap.js +3 -7
  11. package/build/lib/commands/pcap.js.map +1 -1
  12. package/build/lib/device-log/helpers.d.ts +4 -0
  13. package/build/lib/device-log/helpers.d.ts.map +1 -1
  14. package/build/lib/device-log/helpers.js +22 -0
  15. package/build/lib/device-log/helpers.js.map +1 -1
  16. package/build/lib/device-log/ios-crash-log.d.ts +30 -38
  17. package/build/lib/device-log/ios-crash-log.d.ts.map +1 -1
  18. package/build/lib/device-log/ios-crash-log.js +97 -100
  19. package/build/lib/device-log/ios-crash-log.js.map +1 -1
  20. package/build/lib/device-log/ios-log.d.ts +1 -1
  21. package/build/lib/device-log/ios-log.d.ts.map +1 -1
  22. package/build/lib/device-log/ios-log.js +2 -1
  23. package/build/lib/device-log/ios-log.js.map +1 -1
  24. package/build/lib/driver.d.ts +4 -2
  25. package/build/lib/driver.d.ts.map +1 -1
  26. package/build/lib/driver.js +2 -2
  27. package/build/lib/driver.js.map +1 -1
  28. package/build/lib/real-device-clients/base-device-client.d.ts +22 -0
  29. package/build/lib/real-device-clients/base-device-client.d.ts.map +1 -0
  30. package/build/lib/real-device-clients/base-device-client.js +13 -0
  31. package/build/lib/real-device-clients/base-device-client.js.map +1 -0
  32. package/build/lib/real-device-clients/devicectl.d.ts.map +1 -0
  33. package/build/lib/real-device-clients/devicectl.js.map +1 -0
  34. package/build/lib/real-device-clients/py-ios-device-client.d.ts +21 -0
  35. package/build/lib/real-device-clients/py-ios-device-client.d.ts.map +1 -0
  36. package/build/lib/{py-ios-device-client.js → real-device-clients/py-ios-device-client.js} +53 -84
  37. package/build/lib/real-device-clients/py-ios-device-client.js.map +1 -0
  38. package/build/lib/real-device.d.ts +1 -1
  39. package/build/lib/real-device.d.ts.map +1 -1
  40. package/build/lib/real-device.js +1 -1
  41. package/build/lib/real-device.js.map +1 -1
  42. package/lib/commands/certificate.js +1 -1
  43. package/lib/commands/log.js +2 -1
  44. package/lib/commands/memory.js +1 -1
  45. package/lib/commands/pcap.js +3 -4
  46. package/lib/device-log/helpers.ts +27 -0
  47. package/lib/device-log/ios-crash-log.ts +167 -0
  48. package/lib/device-log/ios-log.ts +2 -1
  49. package/lib/driver.js +1 -1
  50. package/lib/real-device-clients/base-device-client.ts +34 -0
  51. package/lib/real-device-clients/py-ios-device-client.ts +149 -0
  52. package/lib/real-device.js +1 -1
  53. package/npm-shrinkwrap.json +35 -28
  54. package/package.json +1 -2
  55. package/build/lib/devicectl.d.ts.map +0 -1
  56. package/build/lib/devicectl.js.map +0 -1
  57. package/build/lib/py-ios-device-client.d.ts +0 -76
  58. package/build/lib/py-ios-device-client.d.ts.map +0 -1
  59. package/build/lib/py-ios-device-client.js.map +0 -1
  60. package/lib/device-log/ios-crash-log.js +0 -146
  61. package/lib/py-ios-device-client.js +0 -167
  62. /package/build/lib/{devicectl.d.ts → real-device-clients/devicectl.d.ts} +0 -0
  63. /package/build/lib/{devicectl.js → real-device-clients/devicectl.js} +0 -0
  64. /package/lib/{devicectl.js → real-device-clients/devicectl.js} +0 -0
@@ -6,28 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Pyidevice = void 0;
7
7
  const teen_process_1 = require("teen_process");
8
8
  const support_1 = require("appium/support");
9
- const logger_1 = __importDefault(require("./logger"));
10
9
  const path_1 = __importDefault(require("path"));
10
+ const base_device_client_1 = require("./base-device-client");
11
11
  // https://github.com/YueChen-C/py-ios-device
12
12
  const BINARY_NAME = 'pyidevice';
13
- class Pyidevice {
14
- /**
15
- * @param {string} udid
16
- */
17
- constructor(udid) {
18
- this.udid = udid;
19
- this.binaryPath = null;
13
+ const CRASH_REPORT_EXT = '.ips';
14
+ class Pyidevice extends base_device_client_1.BaseDeviceClient {
15
+ constructor(opts) {
16
+ super({ log: opts.log });
17
+ this._udid = opts.udid;
18
+ this._binaryPath = null;
20
19
  }
21
- /**
22
- * @param {boolean} isStrict
23
- * @return {Promise<boolean>}
24
- */
25
20
  async assertExists(isStrict = true) {
26
- if (this.binaryPath) {
21
+ if (this._binaryPath) {
27
22
  return true;
28
23
  }
29
24
  try {
30
- this.binaryPath = await support_1.fs.which(BINARY_NAME);
25
+ this._binaryPath = await support_1.fs.which(BINARY_NAME);
31
26
  return true;
32
27
  }
33
28
  catch (e) {
@@ -39,58 +34,12 @@ class Pyidevice {
39
34
  return false;
40
35
  }
41
36
  }
42
- /**
43
- * @typedef {Object} ExecuteOptions
44
- * @property {string} cwd
45
- * @property {string?} format [json]
46
- * @property {boolean} logStdout [false]
47
- * @property {boolean} asynchronous [false]
48
- */
49
- /**
50
- * @param {string[]} args
51
- * @param {Partial<ExecuteOptions>} opts
52
- * @return {Promise<import('teen_process').TeenProcessExecResult|import('teen_process').SubProcess>}
53
- */
54
- async execute(args, opts = {}) {
55
- await this.assertExists();
56
- const { cwd, format = 'json', logStdout = false, asynchronous = false } = opts;
57
- const finalArgs = [...args, '--udid', this.udid, '--network'];
58
- if (format) {
59
- finalArgs.push('--format', format);
60
- }
61
- const binaryPath = /** @type {string} */ (this.binaryPath);
62
- const cmdStr = support_1.util.quote([binaryPath, ...finalArgs]);
63
- logger_1.default.debug(`Executing ${cmdStr}`);
64
- try {
65
- if (asynchronous) {
66
- const result = new teen_process_1.SubProcess(binaryPath, finalArgs, { cwd });
67
- await result.start(0);
68
- return result;
69
- }
70
- const result = await (0, teen_process_1.exec)(binaryPath, finalArgs, { cwd });
71
- if (logStdout) {
72
- logger_1.default.debug(`Command output: ${result.stdout}`);
73
- }
74
- return result;
75
- }
76
- catch (e) {
77
- throw new Error(`'${cmdStr}' failed. Original error: ${e.stderr || e.stdout || e.message}`);
78
- }
79
- }
80
- /**
81
- * @return {Promise<object>}
82
- */
83
37
  async listProfiles() {
84
- const { stdout } = /** @type {import('teen_process').TeenProcessExecResult} */ (await this.execute(['profiles', 'list']));
38
+ const { stdout } = await this.execute(['profiles', 'list']);
85
39
  return JSON.parse(stdout);
86
40
  }
87
- /**
88
- *
89
- * @param { {profilePath?: string, payload: string|Buffer} } opts
90
- * @privateRemarks The error below seems to suggest that `payload` can be undefined, but the code suggests otherwise
91
- */
92
- async installProfile(opts) {
93
- const { profilePath, payload } = opts ?? {};
41
+ async installProfile(args) {
42
+ const { profilePath, payload } = args;
94
43
  if (!profilePath && !payload) {
95
44
  throw new Error('Either the full path to the profile or its payload must be provided');
96
45
  }
@@ -100,7 +49,12 @@ class Pyidevice {
100
49
  if (!srcPath) {
101
50
  tmpRoot = await support_1.tempDir.openDir();
102
51
  srcPath = path_1.default.join(tmpRoot, 'cert.pem');
103
- await support_1.fs.writeFile(srcPath, payload, 'utf8');
52
+ if (Buffer.isBuffer(payload)) {
53
+ await support_1.fs.writeFile(srcPath, payload);
54
+ }
55
+ else {
56
+ await support_1.fs.writeFile(srcPath, payload, 'utf8');
57
+ }
104
58
  }
105
59
  await this.execute(['profiles', 'install', '--path', srcPath], {
106
60
  logStdout: true,
@@ -112,26 +66,19 @@ class Pyidevice {
112
66
  }
113
67
  }
114
68
  }
115
- /**
116
- *
117
- * @param {string} name
118
- * @returns {Promise<string>}
119
- */
120
69
  async removeProfile(name) {
121
- return /** @type {import('teen_process').TeenProcessExecResult} */ (await this.execute(['profiles', 'remove', '--name', name], { logStdout: true })).stdout;
70
+ return (await this.execute(['profiles', 'remove', '--name', name], { logStdout: true })).stdout;
122
71
  }
123
- /**
124
- * @returns {Promise<object>}
125
- */
126
72
  async listCrashes() {
127
- const { stdout } = /** @type {import('teen_process').TeenProcessExecResult} */ (await this.execute(['crash', 'list']));
128
- return JSON.parse(stdout.replace(/'/g, '"')).filter((x) => !['.', '..'].includes(x));
73
+ const { stdout } = await this.execute(['crash', 'list']);
74
+ // Example output:
75
+ // ['.', '..', 'SiriSearchFeedback-2023-12-06-144043.ips', '
76
+ // SiriSearchFeedback-2024-05-22-194219.ips', 'JetsamEvent-2024-05-23-225056.ips',
77
+ // 'JetsamEvent-2023-09-18-090920.ips', 'JetsamEvent-2024-05-16-054529.ips',
78
+ // 'Assistant']
79
+ return JSON.parse(stdout.replace(/'/g, '"'))
80
+ .filter((x) => x.endsWith(CRASH_REPORT_EXT));
129
81
  }
130
- /**
131
- * @param {string} name
132
- * @param {string} dstFolder
133
- * @returns {Promise<void>}
134
- */
135
82
  async exportCrash(name, dstFolder) {
136
83
  await this.execute(['crash', 'export', '--name', name], {
137
84
  logStdout: true,
@@ -139,16 +86,38 @@ class Pyidevice {
139
86
  cwd: dstFolder,
140
87
  });
141
88
  }
142
- /**
143
- * @param {string} dstFile
144
- */
145
89
  async collectPcap(dstFile) {
146
90
  return await this.execute(['pcapd', dstFile], {
147
91
  format: null,
148
92
  asynchronous: true,
149
93
  });
150
94
  }
95
+ async execute(args, opts = {}) {
96
+ await this.assertExists();
97
+ const { cwd, format = 'json', logStdout = false, asynchronous = false } = opts;
98
+ const finalArgs = [...args, '--udid', this._udid, '--network'];
99
+ if (format) {
100
+ finalArgs.push('--format', format);
101
+ }
102
+ const binaryPath = this._binaryPath;
103
+ const cmdStr = support_1.util.quote([binaryPath, ...finalArgs]);
104
+ this.log.debug(`Executing ${cmdStr}`);
105
+ try {
106
+ if (asynchronous) {
107
+ const result = new teen_process_1.SubProcess(binaryPath, finalArgs, { cwd });
108
+ await result.start(0);
109
+ return result;
110
+ }
111
+ const result = await (0, teen_process_1.exec)(binaryPath, finalArgs, { cwd });
112
+ if (logStdout) {
113
+ this.log.debug(`Command output: ${result.stdout}`);
114
+ }
115
+ return result;
116
+ }
117
+ catch (e) {
118
+ throw new Error(`'${cmdStr}' failed. Original error: ${e.stderr || e.stdout || e.message}`);
119
+ }
120
+ }
151
121
  }
152
122
  exports.Pyidevice = Pyidevice;
153
- exports.default = Pyidevice;
154
123
  //# sourceMappingURL=py-ios-device-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py-ios-device-client.js","sourceRoot":"","sources":["../../../lib/real-device-clients/py-ios-device-client.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA8C;AAC9C,4CAAiD;AACjD,gDAAwB;AACxB,6DAAwD;AAKxD,6CAA6C;AAE7C,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAahC,MAAa,SAAU,SAAQ,qCAAgB;IAI7C,YAAY,IAAsB;QAChC,KAAK,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEQ,KAAK,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI;QACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,MAAM,YAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,GAAG,WAAW,mCAAmC;oBAC/C,yFAAyF;oBACzF,eAAe,CAClB,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,YAAY;QACzB,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAkC,CAAC;QAC3F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,IAAwB;QACpD,MAAM,EAAC,WAAW,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,OAA2B,CAAC;QAChC,IAAI,OAAO,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,MAAM,iBAAO,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,MAAM,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAiB,EAAE,MAAM,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;gBAC7D,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,YAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,aAAa,CAAC,IAAY;QACvC,OAAO,CACL,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAC7E,CAAA,CAAC,MAAM,CAAC;IACX,CAAC;IAEQ,KAAK,CAAC,WAAW;QACxB,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAkC,CAAC;QACxF,kBAAkB;QAClB,4DAA4D;QAC5D,kFAAkF;QAClF,4EAA4E;QAC5E,eAAe;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzD,CAAC;IAEQ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,SAAiB;QACxD,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;YACtD,SAAS,EAAE,IAAI;YACf,4DAA4D;YAC5D,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,WAAW,CAAC,OAAe;QACxC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;YAC5C,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,IAAI;SACnB,CAAe,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAc,EACd,OAAuB,EAAE;QAEzB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,EAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAC,GAAG,IAAI,CAAC;QAE7E,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE,CAAC;YACX,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;QAC9C,MAAM,MAAM,GAAG,cAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,IAAI,yBAAU,CAAC,UAAU,EAAE,SAAS,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;gBAC5D,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAI,EAAC,UAAU,EAAE,SAAS,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;YACxD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,6BAA6B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;CACF;AA5HD,8BA4HC"}
@@ -108,5 +108,5 @@ export type InstallOrUpgradeOptions = {
108
108
  */
109
109
  isUpgrade: boolean;
110
110
  };
111
- import { Devicectl } from './devicectl';
111
+ import { Devicectl } from './real-device-clients/devicectl';
112
112
  //# sourceMappingURL=real-device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"real-device.d.ts","sourceRoot":"","sources":["../../lib/real-device.js"],"names":[],"mappings":"AAcA;;GAEG;AACH,uCAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;AAED;;;GAGG;AAEH;;;;GAIG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,6DAOhB;IAHC,aAAgB;IAChB,2CAAmC;IACnC,qBAAoD;IAGtD;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,iBAFW,MAAM,iBAShB;IAED;;OAEG;IACH,oBAFW,MAAM,iBAIhB;IAED;;;;;OAKG;IACH,iBAJW,MAAM,YACN,MAAM,SACN,cAAc,iBA4CxB;IAED;;;OAGG;IACH,+CAHW,MAAM,0BACN,uBAAuB,iBAsCjC;IAED;;;;;OAKG;IACH,oBAJW,MAAM,YACN,MAAM,SACN,cAAc,iBAIxB;IAED;;;;;;;OAOG;IACH,yBAJW,MAAM,GACL,OAAO,CAAC,OAAO,CAAC,CAK3B;IAED;;;;;;;;;;;OAWG;IACH,uBARW,MAAM,qBACN,MAAM,GAAC,MAAM,EAAE,GAAC,SAAS,GAIvB,OAAO,CAAC,MAAO,SAAS,CAAC,CAgBrC;IAED;;;;OAIG;IACH,uBAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CA+D5B;IAED;;;;;OAKG;IACH,kDALW,MAAM,GAEJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB7B;IAED;;OAEG;IACH,sBAFa,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,gDAHW,OAAO,UAAU,EAAE,kBAAkB,GACnC,OAAO,CAAC,IAAI,CAAC,CA8BzB;CAEF;;;;;;;aA9Ta,MAAM;;;;eACN,OAAO;;0BArBK,aAAa"}
1
+ {"version":3,"file":"real-device.d.ts","sourceRoot":"","sources":["../../lib/real-device.js"],"names":[],"mappings":"AAcA;;GAEG;AACH,uCAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;AAED;;;GAGG;AAEH;;;;GAIG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,6DAOhB;IAHC,aAAgB;IAChB,2CAAmC;IACnC,qBAAoD;IAGtD;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,iBAFW,MAAM,iBAShB;IAED;;OAEG;IACH,oBAFW,MAAM,iBAIhB;IAED;;;;;OAKG;IACH,iBAJW,MAAM,YACN,MAAM,SACN,cAAc,iBA4CxB;IAED;;;OAGG;IACH,+CAHW,MAAM,0BACN,uBAAuB,iBAsCjC;IAED;;;;;OAKG;IACH,oBAJW,MAAM,YACN,MAAM,SACN,cAAc,iBAIxB;IAED;;;;;;;OAOG;IACH,yBAJW,MAAM,GACL,OAAO,CAAC,OAAO,CAAC,CAK3B;IAED;;;;;;;;;;;OAWG;IACH,uBARW,MAAM,qBACN,MAAM,GAAC,MAAM,EAAE,GAAC,SAAS,GAIvB,OAAO,CAAC,MAAO,SAAS,CAAC,CAgBrC;IAED;;;;OAIG;IACH,uBAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CA+D5B;IAED;;;;;OAKG;IACH,kDALW,MAAM,GAEJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB7B;IAED;;OAEG;IACH,sBAFa,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,gDAHW,OAAO,UAAU,EAAE,kBAAkB,GACnC,OAAO,CAAC,IAAI,CAAC,CA8BzB;CAEF;;;;;;;aA9Ta,MAAM;;;;eACN,OAAO;;0BArBK,iCAAiC"}
@@ -13,7 +13,7 @@ const logger_1 = __importDefault(require("./logger"));
13
13
  const lodash_1 = __importDefault(require("lodash"));
14
14
  const app_utils_1 = require("./app-utils");
15
15
  const ios_fs_helpers_1 = require("./ios-fs-helpers");
16
- const devicectl_1 = require("./devicectl");
16
+ const devicectl_1 = require("./real-device-clients/devicectl");
17
17
  const APPLICATION_INSTALLED_NOTIFICATION = 'com.apple.mobile.application_installed';
18
18
  const APPLICATION_NOTIFICATION_TIMEOUT_MS = 30 * 1000;
19
19
  const INSTALLATION_STAGING_DIR = 'PublicStaging';
@@ -1 +1 @@
1
- {"version":3,"file":"real-device.js","sourceRoot":"","sources":["../../lib/real-device.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"real-device.js","sourceRoot":"","sources":["../../lib/real-device.js"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import path from 'path';
7
7
  import http from 'http';
8
8
  import {exec} from 'teen_process';
9
9
  import {findAPortNotInUse, checkPortStatus} from 'portscanner';
10
- import Pyidevice from '../py-ios-device-client';
10
+ import {Pyidevice} from '../real-device-clients/py-ios-device-client';
11
11
  import {errors} from 'appium/driver';
12
12
 
13
13
  const CONFIG_EXTENSION = 'mobileconfig';
@@ -108,8 +108,9 @@ export default {
108
108
  }
109
109
  if (_.isUndefined(this.logs.syslog)) {
110
110
  this.logs.crashlog = new IOSCrashLog({
111
- sim: this.device,
111
+ sim: /** @type {import('appium-ios-simulator').Simulator} */ (this.device),
112
112
  udid: this.isRealDevice() ? this.opts.udid : undefined,
113
+ log: this.log,
113
114
  });
114
115
  this.logs.syslog = this.isRealDevice()
115
116
  ? new IOSDeviceLog({
@@ -17,7 +17,7 @@ export default {
17
17
 
18
18
  const device = /** @type {import('../real-device').RealDevice} */ (this.device);
19
19
 
20
- /** @type {import('../devicectl').AppInfo[]} */
20
+ /** @type {import('../real-device-clients/devicectl').AppInfo[]} */
21
21
  const appInfos = await device.devicectl.listApps(bundleId);
22
22
  if (_.isEmpty(appInfos)) {
23
23
  throw new errors.InvalidArgumentError(
@@ -1,11 +1,10 @@
1
- import Pyidevice from '../py-ios-device-client';
2
- import {fs, tempDir, logger, util} from 'appium/support';
1
+ import { Pyidevice } from '../real-device-clients/py-ios-device-client';
2
+ import {fs, tempDir, util} from 'appium/support';
3
3
  import {encodeBase64OrUpload} from '../utils';
4
4
  import {errors} from 'appium/driver';
5
5
 
6
6
  const MAX_CAPTURE_TIME_SEC = 60 * 60 * 12;
7
7
  const DEFAULT_EXT = '.pcap';
8
- const pcapLogger = logger.getLogger('pcapd');
9
8
 
10
9
  export class TrafficCapture {
11
10
  /** @type {import('teen_process').SubProcess|null} */
@@ -21,7 +20,7 @@ export class TrafficCapture {
21
20
  this.mainProcess = /** @type {import('teen_process').SubProcess} */ (
22
21
  await new Pyidevice(this.udid).collectPcap(this.resultPath)
23
22
  );
24
- this.mainProcess.on('line-stderr', (line) => pcapLogger.info(line));
23
+ this.mainProcess.on('line-stderr', (line) => this.log.info(`[Pcap] ${line}`));
25
24
  this.log.info(
26
25
  `Starting network traffic capture session on the device '${this.udid}'. ` +
27
26
  `Will timeout in ${timeoutSeconds}s`,
@@ -1,4 +1,7 @@
1
1
  import type { LogEntry } from '../commands/types';
2
+ import { fs } from 'appium/support';
3
+ import { createInterface } from 'node:readline';
4
+ import _ from 'lodash';
2
5
 
3
6
  export const DEFAULT_LOG_LEVEL = 'ALL';
4
7
  export const MAX_JSON_LOG_LENGTH = 200;
@@ -11,3 +14,27 @@ export function toLogEntry(message: string, timestamp: number, level: string = D
11
14
  message,
12
15
  };
13
16
  }
17
+
18
+ export interface GrepOptions {
19
+ caseInsensitive?: boolean;
20
+ }
21
+
22
+ export async function grepFile(
23
+ fullPath: string,
24
+ str: string,
25
+ opts: GrepOptions = {}
26
+ ): Promise<boolean> {
27
+ const input = fs.createReadStream(fullPath);
28
+ const rl = createInterface({input});
29
+ return await new Promise((resolve, reject) => {
30
+ input.once('error', reject);
31
+ rl.on('line', (line) => {
32
+ if (opts.caseInsensitive && _.toLower(line).includes(_.toLower(str))
33
+ || !opts.caseInsensitive && line.includes(str)) {
34
+ resolve(true);
35
+ input.close();
36
+ }
37
+ });
38
+ input.once('end', () => resolve(false));
39
+ });
40
+ }
@@ -0,0 +1,167 @@
1
+ import {fs, tempDir, util} from 'appium/support';
2
+ import B from 'bluebird';
3
+ import path from 'path';
4
+ import _ from 'lodash';
5
+ import {Pyidevice} from '../real-device-clients/py-ios-device-client';
6
+ import IOSLog from './ios-log';
7
+ import { toLogEntry, grepFile } from './helpers';
8
+ import type { AppiumLogger } from '@appium/types';
9
+ import type { BaseDeviceClient } from '../real-device-clients/base-device-client';
10
+ import type { Simulator } from 'appium-ios-simulator';
11
+ import type { LogEntry } from '../commands/types';
12
+
13
+ // The file format has been changed from '.crash' to '.ips' since Monterey.
14
+ const CRASH_REPORTS_GLOB_PATTERN = '**/*.@(crash|ips)';
15
+ // The size of a single diagnostic report might be hundreds of kilobytes.
16
+ // Thus we do not want to store too many items in the memory at once.
17
+ const MAX_RECENT_ITEMS = 20;
18
+
19
+ type TSerializedEntry = [string, number];
20
+
21
+ export interface IOSCrashLogOptions {
22
+ /** UDID of a real device */
23
+ udid?: string;
24
+ /** Simulator instance */
25
+ sim?: Simulator;
26
+ log: AppiumLogger;
27
+ }
28
+
29
+ export class IOSCrashLog extends IOSLog<TSerializedEntry, TSerializedEntry> {
30
+ private readonly _udid: string | undefined;
31
+ private readonly _realDeviceClient: BaseDeviceClient | null;
32
+ private readonly _logDir: string | null;
33
+ private readonly _sim: Simulator | undefined;
34
+ private _recentCrashFiles: string[];
35
+ private _started: boolean;
36
+
37
+ constructor(opts: IOSCrashLogOptions) {
38
+ super({
39
+ log: opts.log,
40
+ maxBufferSize: MAX_RECENT_ITEMS,
41
+ });
42
+ this._udid = opts.udid;
43
+ this._sim = opts.sim;
44
+ this._realDeviceClient = this._isRealDevice()
45
+ ? new Pyidevice({
46
+ udid: this._udid as string,
47
+ log: opts.log,
48
+ })
49
+ : null;
50
+ this._logDir = this._isRealDevice()
51
+ ? null
52
+ : path.resolve(process.env.HOME || '/', 'Library', 'Logs', 'DiagnosticReports');
53
+ this._recentCrashFiles = [];
54
+ this._started = false;
55
+ }
56
+
57
+ override async startCapture(): Promise<void> {
58
+ this._recentCrashFiles = await this._listCrashFiles(false);
59
+ this._started = true;
60
+ }
61
+
62
+ // eslint-disable-next-line require-await
63
+ override async stopCapture(): Promise<void> {
64
+ this._started = false;
65
+ }
66
+
67
+ override get isCapturing(): boolean {
68
+ return this._started;
69
+ }
70
+
71
+ override async getLogs(): Promise<LogEntry[]> {
72
+ const crashFiles = (await this._listCrashFiles(true)).slice(-MAX_RECENT_ITEMS);
73
+ const diffFiles = _.difference(crashFiles, this._recentCrashFiles);
74
+ if (_.isEmpty(diffFiles)) {
75
+ return [];
76
+ }
77
+
78
+ this.log.debug(`Found ${util.pluralize('fresh crash report', diffFiles.length, true)}`);
79
+ await this._serializeCrashes(diffFiles);
80
+ this._recentCrashFiles = crashFiles;
81
+ return super.getLogs();
82
+ }
83
+
84
+ protected override _serializeEntry(value: TSerializedEntry): TSerializedEntry {
85
+ return value;
86
+ }
87
+
88
+ protected override _deserializeEntry(value: TSerializedEntry): LogEntry {
89
+ const [message, timestamp] = value;
90
+ return toLogEntry(message, timestamp);
91
+ }
92
+
93
+ private async _serializeCrashes(paths: string[]): Promise<void> {
94
+ const tmpRoot = await tempDir.openDir();
95
+ try {
96
+ for (const filePath of paths) {
97
+ let fullPath = filePath;
98
+ if (this._isRealDevice()) {
99
+ const fileName = filePath;
100
+ try {
101
+ await (this._realDeviceClient as BaseDeviceClient).exportCrash(fileName, tmpRoot);
102
+ } catch (e) {
103
+ this.log.warn(
104
+ `Cannot export the crash report '${fileName}'. Skipping it. ` +
105
+ `Original error: ${e.message}`,
106
+ );
107
+ return;
108
+ }
109
+ fullPath = path.join(tmpRoot, fileName);
110
+ }
111
+ const {ctime} = await fs.stat(fullPath);
112
+ this.broadcast([await fs.readFile(fullPath, 'utf8'), ctime.getTime()]);
113
+ }
114
+ } finally {
115
+ await fs.rimraf(tmpRoot);
116
+ }
117
+ }
118
+
119
+ private async _gatherFromRealDevice(strict: boolean): Promise<string[]> {
120
+ if (!this._realDeviceClient) {
121
+ return [];
122
+ }
123
+ if (!await this._realDeviceClient.assertExists(strict)) {
124
+ this.log.info(
125
+ `The ${_.toLower(this._realDeviceClient.constructor.name)} tool is not present in PATH. ` +
126
+ `Skipping crash logs collection for real devices.`
127
+ );
128
+ return [];
129
+ }
130
+
131
+ return await this._realDeviceClient.listCrashes();
132
+ }
133
+
134
+ private async _gatherFromSimulator(): Promise<string[]> {
135
+ if (!this._logDir || !this._sim || !(await fs.exists(this._logDir))) {
136
+ this.log.debug(`Crash reports root '${this._logDir}' does not exist. Got nothing to gather.`);
137
+ return [];
138
+ }
139
+
140
+ const foundFiles = await fs.glob(CRASH_REPORTS_GLOB_PATTERN, {
141
+ cwd: this._logDir,
142
+ absolute: true,
143
+ });
144
+ const simUdid = (this._sim as Simulator).udid;
145
+ // For Simulator only include files, that contain current UDID
146
+ return await B.filter(foundFiles, async (filePath) => {
147
+ try {
148
+ return await grepFile(filePath, simUdid, {caseInsensitive: true});
149
+ } catch (err) {
150
+ this.log.warn(err);
151
+ return false;
152
+ }
153
+ });
154
+ }
155
+
156
+ private async _listCrashFiles(strict: boolean): Promise<string[]> {
157
+ return this._isRealDevice()
158
+ ? await this._gatherFromRealDevice(strict)
159
+ : await this._gatherFromSimulator();
160
+ }
161
+
162
+ private _isRealDevice(): boolean {
163
+ return Boolean(this._udid);
164
+ }
165
+ }
166
+
167
+ export default IOSCrashLog;
@@ -37,7 +37,8 @@ export abstract class IOSLog<
37
37
  return this._log;
38
38
  }
39
39
 
40
- getLogs(): LogEntry[] {
40
+ // eslint-disable-next-line require-await
41
+ async getLogs(): Promise<LogEntry[]> {
41
42
  const result: LogEntry[] = [];
42
43
  for (const value of this.logs.rvalues()) {
43
44
  result.push(this._deserializeEntry(value as TSerializedEntry));
package/lib/driver.js CHANGED
@@ -23,7 +23,7 @@ import {desiredCapConstraints} from './desired-caps';
23
23
  import DEVICE_CONNECTIONS_FACTORY from './device-connections-factory';
24
24
  import {executeMethodMap} from './execute-method-map';
25
25
  import {newMethodMap} from './method-map';
26
- import Pyidevice from './py-ios-device-client';
26
+ import { Pyidevice } from './real-device-clients/py-ios-device-client';
27
27
  import {
28
28
  installToRealDevice,
29
29
  runRealDeviceReset,
@@ -0,0 +1,34 @@
1
+ import type { AppiumLogger } from '@appium/types';
2
+ import type { SubProcess } from 'teen_process';
3
+
4
+ export interface BaseDeviceClientOptions {
5
+ log: AppiumLogger;
6
+ }
7
+
8
+ export interface InstallProfileArgs {
9
+ profilePath?: string;
10
+ payload?: string|Buffer;
11
+ }
12
+
13
+ export abstract class BaseDeviceClient {
14
+ private readonly _log: AppiumLogger;
15
+
16
+ constructor (opts: BaseDeviceClientOptions) {
17
+ this._log = opts.log;
18
+ }
19
+
20
+ get log(): AppiumLogger {
21
+ return this._log;
22
+ }
23
+
24
+ abstract assertExists(isStrict: boolean): Promise<boolean>;
25
+
26
+ abstract listProfiles(): Promise<object>;
27
+ abstract installProfile(args: InstallProfileArgs): Promise<void>;
28
+ abstract removeProfile(name: string): Promise<string>;
29
+
30
+ abstract listCrashes(): Promise<string[]>;
31
+ abstract exportCrash(name: string, dstFolder: string): Promise<void>;
32
+
33
+ abstract collectPcap(dstFile: string): Promise<SubProcess>;
34
+ }