-
Notifications
You must be signed in to change notification settings - Fork 905
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Feat] Add support for .xcode.env file in init and doctor commands
- Loading branch information
Riccardo Cipolleschi
committed
Apr 14, 2022
1 parent
e044e7b
commit 414d4e6
Showing
10 changed files
with
93 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import {HealthCheckInterface} from '../../types'; | ||
import fs from 'fs'; | ||
import path from 'path'; | ||
import {promisify} from 'util'; | ||
import {findProjectRoot} from '@react-native-community/cli-tools'; | ||
import {findPodfilePaths} from '@react-native-community/cli-platform-ios'; | ||
|
||
const xcodeEnvFile = '.xcode.env'; | ||
const pathSeparator = '/'; | ||
|
||
function removeLastPathComponent(pathString: string): string { | ||
const components = pathString.split(pathSeparator); | ||
components.splice(components.length - 1, 1); | ||
return components.join(pathSeparator); | ||
} | ||
|
||
function pathHasXcodeEnvFile(pathString: string): boolean { | ||
const xcodeEnvPath = pathString + pathSeparator + xcodeEnvFile; | ||
return fs.existsSync(xcodeEnvPath); | ||
} | ||
|
||
function pathDoesNotHaveXcodeEnvFile(pathString: string): boolean { | ||
return !pathHasXcodeEnvFile(pathString); | ||
} | ||
|
||
export default { | ||
label: '.xcode.env', | ||
description: 'File to customize Xcode environment', | ||
getDiagnostics: async () => { | ||
const projectRoot = findProjectRoot(); | ||
const allPathsHasXcodeEnvFile = findPodfilePaths(projectRoot) | ||
.map((pathString) => { | ||
const basePath = removeLastPathComponent(pathString); | ||
return pathHasXcodeEnvFile(basePath); | ||
}) | ||
.reduce((previousValue, currentValue) => previousValue && currentValue); | ||
return { | ||
needsToBeFixed: !allPathsHasXcodeEnvFile, | ||
}; | ||
}, | ||
runAutomaticFix: async () => { | ||
const templateXcodeEnv = '_xcode.env'; | ||
const projectRoot = findProjectRoot(); | ||
|
||
const templateIosPath = path.dirname( | ||
require.resolve('react-native/template/ios'), | ||
); | ||
|
||
const src = templateIosPath + templateXcodeEnv; | ||
const copyFileAsync = promisify(fs.copyFile); | ||
|
||
findPodfilePaths(projectRoot) | ||
.map(removeLastPathComponent) | ||
// avoid overriding existing .xcode.env | ||
.filter(pathDoesNotHaveXcodeEnvFile) | ||
.forEach(async (pathString) => { | ||
const destFilePath = pathString + pathSeparator + xcodeEnvFile; | ||
await copyFileAsync(src, destFilePath); | ||
}); | ||
}, | ||
} as HealthCheckInterface; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/** | ||
* 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. | ||
* | ||
*/ | ||
import glob from 'glob'; | ||
|
||
// These folders will be excluded from search to speed it up | ||
const GLOB_EXCLUDE_PATTERN = ['**/@(Pods|node_modules|Carthage)/**']; | ||
|
||
export default function findAllPodfilePaths(cwd: string) { | ||
return glob.sync('**/Podfile', { | ||
cwd, | ||
ignore: GLOB_EXCLUDE_PATTERN, | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters