UNPKG

appium-ios-simulator

Version:
73 lines (66 loc) 2.27 kB
import { SimulatorXcode10 } from './simulator-xcode-10'; import { SimulatorXcode11 } from './simulator-xcode-11'; import { SimulatorXcode11_4 } from './simulator-xcode-11.4'; import { SimulatorXcode14 } from './simulator-xcode-14'; import { SimulatorXcode15 } from './simulator-xcode-15'; import { getSimulatorInfo, assertXcodeVersion, MIN_SUPPORTED_XCODE_VERSION } from './utils'; import * as xcode from 'appium-xcode'; import { log } from './logger'; /** * Finds and returns the corresponding Simulator instance for the given ID. * * @param {string} udid - The ID of an existing Simulator. * @param {import('./types').SimulatorLookupOptions} [opts={}] * @throws {Error} If the Simulator with given udid does not exist in devices list. * If you want to create a new simulator, you can use the `createDevice()` method of * [node-simctl](github.com/appium/node-simctl). * @return {Promise<import('./types').Simulator>} Simulator object associated with the udid passed in. */ export async function getSimulator (udid, opts = {}) { let { platform = 'iOS', checkExistence = true, devicesSetPath, logger, } = opts; const xcodeVersion = assertXcodeVersion( /** @type {import('appium-xcode').XcodeVersion} */ (await xcode.getVersion(true)) ); if (checkExistence) { const simulatorInfo = await getSimulatorInfo(udid, { devicesSetPath }); if (!simulatorInfo) { throw new Error(`No sim found with udid '${udid}'`); } platform = simulatorInfo.platform; } (logger ?? log).info( `Constructing ${platform} simulator for Xcode version ${xcodeVersion.versionString} with udid '${udid}'` ); let SimClass; switch (xcodeVersion.major) { case MIN_SUPPORTED_XCODE_VERSION: SimClass = SimulatorXcode10; break; case 11: SimClass = xcodeVersion.minor < 4 ? SimulatorXcode11 : SimulatorXcode11_4; break; case 12: case 13: SimClass = SimulatorXcode11_4; break; case 14: SimClass = SimulatorXcode14; break; case 15: default: SimClass = SimulatorXcode15; break; } const result = new SimClass(udid, xcodeVersion, logger); if (devicesSetPath) { result.devicesSetPath = devicesSetPath; } return result; }