From c61de9ba5f515b9fcda82bc47526093a609d640b Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 11 Mar 2026 12:59:40 -0400 Subject: [PATCH 1/3] Remove the workaround to disable SwiftPM in analyze --- script/tool/lib/src/analyze_command.dart | 11 +----- script/tool/test/analyze_command_test.dart | 40 ---------------------- 2 files changed, 1 insertion(+), 50 deletions(-) diff --git a/script/tool/lib/src/analyze_command.dart b/script/tool/lib/src/analyze_command.dart index b06120b6edad..216f8c75811c 100644 --- a/script/tool/lib/src/analyze_command.dart +++ b/script/tool/lib/src/analyze_command.dart @@ -440,14 +440,8 @@ class AnalyzeCommand extends PackageLoopingCommand { final xcode = Xcode(processRunner: processRunner, log: true); final errors = []; for (final RepositoryPackage example in package.getExamples()) { - // See https://github.com/flutter/flutter/issues/172427 for discussion of - // why this is currently necessary. - print('Disabling Swift Package Manager...'); - setSwiftPackageManagerState(example, enabled: false); - // Unconditionally re-run build with --debug --config-only, to ensure that - // the project is in a debug state even if it was previously configured, - // and that SwiftPM is disabled. + // the project is in a debug state even if it was previously configured. print('Running flutter build --config-only...'); final bool buildSuccess = await runConfigOnlyBuild( example, @@ -490,9 +484,6 @@ class AnalyzeCommand extends PackageLoopingCommand { '${getRelativePosixPath(example.directory, from: package.directory)} failed analysis.', ); } - - print('Removing Swift Package Manager override...'); - setSwiftPackageManagerState(example, enabled: null); } return errors.isEmpty ? PackageResult.success() diff --git a/script/tool/test/analyze_command_test.dart b/script/tool/test/analyze_command_test.dart index a94f390c19f9..6b8d976c32d1 100644 --- a/script/tool/test/analyze_command_test.dart +++ b/script/tool/test/analyze_command_test.dart @@ -1093,46 +1093,6 @@ packages/package_a/lib/foo.dart }); group('Xcode analyze', () { - test('temporarily disables Swift Package Manager', () async { - final RepositoryPackage plugin = createFakePlugin( - 'plugin', - packagesDir, - platformSupport: { - platformIOS: const PlatformDetails(PlatformSupport.inline), - }, - ); - - final RepositoryPackage example = plugin.getExamples().first; - final String originalPubspecContents = example.pubspecFile - .readAsStringSync(); - String? buildTimePubspecContents; - processRunner.mockProcessesForExecutable['xcrun'] = [ - FakeProcessInfo(MockProcess(), [], () { - buildTimePubspecContents = example.pubspecFile.readAsStringSync(); - }), - ]; - - await runCapturingPrint(runner, [ - 'analyze', - '--no-dart', - '--ios', - ]); - - // Ensure that SwiftPM was disabled for the package. - expect( - originalPubspecContents, - isNot(contains('enable-swift-package-manager: false')), - ); - expect( - buildTimePubspecContents, - contains('enable-swift-package-manager: false'), - ); - // And that it was undone after. - expect( - example.pubspecFile.readAsStringSync().trim(), - originalPubspecContents.trim(), - ); - }); group('iOS', () { test('skip if iOS is not supported', () async { From 0e5e56aaaa5caceb47332704bc1cd407aeb1bd13 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 11 Mar 2026 13:50:14 -0400 Subject: [PATCH 2/3] Disable SwiftPM for build-all --- .ci/scripts/create_all_packages_app.sh | 3 +- .ci/targets/ios_build_all_packages.yaml | 3 ++ .ci/targets/macos_build_all_packages.yaml | 3 ++ .../src/create_all_packages_app_command.dart | 16 ++++++++++ .../create_all_packages_app_command_test.dart | 29 +++++++++++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) diff --git a/.ci/scripts/create_all_packages_app.sh b/.ci/scripts/create_all_packages_app.sh index a295e876bc54..fa68c1c62111 100755 --- a/.ci/scripts/create_all_packages_app.sh +++ b/.ci/scripts/create_all_packages_app.sh @@ -10,10 +10,11 @@ exclusions=("script/configs/exclude_all_packages_app.yaml") # Add a wasm-specific exclusion file if "--wasm" is specified. if [[ "$1" == "--wasm" ]]; then exclusions+=",script/configs/exclude_all_packages_app_wasm.yaml" + shift 1 fi # Delete ./all_packages if it exists already rm -rf ./all_packages dart ./script/tool/bin/flutter_plugin_tools.dart create-all-packages-app \ - --output-dir=. --exclude "$exclusions" + --output-dir=. --exclude "$exclusions" "$@" diff --git a/.ci/targets/ios_build_all_packages.yaml b/.ci/targets/ios_build_all_packages.yaml index cae80e605d3e..ae2bca687588 100644 --- a/.ci/targets/ios_build_all_packages.yaml +++ b/.ci/targets/ios_build_all_packages.yaml @@ -8,6 +8,9 @@ tasks: infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh + # build-examples builds with Swift Package Manager, so run build-all without + # it to test both modes in CI. + args: ["--no-swift-package-manager"] infra_step: true # Note infra steps failing prevents "always" from running. - name: build all_packages for iOS debug script: .ci/scripts/build_all_packages_app.sh diff --git a/.ci/targets/macos_build_all_packages.yaml b/.ci/targets/macos_build_all_packages.yaml index b576457a1eef..dacc8d639188 100644 --- a/.ci/targets/macos_build_all_packages.yaml +++ b/.ci/targets/macos_build_all_packages.yaml @@ -8,6 +8,9 @@ tasks: infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh + # build-examples builds with Swift Package Manager, so run build-all without + # it to test both modes in CI. + args: ["--no-swift-package-manager"] infra_step: true # Note infra steps failing prevents "always" from running. - name: build all_packages for macOS debug script: .ci/scripts/build_all_packages_app.sh diff --git a/script/tool/lib/src/create_all_packages_app_command.dart b/script/tool/lib/src/create_all_packages_app_command.dart index 0703972ec1b1..f01ac19e26ba 100644 --- a/script/tool/lib/src/create_all_packages_app_command.dart +++ b/script/tool/lib/src/create_all_packages_app_command.dart @@ -13,6 +13,7 @@ import 'common/core.dart'; import 'common/file_utils.dart'; import 'common/output_utils.dart'; import 'common/package_command.dart'; +import 'common/plugin_utils.dart'; import 'common/process_runner.dart'; import 'common/pub_utils.dart'; import 'common/repository_package.dart'; @@ -52,10 +53,18 @@ class CreateAllPackagesAppCommand extends PackageCommand { 'The replacement will be done before any tool-driven ' 'modifications.', ); + argParser.addFlag( + _swiftPackageManagerFlag, + defaultsTo: null, + help: + 'Explicitly sets the app-level flag for Swift Package Manager in ' + 'pubspec.yaml.', + ); } static const String _legacySourceFlag = 'legacy-source'; static const String _outputDirectoryFlag = 'output-dir'; + static const String _swiftPackageManagerFlag = 'swift-package-manager'; /// The location to create the synthesized app project. Directory get _appDirectory => packagesDir.fileSystem @@ -121,6 +130,13 @@ class CreateAllPackagesAppCommand extends PackageCommand { // flutter pub get above, so can't currently be run on Windows. if (!platform.isWindows) _updateMacosPodfile(), ]); + + final bool? swiftPackageManagerOverride = getNullableBoolArg( + _swiftPackageManagerFlag, + ); + if (swiftPackageManagerOverride != null) { + setSwiftPackageManagerState(app, enabled: swiftPackageManagerOverride); + } } Future _createApp() async { diff --git a/script/tool/test/create_all_packages_app_command_test.dart b/script/tool/test/create_all_packages_app_command_test.dart index 0d6cca4100c7..5e807c715b58 100644 --- a/script/tool/test/create_all_packages_app_command_test.dart +++ b/script/tool/test/create_all_packages_app_command_test.dart @@ -11,6 +11,7 @@ import 'package:flutter_plugin_tools/src/create_all_packages_app_command.dart'; import 'package:platform/platform.dart'; import 'package:pubspec_parse/pubspec_parse.dart'; import 'package:test/test.dart'; +import 'package:yaml/yaml.dart'; import 'mocks.dart'; import 'util.dart'; @@ -496,6 +497,34 @@ android { ); }); + test('disables Swift Package Manager if requested', () async { + writeFakeFlutterCreateOutput(testRoot); + createFakePlugin('plugina', packagesDir); + + await runCapturingPrint(runner, [ + 'create-all-packages-app', + '--no-swift-package-manager', + ]); + + final Pubspec pubspec = command.app.parsePubspec(); + final flutterConfig = pubspec.flutter?['config'] as YamlMap?; + expect(flutterConfig?['enable-swift-package-manager'], false); + }); + + test('enables Swift Package Manager if requested', () async { + writeFakeFlutterCreateOutput(testRoot); + createFakePlugin('plugina', packagesDir); + + await runCapturingPrint(runner, [ + 'create-all-packages-app', + '--swift-package-manager', + ]); + + final Pubspec pubspec = command.app.parsePubspec(); + final flutterConfig = pubspec.flutter?['config'] as YamlMap?; + expect(flutterConfig?['enable-swift-package-manager'], true); + }); + test('calls flutter pub get', () async { writeFakeFlutterCreateOutput(testRoot); createFakePlugin('plugina', packagesDir); From 595f4d8a265726eea3bc91eb28f42b76ad910f05 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 12 Mar 2026 12:05:15 -0400 Subject: [PATCH 3/3] Autoformat --- script/tool/test/analyze_command_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/script/tool/test/analyze_command_test.dart b/script/tool/test/analyze_command_test.dart index 6b8d976c32d1..0509f8d25988 100644 --- a/script/tool/test/analyze_command_test.dart +++ b/script/tool/test/analyze_command_test.dart @@ -1093,7 +1093,6 @@ packages/package_a/lib/foo.dart }); group('Xcode analyze', () { - group('iOS', () { test('skip if iOS is not supported', () async { createFakePlugin(