From 673a955176df880d31b6ca6feaa5b09fb6cf29c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 3 Jun 2026 09:11:58 -0700 Subject: [PATCH 1/2] fix: align iOS runner cache target metadata --- scripts/write-xcuitest-cache-metadata.mjs | 2 +- .../ios/__tests__/runner-xctestrun.test.ts | 22 +++++++++++++++++++ src/platforms/ios/runner-xctestrun.ts | 4 ++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/scripts/write-xcuitest-cache-metadata.mjs b/scripts/write-xcuitest-cache-metadata.mjs index befa4af52..c0bfe8c79 100644 --- a/scripts/write-xcuitest-cache-metadata.mjs +++ b/scripts/write-xcuitest-cache-metadata.mjs @@ -113,7 +113,7 @@ function resolveDeviceKind() { function resolveTarget() { if (platform === 'macos') return 'desktop'; if (platform === 'tvos') return 'tv'; - return 'phone'; + return 'mobile'; } function resolveMacRunnerArch() { diff --git a/src/platforms/ios/__tests__/runner-xctestrun.test.ts b/src/platforms/ios/__tests__/runner-xctestrun.test.ts index 621c22ede..df9f2772e 100644 --- a/src/platforms/ios/__tests__/runner-xctestrun.test.ts +++ b/src/platforms/ios/__tests__/runner-xctestrun.test.ts @@ -1,5 +1,6 @@ import { test, vi } from 'vitest'; import assert from 'node:assert/strict'; +import { execFileSync } from 'node:child_process'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; @@ -10,6 +11,7 @@ import { acquireXcodebuildSimulatorSetRedirect, findXctestrun, prepareXctestrunWithEnv, + resolveExpectedRunnerCacheMetadata, resolveXcodebuildSimulatorDeviceSetPath, scoreXctestrunCandidate, } from '../runner-xctestrun.ts'; @@ -19,6 +21,7 @@ const iosSimulator: DeviceInfo = { id: 'sim-1', name: 'iPhone Simulator', kind: 'simulator', + target: 'mobile', booted: true, }; @@ -193,6 +196,25 @@ test('scoreXctestrunCandidate penalizes macos and env xctestrun files for simula assert.ok(simulatorScore > macosEnvScore); }); +test('setup metadata script matches expected iOS simulator cache metadata', async () => { + await withTempDir('runner-cache-metadata-', async (root) => { + execFileSync( + process.execPath, + ['scripts/write-xcuitest-cache-metadata.mjs', 'ios', root, 'generic/platform=iOS Simulator'], + { cwd: process.cwd(), stdio: 'ignore' }, + ); + + const actual = JSON.parse( + fs.readFileSync(path.join(root, '.agent-device-runner-cache.json'), 'utf8'), + ); + const { artifacts: _actualArtifacts, ...actualComparable } = actual; + const { artifacts: _expectedArtifacts, ...expectedComparable } = + resolveExpectedRunnerCacheMetadata(iosSimulator); + + assert.deepEqual(actualComparable, expectedComparable); + }); +}); + test('prepareXctestrunWithEnv avoids XCTest screen recordings for nested and legacy targets', async () => { await withTempDir('runner-xctestrun-policy-', async (root) => { const xctestrunPath = path.join(root, 'AgentDeviceRunner.xctestrun'); diff --git a/src/platforms/ios/runner-xctestrun.ts b/src/platforms/ios/runner-xctestrun.ts index 7585d9b73..a4d745736 100644 --- a/src/platforms/ios/runner-xctestrun.ts +++ b/src/platforms/ios/runner-xctestrun.ts @@ -89,7 +89,7 @@ export type RunnerXctestrunCacheMetadata = { runnerSourceFingerprint: string; platformName: string; deviceKind: DeviceInfo['kind']; - target: DeviceInfo['target'] | 'phone'; + target: NonNullable; buildDestinationFamily: string; runnerBundleBuildSettings: string[]; runnerSigningBuildSettings: string[]; @@ -684,7 +684,7 @@ export function resolveExpectedRunnerCacheMetadata( runnerSourceFingerprint: computeRunnerSourceFingerprint(projectRoot), platformName: resolveRunnerPlatformName(device), deviceKind: device.kind, - target: device.target ?? 'phone', + target: device.target ?? 'mobile', buildDestinationFamily: resolveRunnerBuildDestinationFamily(device), runnerBundleBuildSettings: resolveRunnerBundleBuildSettings(process.env), runnerSigningBuildSettings: resolveRunnerSigningBuildSettings( From 7c08036534b874e033ab9de793b459f9ab603da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 3 Jun 2026 09:22:31 -0700 Subject: [PATCH 2/2] test: surface iOS cache metadata script stderr --- src/platforms/ios/__tests__/runner-xctestrun.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platforms/ios/__tests__/runner-xctestrun.test.ts b/src/platforms/ios/__tests__/runner-xctestrun.test.ts index df9f2772e..a5481db96 100644 --- a/src/platforms/ios/__tests__/runner-xctestrun.test.ts +++ b/src/platforms/ios/__tests__/runner-xctestrun.test.ts @@ -201,7 +201,7 @@ test('setup metadata script matches expected iOS simulator cache metadata', asyn execFileSync( process.execPath, ['scripts/write-xcuitest-cache-metadata.mjs', 'ios', root, 'generic/platform=iOS Simulator'], - { cwd: process.cwd(), stdio: 'ignore' }, + { cwd: process.cwd(), stdio: ['ignore', 'ignore', 'inherit'] }, ); const actual = JSON.parse(