import path from 'path'; import _ from 'lodash'; import { SimulatorXcode14 } from './simulator-xcode-14'; export class SimulatorXcode15 extends SimulatorXcode14 { private _systemAppBundleIds?: Set; /** * @override * @inheritdoc * * @param bundleId - The bundle id of the application to be checked. * @return True if the given application is installed. */ isAppInstalled = async (bundleId: string): Promise => { try { const info = await this.simctl.appInfo(bundleId); return info.CFBundleIdentifier === bundleId; } catch { return false; } }; /** * @override * @inheritdoc * * @returns The full path to the LaunchDaemons directory */ async getLaunchDaemonsRoot(): Promise { return path.resolve(await this._getSystemRoot(), 'System', 'Library', 'LaunchDaemons'); } /** * Sets the increase contrast configuration for the given simulator. * This function can only be called on a booted simulator. * * @override * @since Xcode SDK 15 (but lower xcode could have this command) * @param value valid increase constrast configuration value. * Acceptable value is 'enabled' or 'disabled' with Xcode 16.2. */ setIncreaseContrast = async (value: string): Promise => { await this.simctl.setIncreaseContrast(value); }; /** * Retrieves the current increase contrast configuration value from the given simulator. * This function can only be called on a booted simulator. * * @override * @since Xcode SDK 15 (but lower xcode could have this command) * @returns the contrast configuration value. * Possible return value is 'enabled', 'disabled', * 'unsupported' or 'unknown' with Xcode 16.2. */ getIncreaseContrast = async (): Promise => await this.simctl.getIncreaseContrast(); /** * Sets content size for the given simulator. * This function can only be called on a booted simulator. * * @override * @since Xcode SDK 15 (but lower xcode could have this command) * @param value valid content size or action value. Acceptable value is * extra-small, small, medium, large, extra-large, extra-extra-large, * extra-extra-extra-large, accessibility-medium, accessibility-large, * accessibility-extra-large, accessibility-extra-extra-large, * accessibility-extra-extra-extra-large with Xcode 16.2. */ setContentSize = async (value: string): Promise => { await this.simctl.setContentSize(value); }; /** * Retrieves the current content size value from the given simulator. * This function can only be called on a booted simulator. * * @override * @since Xcode SDK 15 (but lower xcode could have this command) * @returns the content size value. Possible return value is * extra-small, small, medium, large, extra-large, extra-extra-large, * extra-extra-extra-large, accessibility-medium, accessibility-large, * accessibility-extra-large, accessibility-extra-extra-large, * accessibility-extra-extra-extra-large, * unknown or unsupported with Xcode 16.2. */ getContentSize = async (): Promise => await this.simctl.getContentSize(); /** * Retrives the full path to where the simulator system R/O volume is mounted * * @returns The full path to the system root */ private async _getSystemRoot(): Promise { const simRoot = await this.simctl.getEnv('IPHONE_SIMULATOR_ROOT'); if (!simRoot) { throw new Error('The IPHONE_SIMULATOR_ROOT environment variable value cannot be retrieved'); } return _.trim(simRoot); } /** * Collects and caches bundle indetifier of system Simulator apps * * @returns A set of system app bundle identifiers */ private async _fetchSystemAppBundleIds(): Promise> { throw new Error('_fetchSystemAppBundleIds is not implemented'); } }