@nx/expo 19.8.0 → 20.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +12 -0
- package/generators.json +1 -1
- package/package.json +11 -11
- package/plugins/metro-resolver.js +11 -11
- package/src/executors/start/start.impl.js +2 -2
- package/src/executors/sync-deps/sync-deps.impl.js +4 -4
- package/src/generators/application/application.js +0 -1
- package/src/generators/application/lib/normalize-options.js +0 -1
- package/src/generators/application/schema.d.ts +0 -1
- package/src/generators/component/component.d.ts +0 -1
- package/src/generators/component/component.js +0 -7
- package/src/generators/component/lib/normalize-options.js +0 -6
- package/src/generators/component/schema.d.ts +3 -13
- package/src/generators/component/schema.json +2 -24
- package/src/generators/library/lib/normalize-options.js +0 -1
- package/src/generators/library/library.js +0 -1
- package/src/generators/library/schema.d.ts +0 -1
- package/src/generators/library/schema.json +0 -6
- package/src/utils/pod-install-task.js +4 -4
package/.eslintrc.json
CHANGED
|
@@ -41,6 +41,18 @@
|
|
|
41
41
|
}
|
|
42
42
|
]
|
|
43
43
|
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
|
47
|
+
"rules": {
|
|
48
|
+
"no-restricted-imports": [
|
|
49
|
+
"error",
|
|
50
|
+
{
|
|
51
|
+
"name": "chalk",
|
|
52
|
+
"message": "Please use `picocolors` in place of `chalk` for rendering terminal colors"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
44
56
|
}
|
|
45
57
|
]
|
|
46
58
|
}
|
package/generators.json
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"description": "Create a library"
|
|
25
25
|
},
|
|
26
26
|
"component": {
|
|
27
|
-
"factory": "./src/generators/component/component
|
|
27
|
+
"factory": "./src/generators/component/component",
|
|
28
28
|
"schema": "./src/generators/component/schema.json",
|
|
29
29
|
"description": "Create a component",
|
|
30
30
|
"aliases": ["c"]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/expo",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.0-beta.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Expo Plugin for Nx contains executors and generators for managing and developing an expo application within your workspace. For example, you can directly build for different target platforms as well as generate projects and publish your code.",
|
|
6
6
|
"keywords": [
|
|
@@ -28,22 +28,22 @@
|
|
|
28
28
|
"main": "./index",
|
|
29
29
|
"types": "index.d.ts",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@nx/devkit": "
|
|
32
|
-
"
|
|
31
|
+
"@nx/devkit": "20.0.0-beta.0",
|
|
32
|
+
"@nx/eslint": "20.0.0-beta.0",
|
|
33
|
+
"@nx/jest": "20.0.0-beta.0",
|
|
34
|
+
"@nx/js": "20.0.0-beta.0",
|
|
35
|
+
"@nx/react": "20.0.0-beta.0",
|
|
36
|
+
"@nx/web": "20.0.0-beta.0",
|
|
37
|
+
"@nx/webpack": "20.0.0-beta.0",
|
|
33
38
|
"enhanced-resolve": "^5.8.3",
|
|
34
39
|
"fs-extra": "^11.1.0",
|
|
35
40
|
"metro-config": "~0.80.4",
|
|
36
41
|
"metro-resolver": "~0.80.4",
|
|
37
42
|
"node-fetch": "^2.6.7",
|
|
38
|
-
"
|
|
43
|
+
"picocolors": "^1.1.0",
|
|
39
44
|
"tsconfig-paths": "^4.1.2",
|
|
40
|
-
"
|
|
41
|
-
"@
|
|
42
|
-
"@nx/eslint": "19.8.0",
|
|
43
|
-
"@nx/react": "19.8.0",
|
|
44
|
-
"@nx/web": "19.8.0",
|
|
45
|
-
"@nx/webpack": "19.8.0",
|
|
46
|
-
"@nrwl/expo": "19.8.0"
|
|
45
|
+
"tslib": "^2.3.0",
|
|
46
|
+
"@nrwl/expo": "20.0.0-beta.0"
|
|
47
47
|
},
|
|
48
48
|
"executors": "./executors.json",
|
|
49
49
|
"ng-update": {
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getResolveRequest = getResolveRequest;
|
|
4
4
|
const metroResolver = require("metro-resolver");
|
|
5
5
|
const tsconfig_paths_1 = require("tsconfig-paths");
|
|
6
|
-
const
|
|
6
|
+
const pc = require("picocolors");
|
|
7
7
|
const enhanced_resolve_1 = require("enhanced-resolve");
|
|
8
8
|
const path_1 = require("path");
|
|
9
9
|
const fs = require("fs");
|
|
@@ -26,9 +26,9 @@ function getResolveRequest(extensions, exportsConditionNames = [], mainFields =
|
|
|
26
26
|
return resolvedPath;
|
|
27
27
|
}
|
|
28
28
|
if (debug) {
|
|
29
|
-
console.log(
|
|
29
|
+
console.log(pc.red(`[Nx] Unable to resolve with any resolver: ${realModuleName}`));
|
|
30
30
|
}
|
|
31
|
-
throw new Error(`Cannot resolve ${
|
|
31
|
+
throw new Error(`Cannot resolve ${pc.bold(realModuleName)}`);
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
function resolveRequestFromContext(resolveRequest, context, realModuleName, platform, debug) {
|
|
@@ -37,7 +37,7 @@ function resolveRequestFromContext(resolveRequest, context, realModuleName, plat
|
|
|
37
37
|
}
|
|
38
38
|
catch {
|
|
39
39
|
if (debug)
|
|
40
|
-
console.log(
|
|
40
|
+
console.log(pc.cyan(`[Nx] Unable to resolve with default resolveRequest: ${realModuleName}`));
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -50,7 +50,7 @@ function defaultMetroResolver(context, realModuleName, platform, debug) {
|
|
|
50
50
|
}
|
|
51
51
|
catch {
|
|
52
52
|
if (debug)
|
|
53
|
-
console.log(
|
|
53
|
+
console.log(pc.cyan(`[Nx] Unable to resolve with default Metro resolver: ${realModuleName}`));
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
@@ -69,7 +69,7 @@ function pnpmResolver(extensions, context, realModuleName, debug, exportsConditi
|
|
|
69
69
|
}
|
|
70
70
|
catch {
|
|
71
71
|
if (debug)
|
|
72
|
-
console.log(
|
|
72
|
+
console.log(pc.cyan(`[Nx] Unable to resolve with default PNPM resolver: ${realModuleName}`));
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
@@ -84,8 +84,8 @@ function tsconfigPathsResolver(context, extensions, realModuleName, platform, de
|
|
|
84
84
|
}
|
|
85
85
|
catch {
|
|
86
86
|
if (debug) {
|
|
87
|
-
console.log(
|
|
88
|
-
console.log(
|
|
87
|
+
console.log(pc.cyan(`[Nx] Failed to resolve ${pc.bold(realModuleName)}`));
|
|
88
|
+
console.log(pc.cyan(`[Nx] The following tsconfig paths was used:\n:${pc.bold(JSON.stringify(paths, null, 2))}`));
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
}
|
|
@@ -99,13 +99,13 @@ function getMatcher(debug) {
|
|
|
99
99
|
absoluteBaseUrl = result.absoluteBaseUrl;
|
|
100
100
|
paths = result.paths;
|
|
101
101
|
if (debug) {
|
|
102
|
-
console.log(
|
|
103
|
-
console.log(
|
|
102
|
+
console.log(pc.cyan(`[Nx] Located tsconfig at ${pc.bold(absoluteBaseUrl)}`));
|
|
103
|
+
console.log(pc.cyan(`[Nx] Found the following paths:\n:${pc.bold(JSON.stringify(paths, null, 2))}`));
|
|
104
104
|
}
|
|
105
105
|
matcher = (0, tsconfig_paths_1.createMatchPath)(absoluteBaseUrl, paths);
|
|
106
106
|
}
|
|
107
107
|
else {
|
|
108
|
-
console.log(
|
|
108
|
+
console.log(pc.cyan(`[Nx] Failed to locate tsconfig}`));
|
|
109
109
|
throw new Error(`Could not load tsconfig for project`);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = startExecutor;
|
|
4
|
-
const
|
|
4
|
+
const pc = require("picocolors");
|
|
5
5
|
const devkit_1 = require("@nx/devkit");
|
|
6
6
|
const child_process_1 = require("child_process");
|
|
7
7
|
const path_1 = require("path");
|
|
@@ -10,7 +10,7 @@ async function* startExecutor(options, context) {
|
|
|
10
10
|
const projectRoot = context.projectsConfigurations.projects[context.projectName].root;
|
|
11
11
|
try {
|
|
12
12
|
const baseUrl = `http://localhost:${options.port}`;
|
|
13
|
-
devkit_1.logger.info(
|
|
13
|
+
devkit_1.logger.info(pc.cyan(`Packager is ready at ${baseUrl}`));
|
|
14
14
|
await startAsync(context.root, projectRoot, options);
|
|
15
15
|
yield {
|
|
16
16
|
baseUrl,
|
|
@@ -4,7 +4,7 @@ exports.default = syncDepsExecutor;
|
|
|
4
4
|
exports.syncDeps = syncDeps;
|
|
5
5
|
exports.displayNewlyAddedDepsMessage = displayNewlyAddedDepsMessage;
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
-
const
|
|
7
|
+
const pc = require("picocolors");
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
9
|
const find_all_npm_dependencies_1 = require("../../utils/find-all-npm-dependencies");
|
|
10
10
|
async function* syncDepsExecutor(options, context) {
|
|
@@ -68,10 +68,10 @@ async function syncDeps(projectName, projectPackageJson, projectPackageJsonPath,
|
|
|
68
68
|
}
|
|
69
69
|
function displayNewlyAddedDepsMessage(projectName, deps) {
|
|
70
70
|
if (deps.length > 0) {
|
|
71
|
-
devkit_1.logger.info(`${
|
|
72
|
-
${deps.map((d) =>
|
|
71
|
+
devkit_1.logger.info(`${pc.bold(pc.cyan('info'))} Added entries to 'package.json' for '${projectName}' (for autolink):
|
|
72
|
+
${deps.map((d) => pc.bold(pc.cyan(`"${d}": "*"`))).join('\n ')}`);
|
|
73
73
|
}
|
|
74
74
|
else {
|
|
75
|
-
devkit_1.logger.info(`${
|
|
75
|
+
devkit_1.logger.info(`${pc.bold(pc.cyan('info'))} Dependencies for '${projectName}' are up to date! No changes made.`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
@@ -18,7 +18,6 @@ const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-projec
|
|
|
18
18
|
async function expoApplicationGenerator(host, schema) {
|
|
19
19
|
return await expoApplicationGeneratorInternal(host, {
|
|
20
20
|
addPlugin: false,
|
|
21
|
-
projectNameAndRootFormat: 'derived',
|
|
22
21
|
...schema,
|
|
23
22
|
});
|
|
24
23
|
}
|
|
@@ -9,7 +9,6 @@ async function normalizeOptions(host, options) {
|
|
|
9
9
|
projectType: 'application',
|
|
10
10
|
directory: options.directory,
|
|
11
11
|
projectNameAndRootFormat: options.projectNameAndRootFormat,
|
|
12
|
-
callingGenerator: '@nx/expo:application',
|
|
13
12
|
});
|
|
14
13
|
options.projectNameAndRootFormat = projectNameAndRootFormat;
|
|
15
14
|
const nxJson = (0, devkit_1.readNxJson)(host);
|
|
@@ -10,7 +10,6 @@ export interface Schema {
|
|
|
10
10
|
projectNameAndRootFormat?: ProjectNameAndRootFormat;
|
|
11
11
|
tags?: string;
|
|
12
12
|
unitTestRunner: 'jest' | 'none'; // default is jest
|
|
13
|
-
pascalCaseFiles?: boolean;
|
|
14
13
|
classComponent?: boolean;
|
|
15
14
|
js: boolean; // default is false
|
|
16
15
|
linter: Linter | LinterType; // default is eslint
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Schema } from './schema';
|
|
2
2
|
import { Tree } from '@nx/devkit';
|
|
3
3
|
export declare function expoComponentGenerator(host: Tree, schema: Schema): Promise<void>;
|
|
4
|
-
export declare function expoComponentGeneratorInternal(host: Tree, schema: Schema): Promise<void>;
|
|
5
4
|
export default expoComponentGenerator;
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.expoComponentGenerator = expoComponentGenerator;
|
|
4
|
-
exports.expoComponentGeneratorInternal = expoComponentGeneratorInternal;
|
|
5
4
|
const ts = require("typescript");
|
|
6
5
|
const devkit_1 = require("@nx/devkit");
|
|
7
6
|
const normalize_options_1 = require("./lib/normalize-options");
|
|
8
7
|
const add_import_1 = require("./lib/add-import");
|
|
9
8
|
const path_1 = require("path");
|
|
10
9
|
async function expoComponentGenerator(host, schema) {
|
|
11
|
-
return expoComponentGeneratorInternal(host, {
|
|
12
|
-
nameAndDirectoryFormat: 'derived',
|
|
13
|
-
...schema,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
async function expoComponentGeneratorInternal(host, schema) {
|
|
17
10
|
const options = await (0, normalize_options_1.normalizeOptions)(host, schema);
|
|
18
11
|
createComponentFiles(host, options);
|
|
19
12
|
addExportsToBarrel(host, options);
|
|
@@ -6,16 +6,10 @@ const artifact_name_and_directory_utils_1 = require("@nx/devkit/src/generators/a
|
|
|
6
6
|
async function normalizeOptions(host, options) {
|
|
7
7
|
assertValidOptions(options);
|
|
8
8
|
const { artifactName: name, directory, fileName, filePath, project: projectName, } = await (0, artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions)(host, {
|
|
9
|
-
artifactType: 'component',
|
|
10
|
-
callingGenerator: '@nx/expo:component',
|
|
11
9
|
name: options.name,
|
|
12
10
|
directory: options.directory,
|
|
13
|
-
derivedDirectory: options.directory,
|
|
14
|
-
flat: options.flat,
|
|
15
11
|
nameAndDirectoryFormat: options.nameAndDirectoryFormat,
|
|
16
|
-
project: options.project,
|
|
17
12
|
fileExtension: 'tsx',
|
|
18
|
-
pascalCaseFile: options.pascalCaseFiles,
|
|
19
13
|
});
|
|
20
14
|
const project = (0, devkit_1.getProjects)(host).get(projectName);
|
|
21
15
|
const { className } = (0, devkit_1.names)(name);
|
|
@@ -1,25 +1,15 @@
|
|
|
1
|
+
import type { NameAndDirectoryFormat } from '@nx/devkit/src/generators/artifact-name-and-directory-utils';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Same as the @nx/react library schema, except it removes keys: style, routing, globalCss
|
|
3
5
|
*/
|
|
4
6
|
export interface Schema {
|
|
5
7
|
name: string;
|
|
6
|
-
/**
|
|
7
|
-
* @deprecated Provide the `directory` option instead and use the `as-provided` format. The project will be determined from the directory provided. It will be removed in Nx v20.
|
|
8
|
-
*/
|
|
9
|
-
project: string;
|
|
10
8
|
directory?: string;
|
|
11
9
|
skipFormat: boolean; // default is false
|
|
12
10
|
skipTests: boolean; // default is false
|
|
13
|
-
/**
|
|
14
|
-
* @deprecated Provide the name in pascal-case and use the `as-provided` format. This option will be removed in Nx v19.
|
|
15
|
-
*/
|
|
16
11
|
export: boolean; // default is false
|
|
17
|
-
pascalCaseFiles: boolean; // default is false
|
|
18
12
|
classComponent: boolean; // default is false
|
|
19
13
|
js: boolean; // default is false
|
|
20
|
-
|
|
21
|
-
* @deprecated Provide the `directory` option instead and use the `as-provided` format. This option will be removed in Nx v19.
|
|
22
|
-
*/
|
|
23
|
-
flat: boolean; // default is false
|
|
24
|
-
nameAndDirectoryFormat?: 'as-provided' | 'derived';
|
|
14
|
+
nameAndDirectoryFormat?: NameAndDirectoryFormat;
|
|
25
15
|
}
|
|
@@ -6,24 +6,15 @@
|
|
|
6
6
|
"type": "object",
|
|
7
7
|
"examples": [
|
|
8
8
|
{
|
|
9
|
-
"command": "g @nx/expo:component my-component --
|
|
9
|
+
"command": "g @nx/expo:component my-component --directory=mylib/my-component",
|
|
10
10
|
"description": "Generate a component in the mylib library"
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
|
-
"command": "g @nx/expo:component my-component --
|
|
13
|
+
"command": "g @nx/expo:component my-component --directory=mylib/my-component --classComponent",
|
|
14
14
|
"description": "Generate a class component in the mylib library"
|
|
15
15
|
}
|
|
16
16
|
],
|
|
17
17
|
"properties": {
|
|
18
|
-
"project": {
|
|
19
|
-
"type": "string",
|
|
20
|
-
"description": "The name of the project.",
|
|
21
|
-
"alias": "p",
|
|
22
|
-
"$default": {
|
|
23
|
-
"$source": "projectName"
|
|
24
|
-
},
|
|
25
|
-
"x-deprecated": "Provide the `directory` option instead and use the `as-provided` format. The project will be determined from the directory provided. It will be removed in Nx v20."
|
|
26
|
-
},
|
|
27
18
|
"name": {
|
|
28
19
|
"type": "string",
|
|
29
20
|
"description": "The name of the component.",
|
|
@@ -59,12 +50,6 @@
|
|
|
59
50
|
"type": "string",
|
|
60
51
|
"enum": ["as-provided", "derived"]
|
|
61
52
|
},
|
|
62
|
-
"flat": {
|
|
63
|
-
"type": "boolean",
|
|
64
|
-
"description": "Create component at the source root rather than its own directory.",
|
|
65
|
-
"default": false,
|
|
66
|
-
"x-deprecated": "Provide the `directory` option instead and use the `as-provided` format. This option will be removed in Nx v19."
|
|
67
|
-
},
|
|
68
53
|
"export": {
|
|
69
54
|
"type": "boolean",
|
|
70
55
|
"description": "When true, the component is exported from the project index.ts (if it exists).",
|
|
@@ -72,13 +57,6 @@
|
|
|
72
57
|
"default": false,
|
|
73
58
|
"x-prompt": "Should this component be exported in the project?"
|
|
74
59
|
},
|
|
75
|
-
"pascalCaseFiles": {
|
|
76
|
-
"type": "boolean",
|
|
77
|
-
"description": "Use pascal case component file name (e.g. App.tsx).",
|
|
78
|
-
"alias": "P",
|
|
79
|
-
"default": false,
|
|
80
|
-
"x-deprecated": "Provide the `name` in pascal-case and use the `as-provided` format. This option will be removed in Nx v19."
|
|
81
|
-
},
|
|
82
60
|
"classComponent": {
|
|
83
61
|
"type": "boolean",
|
|
84
62
|
"alias": "C",
|
|
@@ -10,7 +10,6 @@ async function normalizeOptions(host, options) {
|
|
|
10
10
|
directory: options.directory,
|
|
11
11
|
importPath: options.importPath,
|
|
12
12
|
projectNameAndRootFormat: options.projectNameAndRootFormat,
|
|
13
|
-
callingGenerator: '@nx/expo:library',
|
|
14
13
|
});
|
|
15
14
|
const nxJson = (0, devkit_1.readNxJson)(host);
|
|
16
15
|
const addPluginDefault = process.env.NX_ADD_PLUGINS !== 'false' &&
|
|
@@ -16,7 +16,6 @@ const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-projec
|
|
|
16
16
|
async function expoLibraryGenerator(host, schema) {
|
|
17
17
|
return await expoLibraryGeneratorInternal(host, {
|
|
18
18
|
addPlugin: false,
|
|
19
|
-
projectNameAndRootFormat: 'derived',
|
|
20
19
|
...schema,
|
|
21
20
|
});
|
|
22
21
|
}
|
|
@@ -11,7 +11,6 @@ export interface Schema {
|
|
|
11
11
|
skipTsConfig: boolean; // default is false
|
|
12
12
|
skipFormat: boolean; // default is false
|
|
13
13
|
tags?: string;
|
|
14
|
-
pascalCaseFiles?: boolean;
|
|
15
14
|
unitTestRunner: 'jest' | 'none';
|
|
16
15
|
linter: Linter | LinterType; // default is eslint
|
|
17
16
|
publishable?: boolean;
|
|
@@ -60,12 +60,6 @@
|
|
|
60
60
|
"description": "Do not update tsconfig.json for development experience.",
|
|
61
61
|
"x-priority": "internal"
|
|
62
62
|
},
|
|
63
|
-
"pascalCaseFiles": {
|
|
64
|
-
"type": "boolean",
|
|
65
|
-
"description": "Use pascal case component file name (e.g. App.tsx).",
|
|
66
|
-
"alias": "P",
|
|
67
|
-
"default": false
|
|
68
|
-
},
|
|
69
63
|
"publishable": {
|
|
70
64
|
"type": "boolean",
|
|
71
65
|
"description": "Create a publishable library."
|
|
@@ -4,19 +4,19 @@ exports.runPodInstall = runPodInstall;
|
|
|
4
4
|
exports.podInstall = podInstall;
|
|
5
5
|
const child_process_1 = require("child_process");
|
|
6
6
|
const os_1 = require("os");
|
|
7
|
-
const
|
|
7
|
+
const pc = require("picocolors");
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
9
|
const fs_extra_1 = require("fs-extra");
|
|
10
10
|
const path_1 = require("path");
|
|
11
11
|
const podInstallErrorMessage = `
|
|
12
|
-
Running ${
|
|
12
|
+
Running ${pc.bold('pod install')} failed, see above.
|
|
13
13
|
Do you have CocoaPods (https://cocoapods.org/) installed?
|
|
14
14
|
|
|
15
15
|
Check that your XCode path is correct:
|
|
16
|
-
${
|
|
16
|
+
${pc.bold('sudo xcode-select --print-path')}
|
|
17
17
|
|
|
18
18
|
If the path is wrong, switch the path: (your path may be different)
|
|
19
|
-
${
|
|
19
|
+
${pc.bold('sudo xcode-select --switch /Applications/Xcode.app')}
|
|
20
20
|
`;
|
|
21
21
|
/**
|
|
22
22
|
* Run pod install on ios directory
|