mirror of
https://github.com/flutter/flutter
synced 2024-09-20 16:52:09 +00:00
[tools]build IPA validation bundle identifier using the default "com.example" prefix (#116430)
* [tools]build IPA validation bundle identifier using default com.example * rephrase the warning
This commit is contained in:
parent
22cbef3050
commit
162be5933b
|
@ -53,6 +53,11 @@ Future<void> main() async {
|
|||
if (!output.contains('Warning: Launch image is set to the default placeholder. Replace with unique launch images.')) {
|
||||
throw TaskResult.failure('Must validate template launch image.');
|
||||
}
|
||||
|
||||
// The project is still using com.example as bundle identifier prefix.
|
||||
if (!output.contains('Warning: Your application still contains the default "com.example" bundle identifier.')) {
|
||||
throw TaskResult.failure('Must validate the default bundle identifier prefix');
|
||||
}
|
||||
});
|
||||
|
||||
final String archivePath = path.join(
|
||||
|
|
|
@ -350,6 +350,10 @@ class BuildIOSArchiveCommand extends _BuildIOSSubCommand {
|
|||
if (xcodeProjectSettingsMap.values.any((String? element) => element == null)) {
|
||||
messageBuffer.writeln('\nYou must set up the missing settings.');
|
||||
}
|
||||
|
||||
if (xcodeProjectSettingsMap['Bundle Identifier']?.startsWith('com.example') ?? false) {
|
||||
messageBuffer.writeln('\nWarning: Your application still contains the default "com.example" bundle identifier.');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -740,13 +740,6 @@ bool _handleIssues(XCResult? xcResult, Logger logger, XcodeBuildExecution? xcode
|
|||
logger.printError("Also try selecting 'Product > Build' to fix the problem.");
|
||||
}
|
||||
|
||||
if (!issueDetected && _needUpdateSigningIdentifier(xcodeBuildExecution)) {
|
||||
issueDetected = true;
|
||||
logger.printError('');
|
||||
logger.printError('It appears that your application still contains the default signing identifier.');
|
||||
logger.printError("Try replacing 'com.example' with your signing id in Xcode:");
|
||||
logger.printError(' open ios/Runner.xcworkspace');
|
||||
}
|
||||
return issueDetected;
|
||||
}
|
||||
|
||||
|
@ -760,13 +753,6 @@ bool _missingDevelopmentTeam(XcodeBuildExecution? xcodeBuildExecution) {
|
|||
xcodeBuildExecution.buildSettings.containsKey);
|
||||
}
|
||||
|
||||
// Return `true` if the signing identifier needs to be updated.
|
||||
bool _needUpdateSigningIdentifier(XcodeBuildExecution? xcodeBuildExecution) {
|
||||
return xcodeBuildExecution != null
|
||||
&& xcodeBuildExecution.environmentType == EnvironmentType.physical
|
||||
&& (xcodeBuildExecution.buildSettings['PRODUCT_BUNDLE_IDENTIFIER']?.contains('com.example') ?? false);
|
||||
}
|
||||
|
||||
// Detects and handles errors from stdout.
|
||||
//
|
||||
// As detecting issues in stdout is not usually accurate, this should be used as a fallback when other issue detecting methods failed.
|
||||
|
|
|
@ -565,73 +565,6 @@ void main() {
|
|||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
|
||||
testUsingContext('Default bundle identifier error should be hidden if there is another xcresult issue.', () async {
|
||||
final BuildCommand command = BuildCommand(
|
||||
androidSdk: FakeAndroidSdk(),
|
||||
buildSystem: TestBuildSystem.all(BuildResult(success: true)),
|
||||
fileSystem: MemoryFileSystem.test(),
|
||||
logger: BufferLogger.test(),
|
||||
osUtils: FakeOperatingSystemUtils(),
|
||||
);
|
||||
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
await expectLater(
|
||||
createTestCommandRunner(command).run(const <String>['build', 'ios', '--no-pub']),
|
||||
throwsToolExit(),
|
||||
);
|
||||
|
||||
expect(testLogger.errorText, contains("Use of undeclared identifier 'asdas'"));
|
||||
expect(testLogger.errorText, contains('/Users/m/Projects/test_create/ios/Runner/AppDelegate.m:7:56'));
|
||||
expect(testLogger.errorText, isNot(contains('It appears that your application still contains the default signing identifier.')));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
setUpXCResultCommand(stdout: kSampleResultJsonWithIssues),
|
||||
setUpRsyncCommand(),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
EnvironmentType: () => EnvironmentType.physical,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(productBundleIdentifier: 'com.example'),
|
||||
});
|
||||
|
||||
testUsingContext('Show default bundle identifier error if there are no other errors.', () async {
|
||||
final BuildCommand command = BuildCommand(
|
||||
androidSdk: FakeAndroidSdk(),
|
||||
buildSystem: TestBuildSystem.all(BuildResult(success: true)),
|
||||
fileSystem: MemoryFileSystem.test(),
|
||||
logger: BufferLogger.test(),
|
||||
osUtils: FakeOperatingSystemUtils(),
|
||||
);
|
||||
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
await expectLater(
|
||||
createTestCommandRunner(command).run(const <String>['build', 'ios', '--no-pub']),
|
||||
throwsToolExit(),
|
||||
);
|
||||
|
||||
expect(testLogger.errorText, contains('It appears that your application still contains the default signing identifier.'));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: () {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
setUpXCResultCommand(stdout: kSampleResultJsonNoIssues),
|
||||
setUpRsyncCommand(),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
EnvironmentType: () => EnvironmentType.physical,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(productBundleIdentifier: 'com.example'),
|
||||
});
|
||||
|
||||
|
||||
testUsingContext('Display xcresult issues with no provisioning profile.', () async {
|
||||
final BuildCommand command = BuildCommand(
|
||||
androidSdk: FakeAndroidSdk(),
|
||||
|
|
|
@ -991,6 +991,84 @@ void main() {
|
|||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext(
|
||||
'Validate basic Xcode settings with default bundle identifier prefix', () async {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: () {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
plistUtils.fileContents[plistPath] = <String,String>{
|
||||
'CFBundleIdentifier': 'com.example.my_app',
|
||||
};
|
||||
|
||||
final BuildCommand command = BuildCommand(
|
||||
androidSdk: FakeAndroidSdk(),
|
||||
buildSystem: TestBuildSystem.all(BuildResult(success: true)),
|
||||
fileSystem: MemoryFileSystem.test(),
|
||||
logger: BufferLogger.test(),
|
||||
osUtils: FakeOperatingSystemUtils(),
|
||||
);
|
||||
await createTestCommandRunner(command).run(
|
||||
<String>['build', 'ipa', '--no-pub']);
|
||||
|
||||
expect(
|
||||
testLogger.statusText,
|
||||
contains('Warning: Your application still contains the default "com.example" bundle identifier.')
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext(
|
||||
'Validate basic Xcode settings with custom bundle identifier prefix', () async {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: () {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
plistUtils.fileContents[plistPath] = <String,String>{
|
||||
'CFBundleIdentifier': 'com.my_company.my_app',
|
||||
};
|
||||
|
||||
final BuildCommand command = BuildCommand(
|
||||
androidSdk: FakeAndroidSdk(),
|
||||
buildSystem: TestBuildSystem.all(BuildResult(success: true)),
|
||||
fileSystem: MemoryFileSystem.test(),
|
||||
logger: BufferLogger.test(),
|
||||
osUtils: FakeOperatingSystemUtils(),
|
||||
);
|
||||
await createTestCommandRunner(command).run(
|
||||
<String>['build', 'ipa', '--no-pub']);
|
||||
|
||||
expect(
|
||||
testLogger.statusText,
|
||||
isNot(contains('Warning: Your application still contains the default "com.example" bundle identifier.'))
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
|
||||
testUsingContext('Validate template app icons with conflicts', () async {
|
||||
const String projectIconContentsJsonPath = 'ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json';
|
||||
|
|
Loading…
Reference in a new issue