expo/expo · error
Device not found: ${TARGET_DEVICE}
Error message
Device not found: ${TARGET_DEVICE} What it means
Error "Device not found: ${TARGET_DEVICE}" thrown in expo/expo.
Source
Thrown at apps/bare-expo/scripts/start-ios-e2e-test.ts:43
import { getDylibPath } from '../e2e/image-comparison/inspector/ScreenInspectorIOS';
const TARGET_DEVICE = 'iPhone 17 Pro';
const TARGET_DEVICE_IOS_VERSION = 26;
const APP_ID = 'dev.expo.Payments';
const OUTPUT_APP_PATH = 'ios/build/BareExpo.app';
const NUM_OF_RETRIES = 6;
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
(async () => {
try {
const startMode = getStartMode(__filename);
const projectRoot = path.resolve(__dirname, '..');
const deviceId = await queryDeviceIdAsync(TARGET_DEVICE_IOS_VERSION, TARGET_DEVICE);
if (!deviceId) {
throw new Error(`Device not found: ${TARGET_DEVICE}`);
}
const appBinaryPath = path.join(projectRoot, OUTPUT_APP_PATH);
if (startMode === 'BUILD' || startMode === 'BUILD_AND_TEST') {
const binaryPath = await buildAsync(projectRoot, deviceId);
await ensureDirAsync(path.dirname(appBinaryPath));
await fs.cp(binaryPath, appBinaryPath, { recursive: true });
}
if (startMode === 'TEST' || startMode === 'BUILD_AND_TEST') {
const e2eDir = path.join(projectRoot, 'e2e');
// The simulator, the app and the maestro driver survive across maestro invocations,
// so set everything up only once instead of paying for it on every flow and retry.
await startSimulatorAsync(deviceId);
await preApproveDeepLinkPromptAsync(deviceId);
await installAppAsync(deviceId, appBinaryPath);
await launchAppWithInspectorAsync(deviceId);
View on GitHub (pinned to b09195aac2)
When it happens
Trigger: Thrown at apps/bare-expo/scripts/start-ios-e2e-test.ts:43 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of expo/expo@b09195aac2 (2026-08-12).
Data as JSON: /api/errors/1522d91b706bbfc6.
Report an issue: GitHub.