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
@@ -0,0 +1,149 @@
1
+ import {exec, SubProcess} from 'teen_process';
2
+ import {fs, util, tempDir} from 'appium/support';
3
+ import path from 'path';
4
+ import { BaseDeviceClient } from './base-device-client';
5
+ import type { BaseDeviceClientOptions, InstallProfileArgs } from './base-device-client';
6
+ import type { TeenProcessExecResult } from 'teen_process';
7
+ import type { CertificateList } from '../commands/types';
8
+
9
+ // https://github.com/YueChen-C/py-ios-device
10
+
11
+ const BINARY_NAME = 'pyidevice';
12
+ const CRASH_REPORT_EXT = '.ips';
13
+
14
+ export interface PyideviceOptions extends BaseDeviceClientOptions {
15
+ udid: string;
16
+ }
17
+
18
+ interface ExecuteOptions {
19
+ cwd?: string;
20
+ format?: string | null;
21
+ logStdout?: boolean;
22
+ asynchronous?: boolean;
23
+ }
24
+
25
+ export class Pyidevice extends BaseDeviceClient {
26
+ private readonly _udid: string;
27
+ private _binaryPath: string | null;
28
+
29
+ constructor(opts: PyideviceOptions) {
30
+ super({log: opts.log});
31
+ this._udid = opts.udid;
32
+ this._binaryPath = null;
33
+ }
34
+
35
+ override async assertExists(isStrict = true): Promise<boolean> {
36
+ if (this._binaryPath) {
37
+ return true;
38
+ }
39
+
40
+ try {
41
+ this._binaryPath = await fs.which(BINARY_NAME);
42
+ return true;
43
+ } catch (e) {
44
+ if (isStrict) {
45
+ throw new Error(
46
+ `${BINARY_NAME} binary cannot be found in PATH. ` +
47
+ `Please make sure it is installed. Visit https://github.com/YueChen-C/py-ios-device for ` +
48
+ `more details.`,
49
+ );
50
+ }
51
+ return false;
52
+ }
53
+ }
54
+
55
+ override async listProfiles(): Promise<CertificateList> {
56
+ const {stdout} = await this.execute(['profiles', 'list']) as TeenProcessExecResult<string>;
57
+ return JSON.parse(stdout);
58
+ }
59
+
60
+ override async installProfile(args: InstallProfileArgs): Promise<void> {
61
+ const {profilePath, payload} = args;
62
+ if (!profilePath && !payload) {
63
+ throw new Error('Either the full path to the profile or its payload must be provided');
64
+ }
65
+
66
+ let tmpRoot: string | undefined;
67
+ let srcPath = profilePath;
68
+ try {
69
+ if (!srcPath) {
70
+ tmpRoot = await tempDir.openDir();
71
+ srcPath = path.join(tmpRoot, 'cert.pem');
72
+ if (Buffer.isBuffer(payload)) {
73
+ await fs.writeFile(srcPath, payload);
74
+ } else {
75
+ await fs.writeFile(srcPath, payload as string, 'utf8');
76
+ }
77
+ }
78
+ await this.execute(['profiles', 'install', '--path', srcPath], {
79
+ logStdout: true,
80
+ });
81
+ } finally {
82
+ if (tmpRoot) {
83
+ await fs.rimraf(tmpRoot);
84
+ }
85
+ }
86
+ }
87
+
88
+ override async removeProfile(name: string): Promise<string> {
89
+ return (
90
+ await this.execute(['profiles', 'remove', '--name', name], {logStdout: true}) as TeenProcessExecResult<string>
91
+ ).stdout;
92
+ }
93
+
94
+ override async listCrashes(): Promise<string[]> {
95
+ const {stdout} = await this.execute(['crash', 'list']) as TeenProcessExecResult<string>;
96
+ // Example output:
97
+ // ['.', '..', 'SiriSearchFeedback-2023-12-06-144043.ips', '
98
+ // SiriSearchFeedback-2024-05-22-194219.ips', 'JetsamEvent-2024-05-23-225056.ips',
99
+ // 'JetsamEvent-2023-09-18-090920.ips', 'JetsamEvent-2024-05-16-054529.ips',
100
+ // 'Assistant']
101
+ return JSON.parse(stdout.replace(/'/g, '"'))
102
+ .filter((x: string) => x.endsWith(CRASH_REPORT_EXT));
103
+ }
104
+
105
+ override async exportCrash(name: string, dstFolder: string): Promise<void> {
106
+ await this.execute(['crash', 'export', '--name', name], {
107
+ logStdout: true,
108
+ // The tool exports crash reports to the current working dir
109
+ cwd: dstFolder,
110
+ });
111
+ }
112
+
113
+ override async collectPcap(dstFile: string): Promise<SubProcess> {
114
+ return await this.execute(['pcapd', dstFile], {
115
+ format: null,
116
+ asynchronous: true,
117
+ }) as SubProcess;
118
+ }
119
+
120
+ private async execute(
121
+ args: string[],
122
+ opts: ExecuteOptions = {}
123
+ ): Promise<TeenProcessExecResult<string> | SubProcess> {
124
+ await this.assertExists();
125
+ const {cwd, format = 'json', logStdout = false, asynchronous = false} = opts;
126
+
127
+ const finalArgs = [...args, '--udid', this._udid, '--network'];
128
+ if (format) {
129
+ finalArgs.push('--format', format);
130
+ }
131
+ const binaryPath = this._binaryPath as string;
132
+ const cmdStr = util.quote([binaryPath, ...finalArgs]);
133
+ this.log.debug(`Executing ${cmdStr}`);
134
+ try {
135
+ if (asynchronous) {
136
+ const result = new SubProcess(binaryPath, finalArgs, {cwd});
137
+ await result.start(0);
138
+ return result;
139
+ }
140
+ const result = await exec(binaryPath, finalArgs, {cwd});
141
+ if (logStdout) {
142
+ this.log.debug(`Command output: ${result.stdout}`);
143
+ }
144
+ return result;
145
+ } catch (e) {
146
+ throw new Error(`'${cmdStr}' failed. Original error: ${e.stderr || e.stdout || e.message}`);
147
+ }
148
+ }
149
+ }
@@ -6,7 +6,7 @@ import defaultLogger from './logger';
6
6
  import _ from 'lodash';
7
7
  import {SAFARI_BUNDLE_ID} from './app-utils';
8
8
  import {pushFile, pushFolder, IO_TIMEOUT_MS} from './ios-fs-helpers';
9
- import { Devicectl } from './devicectl';
9
+ import { Devicectl } from './real-device-clients/devicectl';
10
10
 
11
11
  const APPLICATION_INSTALLED_NOTIFICATION = 'com.apple.mobile.application_installed';
12
12
  const APPLICATION_NOTIFICATION_TIMEOUT_MS = 30 * 1000;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "7.22.1",
3
+ "version": "7.23.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-xcuitest-driver",
9
- "version": "7.22.1",
9
+ "version": "7.23.1",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@colors/colors": "^1.6.0",
@@ -35,7 +35,6 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@appium/docutils": "^1.0.2",
38
- "@appium/eslint-config-appium": "^8.0.4",
39
38
  "@appium/eslint-config-appium-ts": "^0.x",
40
39
  "@appium/test-support": "^3.0.20",
41
40
  "@appium/tsconfig": "^0.x",
@@ -113,6 +112,14 @@
113
112
  "spdy": "4.0.2"
114
113
  }
115
114
  },
115
+ "node_modules/@appium/base-driver/node_modules/lru-cache": {
116
+ "version": "10.3.0",
117
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
118
+ "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
119
+ "engines": {
120
+ "node": "14 || >=16.14"
121
+ }
122
+ },
116
123
  "node_modules/@appium/base-driver/node_modules/type-fest": {
117
124
  "version": "4.20.1",
118
125
  "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
@@ -740,9 +747,9 @@
740
747
  }
741
748
  },
742
749
  "node_modules/@types/node": {
743
- "version": "20.14.9",
744
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
745
- "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
750
+ "version": "20.14.10",
751
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
752
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
746
753
  "dependencies": {
747
754
  "undici-types": "~5.26.4"
748
755
  }
@@ -2310,14 +2317,14 @@
2310
2317
  }
2311
2318
  },
2312
2319
  "node_modules/jackspeak": {
2313
- "version": "3.4.0",
2314
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
2315
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
2320
+ "version": "3.4.2",
2321
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz",
2322
+ "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==",
2316
2323
  "dependencies": {
2317
2324
  "@isaacs/cliui": "^8.0.2"
2318
2325
  },
2319
2326
  "engines": {
2320
- "node": ">=14"
2327
+ "node": "14 >=14.21 || 16 >=16.20 || >=18"
2321
2328
  },
2322
2329
  "funding": {
2323
2330
  "url": "https://github.com/sponsors/isaacs"
@@ -2501,11 +2508,11 @@
2501
2508
  }
2502
2509
  },
2503
2510
  "node_modules/lru-cache": {
2504
- "version": "10.3.0",
2505
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
2506
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
2511
+ "version": "10.4.2",
2512
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.2.tgz",
2513
+ "integrity": "sha512-voV4dDrdVZVNz84n39LFKDaRzfwhdzJ7akpyXfTMxCgRUp07U3lcJUXRlhTKP17rgt09sUzLi5iCitpEAr+6ug==",
2507
2514
  "engines": {
2508
- "node": "14 || >=16.14"
2515
+ "node": "14 || 16 || 18 || 20 || >=22"
2509
2516
  }
2510
2517
  },
2511
2518
  "node_modules/make-error": {
@@ -2777,9 +2784,9 @@
2777
2784
  }
2778
2785
  },
2779
2786
  "node_modules/node-simctl": {
2780
- "version": "7.5.2",
2781
- "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-7.5.2.tgz",
2782
- "integrity": "sha512-ap0QEMMcHbd+r86UQHRc9EsDvgP0PIio56B0Phh3iwQ5STEClCUGEGVwCVrxqlrwSCRYM26Glx39vwgGUyHUPA==",
2787
+ "version": "7.5.3",
2788
+ "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-7.5.3.tgz",
2789
+ "integrity": "sha512-afI01Azk7IZdL/sI+qUDpvhAv+G5jQLq8SirqdzP6+GciiP15yWELAKhfhMYwJAB+qI37/J2uZzgHo/4a2FQXQ==",
2783
2790
  "dependencies": {
2784
2791
  "@appium/logger": "^1.3.0",
2785
2792
  "asyncbox": "^3.0.0",
@@ -2788,7 +2795,7 @@
2788
2795
  "rimraf": "^5.0.0",
2789
2796
  "semver": "^7.0.0",
2790
2797
  "source-map-support": "^0.x",
2791
- "teen_process": "^2.0.0",
2798
+ "teen_process": "^2.2.0",
2792
2799
  "uuid": "^10.0.0",
2793
2800
  "which": "^4.0.0"
2794
2801
  },
@@ -3252,9 +3259,9 @@
3252
3259
  }
3253
3260
  },
3254
3261
  "node_modules/rimraf": {
3255
- "version": "5.0.7",
3256
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
3257
- "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
3262
+ "version": "5.0.9",
3263
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz",
3264
+ "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==",
3258
3265
  "dependencies": {
3259
3266
  "glob": "^10.3.7"
3260
3267
  },
@@ -3262,7 +3269,7 @@
3262
3269
  "rimraf": "dist/esm/bin.mjs"
3263
3270
  },
3264
3271
  "engines": {
3265
- "node": ">=14.18"
3272
+ "node": "14 >=14.20 || 16 >=16.20 || >=18"
3266
3273
  },
3267
3274
  "funding": {
3268
3275
  "url": "https://github.com/sponsors/isaacs"
@@ -3813,9 +3820,9 @@
3813
3820
  }
3814
3821
  },
3815
3822
  "node_modules/text-decoder": {
3816
- "version": "1.1.0",
3817
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
3818
- "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
3823
+ "version": "1.1.1",
3824
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
3825
+ "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
3819
3826
  "dependencies": {
3820
3827
  "b4a": "^1.6.4"
3821
3828
  }
@@ -4041,9 +4048,9 @@
4041
4048
  "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
4042
4049
  },
4043
4050
  "node_modules/ws": {
4044
- "version": "8.17.1",
4045
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
4046
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
4051
+ "version": "8.18.0",
4052
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
4053
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
4047
4054
  "engines": {
4048
4055
  "node": ">=10.0.0"
4049
4056
  },
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "7.22.1",
11
+ "version": "7.23.1",
12
12
  "author": "Appium Contributors",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -135,7 +135,6 @@
135
135
  },
136
136
  "devDependencies": {
137
137
  "@appium/docutils": "^1.0.2",
138
- "@appium/eslint-config-appium": "^8.0.4",
139
138
  "@appium/eslint-config-appium-ts": "^0.x",
140
139
  "@appium/test-support": "^3.0.20",
141
140
  "@appium/tsconfig": "^0.x",
@@ -1 +0,0 @@
1
- {"version":3,"file":"devicectl.d.ts","sourceRoot":"","sources":["../../lib/devicectl.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAUH;;;;;;;;;;;;;GAaG;AAmBH;;;;;;;GAOG;AAEH;;GAEG;AAEH;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAGH;;;;;GAKG;AAEH;IACE;;;;OAIG;IACH,kBAHW,MAAM,OACN,OAAO,eAAe,EAAE,YAAY,EAK9C;IAFC,aAAgB;IAChB,0CAAc;IAGhB;;;;;OAKG;IACH,QAL8B,SAAS,SAAzB,cAAe,cAClB,MAAM,EAAE,iCAEP,OAAO,CAAC,SAAS,SAAS,UAAU,GAAG,OAAO,cAAc,EAAE,UAAU,GAAG,iDAA4C,CAAC,CA6CnI;IAED;;;;;OAKG;IACH,uBAHW,MAAM,GAAC,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAMxB;IAED;;;;OAIG;IACH,iBAFa,OAAO,CAAC,WAAW,EAAE,CAAC,CAKlC;IAED;;;;;;;;;;;OAWG;IACH,sBATW,MAAM,oBAKN,MAAM,wCAEJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB7B;IAED;;;;;;;OAOG;IACH,eALW,MAAM,MACN,MAAM,QACN,eAAe,GACb,OAAO,CAAC,MAAM,CAAC,CAkB3B;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,GAAC,MAAM,UACb,MAAM,GAAC,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;;OAMG;IACH,gDAFa,OAAO,CAAC,OAAO,EAAE,CAAC,CAW9B;IAED;;;;;;;;;OASG;IACH,oBALW,MAAM,QACN,gBAAgB,GACd,OAAO,CAAC,IAAI,CAAC,CAqBzB;CACF;;uBA1Ra,MAAM;gBACN,MAAM;;;aAaN,OAAO;sBACP,OAAO;sBACP,MAAM;mBACN,MAAM;gBACN,OAAO;YACP,OAAO;iBACP,OAAO;UACP,MAAM;eACN,OAAO;SACP,MAAM;aACN,MAAM;;;;;;;;;yBA8BP;IAAC,YAAY,EAAE,IAAI,CAAA;CAAC;;;;;;;;;;;;;;;;;;;;;;;gBAYnB,MAAM;;;;sBAKN,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"devicectl.js","sourceRoot":"","sources":["../../lib/devicectl.js"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- export default Pyidevice;
2
- export class Pyidevice {
3
- /**
4
- * @param {string} udid
5
- */
6
- constructor(udid: string);
7
- udid: string;
8
- binaryPath: string | null;
9
- /**
10
- * @param {boolean} isStrict
11
- * @return {Promise<boolean>}
12
- */
13
- assertExists(isStrict?: boolean): Promise<boolean>;
14
- /**
15
- * @typedef {Object} ExecuteOptions
16
- * @property {string} cwd
17
- * @property {string?} format [json]
18
- * @property {boolean} logStdout [false]
19
- * @property {boolean} asynchronous [false]
20
- */
21
- /**
22
- * @param {string[]} args
23
- * @param {Partial<ExecuteOptions>} opts
24
- * @return {Promise<import('teen_process').TeenProcessExecResult|import('teen_process').SubProcess>}
25
- */
26
- execute(args: string[], opts?: Partial<{
27
- cwd: string;
28
- /**
29
- * [json]
30
- */
31
- format: string | null;
32
- /**
33
- * [false]
34
- */
35
- logStdout: boolean;
36
- /**
37
- * [false]
38
- */
39
- asynchronous: boolean;
40
- }>): Promise<import("teen_process").TeenProcessExecResult<any> | import("teen_process").SubProcess>;
41
- /**
42
- * @return {Promise<object>}
43
- */
44
- listProfiles(): Promise<object>;
45
- /**
46
- *
47
- * @param { {profilePath?: string, payload: string|Buffer} } opts
48
- * @privateRemarks The error below seems to suggest that `payload` can be undefined, but the code suggests otherwise
49
- */
50
- installProfile(opts: {
51
- profilePath?: string;
52
- payload: string | Buffer;
53
- }): Promise<void>;
54
- /**
55
- *
56
- * @param {string} name
57
- * @returns {Promise<string>}
58
- */
59
- removeProfile(name: string): Promise<string>;
60
- /**
61
- * @returns {Promise<object>}
62
- */
63
- listCrashes(): Promise<object>;
64
- /**
65
- * @param {string} name
66
- * @param {string} dstFolder
67
- * @returns {Promise<void>}
68
- */
69
- exportCrash(name: string, dstFolder: string): Promise<void>;
70
- /**
71
- * @param {string} dstFile
72
- */
73
- collectPcap(dstFile: string): Promise<SubProcess | import("teen_process").TeenProcessExecResult<any>>;
74
- }
75
- import { SubProcess } from 'teen_process';
76
- //# sourceMappingURL=py-ios-device-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"py-ios-device-client.d.ts","sourceRoot":"","sources":["../../lib/py-ios-device-client.js"],"names":[],"mappings":";AASA;IACE;;OAEG;IACH,kBAFW,MAAM,EAKhB;IAFC,aAAgB;IAChB,0BAAsB;IAGxB;;;OAGG;IACH,wBAHW,OAAO,GACN,OAAO,CAAC,OAAO,CAAC,CAoB3B;IAED;;;;;;OAMG;IAEH;;;;OAIG;IACH,cAJW,MAAM,EAAE,SACR,OAAO;aARJ,MAAM;;;;gBACN,MAAM,OAAC;;;;mBACP,OAAO;;;;sBACP,OAAO;MAKa,GACtB,OAAO,CAAC,iDAA4C,GAAC,OAAO,cAAc,EAAE,UAAU,CAAC,CA2BlG;IAED;;OAEG;IACH,gBAFY,OAAO,CAAC,MAAM,CAAC,CAO1B;IAED;;;;OAIG;IACH,qBAHY;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAC,MAAM,CAAA;KAAC,iBAyBzD;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;OAEG;IACH,eAFa,OAAO,CAAC,MAAM,CAAC,CAO3B;IAED;;;;OAIG;IACH,kBAJW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAQzB;IACD;;OAEG;IACH,qBAFW,MAAM,2EAOhB;CACF;2BAnK8B,cAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"py-ios-device-client.js","sourceRoot":"","sources":["../../lib/py-ios-device-client.js"],"names":[],"mappings":"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"}
@@ -1,146 +0,0 @@
1
- import {fs, tempDir} from 'appium/support';
2
- import B from 'bluebird';
3
- import log from '../logger';
4
- import {utilities} from 'appium-ios-device';
5
- import path from 'path';
6
- import _ from 'lodash';
7
- import Pyidevice from '../py-ios-device-client';
8
-
9
- const REAL_DEVICE_MAGIC = '3620bbb0-fb9f-4b62-a668-896f2edc4d88';
10
- const MAGIC_SEP = '/';
11
- // The file format has been changed from '.crash' to '.ips' since Monterey.
12
- const CRASH_REPORTS_GLOB_PATTERN = '**/*.@(crash|ips)';
13
-
14
- class IOSCrashLog {
15
- constructor(opts = {}) {
16
- this.udid = opts.udid;
17
- this.pyideviceClient = this.udid ? new Pyidevice(this.udid) : null;
18
- const root = process.env.HOME || '/';
19
- const logDir = opts.udid
20
- ? path.resolve(root, 'Library', 'Logs', 'CrashReporter', 'MobileDevice')
21
- : path.resolve(root, 'Library', 'Logs', 'DiagnosticReports');
22
- this.logDir = logDir || path.resolve(root, 'Library', 'Logs', 'DiagnosticReports');
23
- this.prevLogs = [];
24
- this.logsSinceLastRequest = [];
25
- this.phoneName = null;
26
- this.sim = opts.sim;
27
- }
28
-
29
- /**
30
- * @returns {Promise<string[]>}
31
- */
32
- async _gatherFromRealDevice() {
33
- if (await this.pyideviceClient?.assertExists(false)) {
34
- return (await /** @type {Pyidevice} */ (this.pyideviceClient).listCrashes()).map(
35
- (x) => `${REAL_DEVICE_MAGIC}${MAGIC_SEP}${x}`,
36
- );
37
- }
38
-
39
- let crashLogsRoot = this.logDir;
40
- if (this.udid) {
41
- this.phoneName = this.phoneName || (await utilities.getDeviceName(this.udid));
42
- crashLogsRoot = path.resolve(crashLogsRoot, this.phoneName);
43
- }
44
- if (!(await fs.exists(crashLogsRoot))) {
45
- log.debug(`Crash reports root '${crashLogsRoot}' does not exist. Got nothing to gather.`);
46
- return [];
47
- }
48
- return await fs.glob(CRASH_REPORTS_GLOB_PATTERN, {
49
- cwd: crashLogsRoot,
50
- absolute: true,
51
- });
52
- }
53
-
54
- /**
55
- * @returns {Promise<string[]>}
56
- */
57
- async _gatherFromSimulator() {
58
- if (!(await fs.exists(this.logDir))) {
59
- log.debug(`Crash reports root '${this.logDir}' does not exist. Got nothing to gather.`);
60
- return [];
61
- }
62
- const foundFiles = await fs.glob(CRASH_REPORTS_GLOB_PATTERN, {
63
- cwd: this.logDir,
64
- absolute: true,
65
- });
66
- // For Simulator only include files, that contain current UDID
67
- return await B.filter(foundFiles, async (x) => {
68
- try {
69
- const content = await fs.readFile(x, 'utf8');
70
- return content.toUpperCase().includes(this.sim.udid.toUpperCase());
71
- } catch (err) {
72
- return false;
73
- }
74
- });
75
- }
76
-
77
- /**
78
- * @returns {Promise<string[]>}
79
- */
80
- async getCrashes() {
81
- return this.udid ? await this._gatherFromRealDevice() : await this._gatherFromSimulator();
82
- }
83
-
84
- /**
85
- * @returns {Promise<void>}
86
- */
87
- async startCapture() {
88
- this.prevLogs = await this.getCrashes();
89
- }
90
-
91
- /**
92
- * @returns {Promise<void>}
93
- */
94
- async stopCapture() {
95
- // needed for consistent API with other logs
96
- }
97
-
98
- /**
99
- * @returns {Promise<import('../commands/types').LogEntry[]>}
100
- */
101
- async getLogs() {
102
- let crashFiles = await this.getCrashes();
103
- let diff = _.difference(crashFiles, this.prevLogs, this.logsSinceLastRequest);
104
- this.logsSinceLastRequest = _.union(this.logsSinceLastRequest, diff);
105
- return await this.filesToJSON(diff);
106
- }
107
-
108
- /**
109
- * @param {string[]} paths
110
- * @returns {Promise<import('../commands/types').LogEntry[]>}
111
- */
112
- async filesToJSON(paths) {
113
- const tmpRoot = await tempDir.openDir();
114
- try {
115
- return /** @type {import('../commands/types').LogEntry[]} */ ((
116
- await B.map(paths, async (fullPath) => {
117
- if (_.includes(fullPath, REAL_DEVICE_MAGIC)) {
118
- const fileName = /** @type {string} */ (_.last(fullPath.split(MAGIC_SEP)));
119
- try {
120
- // @ts-expect-error If pyideviceClient is not defined, then the exception will be caught below
121
- await this.pyideviceClient.exportCrash(fileName, tmpRoot);
122
- } catch (e) {
123
- log.warn(
124
- `Cannot export the crash report '${fileName}'. Skipping it. ` +
125
- `Original error: ${e.message}`,
126
- );
127
- return;
128
- }
129
- fullPath = path.join(tmpRoot, fileName);
130
- }
131
- const stat = await fs.stat(fullPath);
132
- return {
133
- timestamp: stat.ctime.getTime(),
134
- level: 'ALL',
135
- message: await fs.readFile(fullPath, 'utf8'),
136
- };
137
- })
138
- ).filter(Boolean));
139
- } finally {
140
- await fs.rimraf(tmpRoot);
141
- }
142
- }
143
- }
144
-
145
- export {IOSCrashLog};
146
- export default IOSCrashLog;