appium-xcuitest-driver 12.18.3 → 12.19.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,14 @@
1
+ ## [12.19.0](https://github.com/appium/appium-xcuitest-driver/compare/v12.18.3...v12.19.0) (2026-10-18)
2
+
3
+ ### Features
4
+
5
+ * capture selected simulator displays through CoreSim fallback ([#3030](https://github.com/appium/appium-xcuitest-driver/issues/3030)) ([80b341c](https://github.com/appium/appium-xcuitest-driver/commit/80b341c929b26a3ac278089a5fd1c3af8ca9a943))
6
+
7
+ ### Bug Fixes
8
+
9
+ * preserve recording padding when MJPEG frame geometry changes ([#3048](https://github.com/appium/appium-xcuitest-driver/issues/3048)) ([c860f30](https://github.com/appium/appium-xcuitest-driver/commit/c860f308b23c29e33d2bfa37773e691045c15c4c))
10
+ * retain and clean up screen recorder after stop failure ([#3049](https://github.com/appium/appium-xcuitest-driver/issues/3049)) ([a4b262a](https://github.com/appium/appium-xcuitest-driver/commit/a4b262a642da4e5f9a6a83a99959bdba9f7dce8c))
11
+
1
12
  ## [12.18.3](https://github.com/appium/appium-xcuitest-driver/compare/v12.18.2...v12.18.3) (2026-10-18)
2
13
 
3
14
  ### Bug Fixes
@@ -27,6 +27,7 @@ export declare class ScreenRecorder {
27
27
  private readonly udid;
28
28
  private mainProcess;
29
29
  private timeoutHandler;
30
+ private stopFailed;
30
31
  constructor(udid: string, log: any, videoPath: string, opts: ScreenRecorderOptions);
31
32
  start(timeoutMs: number): Promise<void>;
32
33
  interrupt(force?: boolean): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,wCAAwC,wOAiBgB,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uCAAuC,6FAQgB,CAAC;AAuErE,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAwB;gBAElC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB;IAS5E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0GvC,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB1C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAkGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1G;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhH"}
1
+ {"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,wCAAwC,wOAiBgB,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uCAAuC,6FAQgB,CAAC;AAuErE,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB;IAS5E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8IvC,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC1C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAQzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAkGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1G;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhH"}
@@ -1,7 +1,7 @@
1
1
  import { WDA_BASE_URL } from 'appium-webdriveragent';
2
2
  import { fs, tempDir, logger, util } from 'appium/support.js';
3
3
  import { waitForCondition } from 'asyncbox';
4
- import { SubProcess } from 'teen_process';
4
+ import { exec, SubProcess } from 'teen_process';
5
5
  import { encodeBase64OrUpload } from './helpers/index.js';
6
6
  /**
7
7
  * Optional execute-script keys for `mobile: startScreenRecording`, in Appium flattened-arg order.
@@ -103,6 +103,7 @@ export class ScreenRecorder {
103
103
  udid;
104
104
  mainProcess;
105
105
  timeoutHandler;
106
+ stopFailed = false;
106
107
  constructor(udid, log, videoPath, opts) {
107
108
  this.videoPath = videoPath;
108
109
  this.log = log;
@@ -143,19 +144,51 @@ export class ScreenRecorder {
143
144
  // Raw MJPEG has no timestamps; override ffmpeg's 25 fps default for every codec.
144
145
  args.push('-r', String(videoFps || DEFAULT_FPS));
145
146
  const useAutomaticCanvas = !videoFilters && !videoScale && !hardwareAcceleration;
147
+ const parsed = new URL(remoteUrl);
148
+ const streamUrl = `${parsed.protocol}//${parsed.hostname}:${remotePort}`;
149
+ let canvas;
146
150
  if (useAutomaticCanvas) {
147
- // Preserve the first frame's filter geometry across input size changes.
148
- // Let ffmpeg establish the canvas without a separate stream probe.
151
+ // pad must recalculate its offsets when frames change size, but its canvas
152
+ // must remain fixed. Probe with ffmpeg itself to support raw and multipart
153
+ // MJPEG without requiring ffprobe or an optional image library.
154
+ const { stdout } = await exec(FFMPEG_BINARY, [
155
+ '-v',
156
+ 'error',
157
+ '-f',
158
+ 'mjpeg',
159
+ '-probesize',
160
+ '32',
161
+ '-analyzeduration',
162
+ '0',
163
+ '-i',
164
+ streamUrl,
165
+ '-frames:v',
166
+ '1',
167
+ '-c:v',
168
+ 'png',
169
+ '-f',
170
+ 'image2pipe',
171
+ 'pipe:1',
172
+ ], { isBuffer: true, timeout: Math.min(timeoutMs, 10000), maxStdoutBufferSize: 32 * 1024 * 1024 });
173
+ if (stdout.length < 24 || !stdout.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) {
174
+ throw new Error('Cannot determine the recording canvas from the first MJPEG frame');
175
+ }
176
+ canvas = {
177
+ width: Math.ceil(stdout.readUInt32BE(16) / 2) * 2,
178
+ height: Math.ceil(stdout.readUInt32BE(20) / 2) * 2,
179
+ };
180
+ if (!canvas.width || !canvas.height) {
181
+ throw new Error('The first MJPEG frame has invalid dimensions');
182
+ }
149
183
  args.push('-reinit_filter', '0');
150
184
  }
151
- const parsed = new URL(remoteUrl);
152
- args.push('-i', `${parsed.protocol}//${parsed.hostname}:${remotePort}`);
185
+ args.push('-i', streamUrl);
153
186
  if (videoFilters || videoScale) {
154
187
  args.push('-vf', videoFilters || `${scaleFilterHWAccel || 'scale'}=${videoScale}`);
155
188
  }
156
- else if (useAutomaticCanvas) {
157
- args.push('-vf', 'scale=ceil(iw/2)*2:ceil(ih/2)*2:force_original_aspect_ratio=decrease:force_divisible_by=2,' +
158
- 'pad=ceil(iw/2)*2:ceil(ih/2)*2:(ow-iw)/2:(oh-ih)/2,setsar=1');
189
+ else if (canvas) {
190
+ args.push('-vf', `scale=${canvas.width}:${canvas.height}:force_original_aspect_ratio=decrease:force_divisible_by=2:eval=frame,` +
191
+ `pad=${canvas.width}:${canvas.height}:(ow-iw)/2:(oh-ih)/2:eval=frame,setsar=1`);
159
192
  }
160
193
  // Quicktime compatibility via pixelFormat: 'yuv420p'
161
194
  if (pixelFormat) {
@@ -204,21 +237,40 @@ export class ScreenRecorder {
204
237
  clearTimeout(this.timeoutHandler);
205
238
  this.timeoutHandler = null;
206
239
  }
207
- if (this.mainProcess?.isRunning) {
208
- const interruptPromise = this.mainProcess.stop(force ? 'SIGTERM' : 'SIGINT');
209
- this.mainProcess = null;
240
+ const process = this.mainProcess;
241
+ if (process?.isRunning) {
210
242
  try {
211
- await interruptPromise;
243
+ await process.stop(force ? 'SIGTERM' : 'SIGINT');
212
244
  }
213
245
  catch (e) {
246
+ // A disconnected MJPEG source can leave ffmpeg waiting to reconnect. Keep
247
+ // its handle so cleanup can retry; its MP4 trailer may not be written.
248
+ this.stopFailed = true;
214
249
  this.log.warn(`Cannot ${force ? 'terminate' : 'interrupt'} ${FFMPEG_BINARY}. ` + `Original error: ${e.message}`);
215
250
  result = false;
251
+ if (force && process.isRunning) {
252
+ try {
253
+ await process.stop('SIGKILL');
254
+ result = true;
255
+ }
256
+ catch (killError) {
257
+ this.log.warn(`Cannot kill ${FFMPEG_BINARY}. Original error: ${killError.message}`);
258
+ }
259
+ }
260
+ }
261
+ finally {
262
+ if (!process.isRunning && this.mainProcess === process) {
263
+ this.mainProcess = null;
264
+ }
216
265
  }
217
266
  }
218
267
  return result;
219
268
  }
220
269
  async finish() {
221
- await this.interrupt();
270
+ const stopped = await this.interrupt();
271
+ if (!stopped || this.stopFailed) {
272
+ throw new Error(`Cannot finalize the screen recording because ${FFMPEG_BINARY} failed to stop gracefully`);
273
+ }
222
274
  return this.videoPath;
223
275
  }
224
276
  async cleanup() {
@@ -1 +1 @@
1
- {"version":3,"file":"recordscreen.js","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordscreen.js","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAM3C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuEzE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9G;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCjF"}
1
+ {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAM3C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyEzE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9G;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCjF"}
@@ -32,16 +32,11 @@ export async function getScreenshot() {
32
32
  }
33
33
  return data;
34
34
  };
35
- // The current MJPEG stream and simulator fallback do not select a display.
36
- // CoreSim supports display selection, but requires a display port UUID rather
37
- // than WDA's numeric display ID. Use WDA until that mapping is implemented.
38
35
  const { currentDisplayId } = await this.settings.getSettings();
39
- if (currentDisplayId !== undefined && currentDisplayId !== null) {
40
- return await getScreenshotFromWDA();
41
- }
36
+ const hasSelectedDisplay = currentDisplayId !== undefined && currentDisplayId !== null;
42
37
  // Frames carry no display identity. Once selection changes, even resetting to
43
38
  // the main display cannot safely reuse this stream (old frames may be queued).
44
- if (this.mjpegStream && !this._hasUpdatedDisplaySelection) {
39
+ if (this.mjpegStream && !hasSelectedDisplay && !this._hasUpdatedDisplaySelection) {
45
40
  this.log.info(`mjpeg video stream provided, returning latest frame as screenshot`);
46
41
  // Preserve legacy conversion unless orientation correction was explicitly enabled.
47
42
  const fixOrientation = this.settings.getSettings().mjpegFixOrientation === true;
@@ -52,22 +47,28 @@ export async function getScreenshot() {
52
47
  this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +
53
48
  'was no data yet. Falling back to regular screenshot methods.');
54
49
  }
50
+ let wdaError;
55
51
  try {
56
52
  return await getScreenshotFromWDA();
57
53
  }
58
54
  catch (err) {
55
+ wdaError = err;
59
56
  this.log.warn(`Error getting screenshot: ${err.message}`);
60
57
  }
61
- // simulator attempt
62
58
  if (this.isSimulator()) {
63
- this.log.info(`Falling back to 'simctl io screenshot' API`);
64
- const payload = await this.device.getScreenshot();
59
+ this.log.info('Falling back to CoreSimulator screenshot capture');
60
+ const payload = await this.device.getScreenshot({
61
+ displayId: currentDisplayId ?? undefined,
62
+ });
65
63
  if (!payload || payload.length === 0) {
66
64
  throw new errors.UnableToCaptureScreen();
67
65
  }
68
66
  return payload.toString('base64');
69
67
  }
70
- // Retry for real devices only. Fail fast on Simulator if simctl does not work as expected
68
+ if (hasSelectedDisplay) {
69
+ throw wdaError;
70
+ }
71
+ // Retry for real devices only.
71
72
  return (await retryInterval(2, 1000, getScreenshotFromWDA));
72
73
  }
73
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../lib/commands/screenshots.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import {WDA_BASE_URL} from 'appium-webdriveragent';
2
2
  import type {WDASettings} from 'appium-webdriveragent';
3
3
  import {fs, tempDir, logger, util} from 'appium/support.js';
4
4
  import {waitForCondition} from 'asyncbox';
5
- import {SubProcess} from 'teen_process';
5
+ import {exec, SubProcess} from 'teen_process';
6
6
 
7
7
  import type {XCUITestDriver} from '../driver.js';
8
8
  import {encodeBase64OrUpload} from './helpers/index.js';
@@ -132,6 +132,7 @@ export class ScreenRecorder {
132
132
  private readonly udid: string;
133
133
  private mainProcess: SubProcess | null;
134
134
  private timeoutHandler: NodeJS.Timeout | null;
135
+ private stopFailed = false;
135
136
 
136
137
  constructor(udid: string, log: any, videoPath: string, opts: ScreenRecorderOptions) {
137
138
  this.videoPath = videoPath;
@@ -182,21 +183,57 @@ export class ScreenRecorder {
182
183
  // Raw MJPEG has no timestamps; override ffmpeg's 25 fps default for every codec.
183
184
  args.push('-r', String(videoFps || DEFAULT_FPS));
184
185
  const useAutomaticCanvas = !videoFilters && !videoScale && !hardwareAcceleration;
186
+ const parsed = new URL(remoteUrl);
187
+ const streamUrl = `${parsed.protocol}//${parsed.hostname}:${remotePort}`;
188
+ let canvas: {width: number; height: number} | undefined;
185
189
  if (useAutomaticCanvas) {
186
- // Preserve the first frame's filter geometry across input size changes.
187
- // Let ffmpeg establish the canvas without a separate stream probe.
190
+ // pad must recalculate its offsets when frames change size, but its canvas
191
+ // must remain fixed. Probe with ffmpeg itself to support raw and multipart
192
+ // MJPEG without requiring ffprobe or an optional image library.
193
+ const {stdout} = await exec(
194
+ FFMPEG_BINARY,
195
+ [
196
+ '-v',
197
+ 'error',
198
+ '-f',
199
+ 'mjpeg',
200
+ '-probesize',
201
+ '32',
202
+ '-analyzeduration',
203
+ '0',
204
+ '-i',
205
+ streamUrl,
206
+ '-frames:v',
207
+ '1',
208
+ '-c:v',
209
+ 'png',
210
+ '-f',
211
+ 'image2pipe',
212
+ 'pipe:1',
213
+ ],
214
+ {isBuffer: true, timeout: Math.min(timeoutMs, 10000), maxStdoutBufferSize: 32 * 1024 * 1024},
215
+ );
216
+ if (stdout.length < 24 || !stdout.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]))) {
217
+ throw new Error('Cannot determine the recording canvas from the first MJPEG frame');
218
+ }
219
+ canvas = {
220
+ width: Math.ceil(stdout.readUInt32BE(16) / 2) * 2,
221
+ height: Math.ceil(stdout.readUInt32BE(20) / 2) * 2,
222
+ };
223
+ if (!canvas.width || !canvas.height) {
224
+ throw new Error('The first MJPEG frame has invalid dimensions');
225
+ }
188
226
  args.push('-reinit_filter', '0');
189
227
  }
190
- const parsed = new URL(remoteUrl);
191
- args.push('-i', `${parsed.protocol}//${parsed.hostname}:${remotePort}`);
228
+ args.push('-i', streamUrl);
192
229
 
193
230
  if (videoFilters || videoScale) {
194
231
  args.push('-vf', videoFilters || `${scaleFilterHWAccel || 'scale'}=${videoScale}`);
195
- } else if (useAutomaticCanvas) {
232
+ } else if (canvas) {
196
233
  args.push(
197
234
  '-vf',
198
- 'scale=ceil(iw/2)*2:ceil(ih/2)*2:force_original_aspect_ratio=decrease:force_divisible_by=2,' +
199
- 'pad=ceil(iw/2)*2:ceil(ih/2)*2:(ow-iw)/2:(oh-ih)/2,setsar=1',
235
+ `scale=${canvas.width}:${canvas.height}:force_original_aspect_ratio=decrease:force_divisible_by=2:eval=frame,` +
236
+ `pad=${canvas.width}:${canvas.height}:(ow-iw)/2:(oh-ih)/2:eval=frame,setsar=1`,
200
237
  );
201
238
  }
202
239
 
@@ -256,16 +293,30 @@ export class ScreenRecorder {
256
293
  this.timeoutHandler = null;
257
294
  }
258
295
 
259
- if (this.mainProcess?.isRunning) {
260
- const interruptPromise = this.mainProcess.stop(force ? 'SIGTERM' : 'SIGINT');
261
- this.mainProcess = null;
296
+ const process = this.mainProcess;
297
+ if (process?.isRunning) {
262
298
  try {
263
- await interruptPromise;
299
+ await process.stop(force ? 'SIGTERM' : 'SIGINT');
264
300
  } catch (e: any) {
301
+ // A disconnected MJPEG source can leave ffmpeg waiting to reconnect. Keep
302
+ // its handle so cleanup can retry; its MP4 trailer may not be written.
303
+ this.stopFailed = true;
265
304
  this.log.warn(
266
305
  `Cannot ${force ? 'terminate' : 'interrupt'} ${FFMPEG_BINARY}. ` + `Original error: ${e.message}`,
267
306
  );
268
307
  result = false;
308
+ if (force && process.isRunning) {
309
+ try {
310
+ await process.stop('SIGKILL');
311
+ result = true;
312
+ } catch (killError: any) {
313
+ this.log.warn(`Cannot kill ${FFMPEG_BINARY}. Original error: ${killError.message}`);
314
+ }
315
+ }
316
+ } finally {
317
+ if (!process.isRunning && this.mainProcess === process) {
318
+ this.mainProcess = null;
319
+ }
269
320
  }
270
321
  }
271
322
 
@@ -273,7 +324,10 @@ export class ScreenRecorder {
273
324
  }
274
325
 
275
326
  async finish(): Promise<string> {
276
- await this.interrupt();
327
+ const stopped = await this.interrupt();
328
+ if (!stopped || this.stopFailed) {
329
+ throw new Error(`Cannot finalize the screen recording because ${FFMPEG_BINARY} failed to stop gracefully`);
330
+ }
277
331
  return this.videoPath;
278
332
  }
279
333
 
@@ -41,17 +41,12 @@ export async function getScreenshot(this: XCUITestDriver): Promise<string> {
41
41
  return data;
42
42
  };
43
43
 
44
- // The current MJPEG stream and simulator fallback do not select a display.
45
- // CoreSim supports display selection, but requires a display port UUID rather
46
- // than WDA's numeric display ID. Use WDA until that mapping is implemented.
47
44
  const {currentDisplayId} = await this.settings.getSettings();
48
- if (currentDisplayId !== undefined && currentDisplayId !== null) {
49
- return await getScreenshotFromWDA();
50
- }
45
+ const hasSelectedDisplay = currentDisplayId !== undefined && currentDisplayId !== null;
51
46
 
52
47
  // Frames carry no display identity. Once selection changes, even resetting to
53
48
  // the main display cannot safely reuse this stream (old frames may be queued).
54
- if (this.mjpegStream && !this._hasUpdatedDisplaySelection) {
49
+ if (this.mjpegStream && !hasSelectedDisplay && !this._hasUpdatedDisplaySelection) {
55
50
  this.log.info(`mjpeg video stream provided, returning latest frame as screenshot`);
56
51
  // Preserve legacy conversion unless orientation correction was explicitly enabled.
57
52
  const fixOrientation = this.settings.getSettings().mjpegFixOrientation === true;
@@ -65,23 +60,30 @@ export async function getScreenshot(this: XCUITestDriver): Promise<string> {
65
60
  );
66
61
  }
67
62
 
63
+ let wdaError: unknown;
68
64
  try {
69
65
  return await getScreenshotFromWDA();
70
66
  } catch (err: any) {
67
+ wdaError = err;
71
68
  this.log.warn(`Error getting screenshot: ${err.message}`);
72
69
  }
73
70
 
74
- // simulator attempt
75
71
  if (this.isSimulator()) {
76
- this.log.info(`Falling back to 'simctl io screenshot' API`);
77
- const payload = await (this.device as Simulator).getScreenshot();
72
+ this.log.info('Falling back to CoreSimulator screenshot capture');
73
+ const payload = await (this.device as Simulator).getScreenshot({
74
+ displayId: currentDisplayId ?? undefined,
75
+ });
78
76
  if (!payload || payload.length === 0) {
79
77
  throw new errors.UnableToCaptureScreen();
80
78
  }
81
79
  return payload.toString('base64');
82
80
  }
83
81
 
84
- // Retry for real devices only. Fail fast on Simulator if simctl does not work as expected
82
+ if (hasSelectedDisplay) {
83
+ throw wdaError;
84
+ }
85
+
86
+ // Retry for real devices only.
85
87
  return (await retryInterval(2, 1000, getScreenshotFromWDA)) as string;
86
88
  }
87
89
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "12.18.3",
3
+ "version": "12.19.0",
4
4
  "description": "Appium driver for iOS using XCUITest for backend",
5
5
  "keywords": [
6
6
  "appium",