Skip to content

macOS build failures are not parsed for common causes #144397

@vashworth

Description

@vashworth

When a macOS build fails, we don't parse the build output for common causes like we do with iOS. We should do something similar for macOS, or better yet - unify the two to use the same build method and do error parsing within it.

macOS:

result = await globals.processUtils.stream(<String>[
'/usr/bin/env',
'xcrun',
'xcodebuild',
'-workspace', xcodeWorkspace.path,
'-configuration', configuration,
'-scheme', scheme,
'-derivedDataPath', flutterBuildDir.absolute.path,
'-destination', 'platform=macOS',
'OBJROOT=${globals.fs.path.join(flutterBuildDir.absolute.path, 'Build', 'Intermediates.noindex')}',
'SYMROOT=${globals.fs.path.join(flutterBuildDir.absolute.path, 'Build', 'Products')}',
if (verboseLogging)
'VERBOSE_SCRIPT_LOGGING=YES'
else
'-quiet',
'COMPILER_INDEX_STORE_ENABLE=NO',
...environmentVariablesAsXcodeBuildSettings(globals.platform),
],
trace: true,
stdoutErrorMatcher: verboseLogging ? null : _filteredOutput,
mapFunction: verboseLogging ? null : (String line) => _filteredOutput.hasMatch(line) ? line : null,
);
} finally {
status.cancel();
}
if (result != 0) {
throwToolExit('Build process failed');
}

@override
Future<void> buildForDevice({
required BuildInfo buildInfo,
String? mainPath,
}) async {
await buildMacOS(
flutterProject: FlutterProject.current(),
buildInfo: buildInfo,
targetOverride: mainPath,
verboseLogging: _logger.isVerbose,
);
}

await buildMacOS(
flutterProject: flutterProject,
buildInfo: buildInfo,
targetOverride: targetFile,
verboseLogging: globals.logger.isVerbose,
configOnly: configOnly,
sizeAnalyzer: SizeAnalyzer(
fileSystem: globals.fs,
logger: globals.logger,
appFilenamePattern: 'App',
flutterUsage: globals.flutterUsage,
analytics: analytics,
),
);
return FlutterCommandResult.success();

iOS:

// Step 1: Build the precompiled/DBC application if necessary.
final XcodeBuildResult buildResult = await buildXcodeProject(
app: package as BuildableIOSApp,
buildInfo: debuggingOptions.buildInfo,
targetOverride: mainPath,
activeArch: cpuArchitecture,
deviceID: id,
disablePortPublication: debuggingOptions.usingCISystem && debuggingOptions.disablePortPublication,
);
if (!buildResult.success) {
_logger.printError('Could not build the precompiled application for the device.');
await diagnoseXcodeBuildFailure(buildResult, globals.flutterUsage, _logger, globals.analytics);
_logger.printError('');
return LaunchResult.failed();
}

final XcodeBuildResult result = await buildXcodeProject(
app: app,
buildInfo: buildInfo,
targetOverride: targetFile,
environmentType: environmentType,
codesign: shouldCodesign,
configOnly: configOnly,
buildAction: xcodeBuildAction,
deviceID: globals.deviceManager?.specifiedDeviceId,
disablePortPublication: usingCISystem &&
xcodeBuildAction == XcodeBuildAction.build &&
await disablePortPublication,
);
xcodeBuildResult = result;
if (!result.success) {
await diagnoseXcodeBuildFailure(result, globals.flutterUsage, globals.logger, globals.analytics);
final String presentParticiple = xcodeBuildAction == XcodeBuildAction.build ? 'building' : 'archiving';
throwToolExit('Encountered error while $presentParticiple for $logTarget.');
}

final XcodeBuildResult buildResult = await buildXcodeProject(
app: app,
buildInfo: buildInfo,
targetOverride: mainPath,
environmentType: EnvironmentType.simulator,
deviceID: id,
);
if (!buildResult.success) {
await diagnoseXcodeBuildFailure(buildResult, globals.flutterUsage, globals.logger, globals.analytics);
throwToolExit('Could not build the application for the simulator.');
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listplatform-iosiOS applications specificallyteam-iosOwned by iOS platform teamtoolAffects the "flutter" command-line tool. See also t: labels.triaged-iosTriaged by iOS platform team

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions