Skip to content
This repository has been archived by the owner on Nov 22, 2024. It is now read-only.

Commit

Permalink
Fix the regex to allow xcode from non standard location (#1939)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #1939

This diff fixes T84865014. We used to assume in our xcode cli check that xcode will be run from standard /Applications folder. But as mentioned in the above tasks, its not always true.

Reviewed By: passy

Differential Revision: D26484287

fbshipit-source-id: 32d343dece53576f99cbbb6d193138e803505935
  • Loading branch information
priteshrnandgaonkar authored and facebook-github-bot committed Feb 17, 2021
1 parent e491ed5 commit 6d22067
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 3 deletions.
50 changes: 50 additions & 0 deletions desktop/app/src/dispatcher/__tests__/iOSDevice.node.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import {parseXcodeFromCoreSimPath} from '../iOSDevice';

const standardCoresimulatorLog =
'username 1264 0.0 0.1 5989740 41648 ?? Ss 2:23PM 0:12.92 /Applications/Xcode_12.4.0_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/mobileassetd';

const nonStandardCoresimulatorLog =
'username 1264 0.0 0.1 5989740 41648 ?? Ss 2:23PM 0:12.92 /Some/Random/Path/Xcode_12.4.0_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/mobileassetd';

const nonStandardSpecialCharacterAphanumericCoresimulatorLog =
'username 1264 0.0 0.1 5989740 41648 ?? Ss 2:23PM 0:12.92 /Some_R@d0m/Path-3455355/path(2)+connection/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/mobileassetd';

test('test parseXcodeFromCoreSimPath from non standard locations', () => {
const match = parseXcodeFromCoreSimPath(nonStandardCoresimulatorLog);
expect(match && match.length > 0).toBeTruthy();
expect(
// @ts-ignore the null and non zero lenght check for match is already done above
match[0],
).toEqual('/Some/Random/Path/Xcode_12.4.0_fb.app/Contents/Developer');
});

test('test parseXcodeFromCoreSimPath from non standard alphanumeric special character locations', () => {
const match = parseXcodeFromCoreSimPath(
nonStandardSpecialCharacterAphanumericCoresimulatorLog,
);
expect(match && match.length > 0).toBeTruthy();
expect(
// @ts-ignore the null and non zero lenght check for match is already done above
match[0],
).toEqual(
'/Some_R@d0m/Path-3455355/path(2)+connection/Xcode.app/Contents/Developer',
);
});

test('test parseXcodeFromCoreSimPath from standard locations', () => {
const match = parseXcodeFromCoreSimPath(standardCoresimulatorLog);
expect(match && match.length > 0).toBeTruthy();
expect(
// @ts-ignore the null and non zero lenght check for match is already done above
match[0],
).toEqual('/Applications/Xcode_12.4.0_fb.app/Contents/Developer');
});
11 changes: 8 additions & 3 deletions desktop/app/src/dispatcher/iOSDevice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,14 @@ function queryDevicesForever(store: Store, logger: Logger) {
});
}

export function parseXcodeFromCoreSimPath(
line: string,
): RegExpMatchArray | null {
return line.match(/\/[\/\w@)(\-\+]*\/Xcode[^/]*\.app\/Contents\/Developer/);
}

let xcodeVersionMismatchFound = false;

async function checkXcodeVersionMismatch(store: Store) {
if (xcodeVersionMismatchFound) {
return;
Expand All @@ -241,9 +248,7 @@ async function checkXcodeVersionMismatch(store: Store) {
xcodeCLIVersion = xcodeCLIVersion.trim();
const {stdout} = await exec('ps aux | grep CoreSimulator');
for (const line of stdout.split('\n')) {
const match = line.match(
/\/Applications\/Xcode[^/]*\.app\/Contents\/Developer/,
);
const match = parseXcodeFromCoreSimPath(line);
const runningVersion = match && match.length > 0 ? match[0].trim() : null;
if (runningVersion && runningVersion !== xcodeCLIVersion) {
const errorMessage = `Xcode version mismatch: Simulator is running from "${runningVersion}" while Xcode CLI is "${xcodeCLIVersion}". Running "xcode-select --switch ${runningVersion}" can fix this. For example: "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"`;
Expand Down

0 comments on commit 6d22067

Please sign in to comment.