UNPKG

@react-native-community/cli-platform-ios

Version:

This package is part of the [React Native CLI](../../README.md). It contains commands for managing iOS part of React Native app.

127 lines (124 loc) 4.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildProject = buildProject; function _child_process() { const data = _interopRequireDefault(require("child_process")); _child_process = function () { return data; }; return data; } function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _cliTools() { const data = require("@react-native-community/cli-tools"); _cliTools = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function buildProject(xcodeProject, udid, mode, scheme, args) { return new Promise((resolve, reject) => { const xcodebuildArgs = [xcodeProject.isWorkspace ? '-workspace' : '-project', xcodeProject.name, ...(args.xcconfig ? ['-xcconfig', args.xcconfig] : []), ...(args.buildFolder ? ['-derivedDataPath', args.buildFolder] : []), '-configuration', mode, '-scheme', scheme, '-destination', (udid ? `id=${udid}` : mode === 'Debug' ? 'generic/platform=iOS Simulator' : 'generic/platform=iOS') + (args.destination ? ',' + args.destination : '')]; if (args.extraParams) { xcodebuildArgs.push(...args.extraParams); } const loader = (0, _cliTools().getLoader)(); _cliTools().logger.info(`Building ${_chalk().default.dim(`(using "xcodebuild ${xcodebuildArgs.join(' ')}")`)}`); let xcodebuildOutputFormatter; if (!args.verbose) { if (xcbeautifyAvailable()) { xcodebuildOutputFormatter = _child_process().default.spawn('xcbeautify', [], { stdio: ['pipe', process.stdout, process.stderr] }); } else if (xcprettyAvailable()) { xcodebuildOutputFormatter = _child_process().default.spawn('xcpretty', [], { stdio: ['pipe', process.stdout, process.stderr] }); } } const buildProcess = _child_process().default.spawn('xcodebuild', xcodebuildArgs, getProcessOptions(args)); let buildOutput = ''; let errorOutput = ''; buildProcess.stdout.on('data', data => { const stringData = data.toString(); buildOutput += stringData; if (xcodebuildOutputFormatter) { xcodebuildOutputFormatter.stdin.write(data); } else { if (_cliTools().logger.isVerbose()) { _cliTools().logger.debug(stringData); } else { loader.start(`Building the app${'.'.repeat(buildOutput.length % 10)}`); } } }); buildProcess.stderr.on('data', data => { errorOutput += data; }); buildProcess.on('close', code => { if (xcodebuildOutputFormatter) { xcodebuildOutputFormatter.stdin.end(); } else { loader.stop(); } if (code !== 0) { (0, _cliTools().printRunDoctorTip)(); reject(new (_cliTools().CLIError)(` Failed to build iOS project. "xcodebuild" exited with error code '${code}'. To debug build logs further, consider building your app with Xcode.app, by opening '${xcodeProject.name}'. `, xcodebuildOutputFormatter ? undefined : buildOutput + '\n' + errorOutput)); return; } _cliTools().logger.success('Successfully built the app'); resolve(buildOutput); }); }); } function xcbeautifyAvailable() { try { _child_process().default.execSync('xcbeautify --version', { stdio: [0, 'pipe', 'ignore'] }); } catch (error) { return false; } return true; } function xcprettyAvailable() { try { _child_process().default.execSync('xcpretty --version', { stdio: [0, 'pipe', 'ignore'] }); } catch (error) { return false; } return true; } function getProcessOptions(args) { if ('packager' in args && typeof args.packager === 'boolean' && args.packager) { const terminal = 'terminal' in args && typeof args.terminal === 'string' ? args.terminal : ''; const port = 'port' in args && typeof args.port === 'string' ? args.port : ''; return { env: { ...process.env, RCT_TERMINAL: terminal, RCT_METRO_PORT: port } }; } return { env: process.env }; } //# sourceMappingURL=buildProject.ts.map