blob: 14ea4d64ffedf0a5976704f6f9738ec925d76a9c [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../../base/file_system.dart';
import '../../base/project_migrator.dart';
import '../../globals.dart' as globals;
import '../../ios/plist_parser.dart';
import '../../xcode_project.dart';
/// Update the minimum macOS deployment version to the minimum allowed by Xcode without causing a warning.
class FlutterApplicationMigration extends ProjectMigrator {
FlutterApplicationMigration(
MacOSProject project,
super.logger,
) : _infoPlistFile = project.defaultHostInfoPlist;
final File _infoPlistFile;
@override
void migrate() {
if (_infoPlistFile.existsSync()) {
final String? principleClass =
globals.plistParser.getStringValueFromFile(_infoPlistFile.path, PlistParser.kNSPrincipalClassKey);
if (principleClass == null || principleClass == 'FlutterApplication') {
// No NSPrincipalClass defined, or already converted, so no migration
// needed.
return;
}
if (principleClass != 'NSApplication') {
// Only replace NSApplication values, since we don't know why they might
// have substituted something else.
logger.printTrace('${_infoPlistFile.basename} has an '
'${PlistParser.kNSPrincipalClassKey} of $principleClass, not '
'NSApplication, skipping FlutterApplication migration.\nYou will need '
'to modify your application class to derive from FlutterApplication.');
return;
}
logger.printStatus('Updating ${_infoPlistFile.basename} to use FlutterApplication instead of NSApplication.');
final bool success = globals.plistParser.replaceKey(_infoPlistFile.path, key: PlistParser.kNSPrincipalClassKey, value: 'FlutterApplication');
if (!success) {
logger.printError('Updating ${_infoPlistFile.basename} failed.');
}
} else {
logger.printTrace('${_infoPlistFile.basename} not found, skipping FlutterApplication migration.');
}
}
}