diff --git a/desktop/flipper-server-core/src/devices/ios/iOSContainerUtility.tsx b/desktop/flipper-server-core/src/devices/ios/iOSContainerUtility.tsx index 313e65638..21a1b8809 100644 --- a/desktop/flipper-server-core/src/devices/ios/iOSContainerUtility.tsx +++ b/desktop/flipper-server-core/src/devices/ios/iOSContainerUtility.tsx @@ -97,7 +97,7 @@ export async function queryTargetsWithoutXcodeDependency( } function parseIdbTargets(lines: string): Array { - return lines + const parsedIdbTargets = lines .trim() .split('\n') .map((line) => line.trim()) @@ -113,6 +113,15 @@ function parseIdbTargets(lines: string): Array { type: target.type as DeviceType, name: target.name, })); + + // For some reason, idb can return duplicates + // TODO: Raise the issue with idb + const dedupedIdbTargets: Record = {}; + for (const idbTarget of parsedIdbTargets) { + dedupedIdbTargets[idbTarget.udid] = + dedupedIdbTargets[idbTarget.udid] ?? idbTarget; + } + return Object.values(dedupedIdbTargets); } export async function idbListTargets( diff --git a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx index 5ea8bf48f..58855b609 100644 --- a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx +++ b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx @@ -133,12 +133,16 @@ export class IOSDeviceManager { const config = getFlipperServerConfig(); const isXcodeInstalled = await iosUtil.isXcodeDetected(); const isIdbAvailable = await iosUtil.isAvailable(config.idbPath); + console.debug( + `[conn] queryDevices. isXcodeInstalled ${isXcodeInstalled}, isIdbAvailable ${isIdbAvailable}`, + ); return Promise.all( this.getAllPromisesForQueryingDevices(isXcodeInstalled, isIdbAvailable), ); } private processDevices(activeDevices: IOSDeviceParams[]) { + console.debug('[conn] processDevices', activeDevices); if (!this.iosBridge) { throw new Error('iOS bridge not yet initialized'); } @@ -148,6 +152,10 @@ export class IOSDeviceManager { .filter((device) => device.info.os === 'iOS') .map((device) => device.serial), ); + console.debug( + '[conn] processDevices -> currentDeviceIDs', + currentDeviceIDs, + ); for (const activeDevice of activeDevices) { const {udid, type, name} = activeDevice;