From 959a2a77d740ae0135f551e63cca0cd06647641e Mon Sep 17 00:00:00 2001 From: Lawrence Lomax Date: Mon, 31 Jan 2022 07:23:29 -0800 Subject: [PATCH] Extract launchSimulator to IOSBridge Summary: This is related to `simctl` functionality, so can be extracted there. This will aid in future changes whereby we can hide `getDeviceSetPath` in the IOSBridge module Reviewed By: passy Differential Revision: D33842987 fbshipit-source-id: de292ce5afba3e7d79d8ba27c2b8852909d7e6f3 --- .../flipper-server-core/src/FlipperServerImpl.tsx | 8 +++----- .../src/devices/ios/IOSBridge.tsx | 15 +++++++++++++-- .../src/devices/ios/iOSDeviceManager.tsx | 14 +++----------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/desktop/flipper-server-core/src/FlipperServerImpl.tsx b/desktop/flipper-server-core/src/FlipperServerImpl.tsx index da25d6cb6..debb9e9f3 100644 --- a/desktop/flipper-server-core/src/FlipperServerImpl.tsx +++ b/desktop/flipper-server-core/src/FlipperServerImpl.tsx @@ -11,10 +11,7 @@ import EventEmitter from 'events'; import ServerController from './comms/ServerController'; import {CertificateExchangeMedium} from './utils/CertificateProvider'; import {AndroidDeviceManager} from './devices/android/androidDeviceManager'; -import { - IOSDeviceManager, - launchSimulator, -} from './devices/ios/iOSDeviceManager'; +import {IOSDeviceManager} from './devices/ios/iOSDeviceManager'; import metroDevice from './devices/metro/metroDeviceManager'; import desktopDevice from './devices/desktop/desktopDeviceManager'; import { @@ -356,7 +353,8 @@ export class FlipperServerImpl implements FlipperServer { launchEmulator(this.config.settings.androidHome, name, coldBoot), 'ios-get-simulators': async (bootedOnly) => this.ios.getSimulators(bootedOnly), - 'ios-launch-simulator': async (udid) => launchSimulator(udid), + 'ios-launch-simulator': async (udid) => + this.ios.simctlBridge.launchSimulator(udid), 'persist-settings': async (settings) => saveSettings(settings), 'persist-launcher-settings': async (settings) => saveLauncherSettings(settings), diff --git a/desktop/flipper-server-core/src/devices/ios/IOSBridge.tsx b/desktop/flipper-server-core/src/devices/ios/IOSBridge.tsx index 69a28eaf0..6d6ca2956 100644 --- a/desktop/flipper-server-core/src/devices/ios/IOSBridge.tsx +++ b/desktop/flipper-server-core/src/devices/ios/IOSBridge.tsx @@ -12,7 +12,7 @@ import child_process from 'child_process'; import {DeviceType} from 'flipper-common'; import {v1 as uuid} from 'uuid'; import path from 'path'; -import {exec} from 'promisify-child-process'; +import {exec, execFile} from 'promisify-child-process'; import {getFlipperServerConfig} from '../../FlipperServerConfig'; export const ERR_NO_IDB_OR_XCODE_AVAILABLE = @@ -72,7 +72,7 @@ class IDBBridge implements IOSBridge { } } -class SimctlBridge implements IOSBridge { +export class SimctlBridge implements IOSBridge { startLogListener( udid: string, deviceType: DeviceType, @@ -114,6 +114,11 @@ class SimctlBridge implements IOSBridge { `xcrun simctl io ${serial} recordVideo --codec=h264 --force ${outputFile}`, ); } + + async launchSimulator(udid: string): Promise { + await execFile('xcrun', ['simctl', ...getDeviceSetPath(), 'boot', udid]); + await execFile('open', ['-a', 'simulator']); + } } async function isAvailable(idbPath: string): Promise { @@ -155,6 +160,12 @@ async function readScreenshotIntoBuffer(imagePath: string): Promise { return buffer; } +export function getDeviceSetPath() { + return process.env.DEVICE_SET_PATH + ? ['--set', process.env.DEVICE_SET_PATH] + : []; +} + export async function makeIOSBridge( idbPath: string, isXcodeDetected: boolean, diff --git a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx index b4879b0c2..b10e1338f 100644 --- a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx +++ b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx @@ -18,6 +18,8 @@ import { ERR_NO_IDB_OR_XCODE_AVAILABLE, IOSBridge, makeIOSBridge, + getDeviceSetPath, + SimctlBridge, } from './IOSBridge'; import {FlipperServerImpl} from '../../FlipperServerImpl'; import {notNull} from '../../utils/typeUtils'; @@ -57,6 +59,7 @@ export class IOSDeviceManager { 'PortForwardingMacApp', ); iosBridge: IOSBridge | undefined; + simctlBridge: SimctlBridge = new SimctlBridge(); private xcodeVersionMismatchFound = false; public xcodeCommandLineToolsDetected = false; @@ -289,17 +292,6 @@ export class IOSDeviceManager { } } -function getDeviceSetPath() { - return process.env.DEVICE_SET_PATH - ? ['--set', process.env.DEVICE_SET_PATH] - : []; -} - -export async function launchSimulator(udid: string): Promise { - await execFile('xcrun', ['simctl', ...getDeviceSetPath(), 'boot', udid]); - await execFile('open', ['-a', 'simulator']); -} - function getActiveDevices( idbPath: string, isPhysicalDeviceEnabled: boolean,