Skip to content

Enable SPM by default on Stable - #184495

Merged
auto-submit[bot] merged 1 commit into
flutter:masterfrom
okorohelijah:fix_184396
Apr 2, 2026
Merged

auto-submit[bot] merged 1 commit into
flutter:masterfrom
okorohelijah:fix_184396

Conversation

@okorohelijah

@okorohelijah okorohelijah commented Apr 2, 2026 •

Copy link
Copy Markdown
Contributor

Enable SPM by default on Stable

Fixes #184396

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@github-actions github-actions Bot added the tool Affects the "flutter" command-line tool. See also t: labels. label Apr 2, 2026
@okorohelijah
okorohelijah marked this pull request as ready for review April 2, 2026 04:13
@okorohelijah
okorohelijah requested a review from vashworth April 2, 2026 04:14

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request enables the Swift Package Manager feature by default on the stable channel within the Flutter tools. Correspondingly, the unit tests have been updated to verify this new default behavior. I have no feedback to provide.

@okorohelijah okorohelijah added the CICD Run CI/CD label Apr 2, 2026
@okorohelijah okorohelijah added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 2, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Apr 2, 2026
Merged via the queue into flutter:master with commit 429eea7 Apr 2, 2026
150 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 2, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 3, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Apr 3, 2026
flutter/flutter@0f401ee...7245c3f

2026-04-03 [email protected] Roll Skia from c07c67045b6d to 5d847ba5c4aa (1 revision) (flutter/flutter#184570)
2026-04-03 [email protected] Roll Dart SDK from 3c7a79045b8b to 46f49142acd9 (1 revision) (flutter/flutter#184567)
2026-04-03 [email protected] Roll ICU from ee5f27adc28b to ff7995a708a1 (5 revisions) (flutter/flutter#184566)
2026-04-03 [email protected] Roll Skia from 9ae8231be181 to c07c67045b6d (4 revisions) (flutter/flutter#184562)
2026-04-03 [email protected] Roll Fuchsia Linux SDK from BFLjk6Uwd0gs_Hkdk... to PpL3Bn2YMb2h9LbdK... (flutter/flutter#184556)
2026-04-03 [email protected] Roll Skia from 0566b2f5f0d1 to 9ae8231be181 (1 revision) (flutter/flutter#184547)
2026-04-03 [email protected] Roll Dart SDK from 6008eaddd589 to 3c7a79045b8b (3 revisions) (flutter/flutter#184551)
2026-04-03 [email protected] Fix wide gamut macos integration test (flutter/flutter#184427)
2026-04-02 [email protected] forward an application name to DDS (flutter/flutter#184459)
2026-04-02 [email protected] Roll Skia from 973117cfa875 to 0566b2f5f0d1 (8 revisions) (flutter/flutter#184534)
2026-04-02 [email protected] Support different joins for stroked rects in uber_sdf, fix incorrect aa (flutter/flutter#184395)
2026-04-02 [email protected] [ Widget Preview ] Handle collections and records in custom preview annotations (flutter/flutter#184518)
2026-04-02 [email protected] Moves android_semantics_integration_test out of staging (flutter/flutter#184079)
2026-04-02 [email protected] Roll Packages from b3fcf14 to 66bf7ec (4 revisions) (flutter/flutter#184514)
2026-04-02 [email protected] Fix line breaks being lost when copying after selection gesture in SelectableRegion (flutter/flutter#184421)
2026-04-02 [email protected] Add plugin version to SwiftPM package symlink directory (flutter/flutter#183668)
2026-04-02 [email protected] Add our own wrapper for `CommonExtension` due to change in signature from 8.x->9.0 (flutter/flutter#184433)
2026-04-02 [email protected] [Android] Use EdgeToEdge.enable/WindowCompat for edge-to-edge mode instead of deprecated View flags (flutter/flutter#183072)
2026-04-02 [email protected] [data_assets] Cleanup tests (flutter/flutter#184209)
2026-04-02 [email protected] Enable SPM by default on Stable (flutter/flutter#184495)
2026-04-02 [email protected] Roll Dart SDK from d84bdfeb45eb to 6008eaddd589 (2 revisions) (flutter/flutter#184513)
2026-04-02 [email protected] Reland "Even more awaits" (flutter/flutter#184467)
2026-04-02 [email protected] Roll Skia from bb9fd8653739 to 973117cfa875 (2 revisions) (flutter/flutter#184498)
2026-04-02 [email protected] [ Widget Preview ] Use analysis server for widget preview detection (flutter/flutter#184473)
2026-04-02 [email protected] [web_ui] Fix avoid_type_to_string lint violation (flutter/flutter#184342)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
mbcorona pushed a commit to mbcorona/flutter that referenced this pull request Apr 15, 2026
Enable SPM by default on Stable

Fixes flutter#184396

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11427)

flutter/flutter@0f401ee...7245c3f

2026-04-03 [email protected] Roll Skia from c07c67045b6d to 5d847ba5c4aa (1 revision) (flutter/flutter#184570)
2026-04-03 [email protected] Roll Dart SDK from 3c7a79045b8b to 46f49142acd9 (1 revision) (flutter/flutter#184567)
2026-04-03 [email protected] Roll ICU from ee5f27adc28b to ff7995a708a1 (5 revisions) (flutter/flutter#184566)
2026-04-03 [email protected] Roll Skia from 9ae8231be181 to c07c67045b6d (4 revisions) (flutter/flutter#184562)
2026-04-03 [email protected] Roll Fuchsia Linux SDK from BFLjk6Uwd0gs_Hkdk... to PpL3Bn2YMb2h9LbdK... (flutter/flutter#184556)
2026-04-03 [email protected] Roll Skia from 0566b2f5f0d1 to 9ae8231be181 (1 revision) (flutter/flutter#184547)
2026-04-03 [email protected] Roll Dart SDK from 6008eaddd589 to 3c7a79045b8b (3 revisions) (flutter/flutter#184551)
2026-04-03 [email protected] Fix wide gamut macos integration test (flutter/flutter#184427)
2026-04-02 [email protected] forward an application name to DDS (flutter/flutter#184459)
2026-04-02 [email protected] Roll Skia from 973117cfa875 to 0566b2f5f0d1 (8 revisions) (flutter/flutter#184534)
2026-04-02 [email protected] Support different joins for stroked rects in uber_sdf, fix incorrect aa (flutter/flutter#184395)
2026-04-02 [email protected] [ Widget Preview ] Handle collections and records in custom preview annotations (flutter/flutter#184518)
2026-04-02 [email protected] Moves android_semantics_integration_test out of staging (flutter/flutter#184079)
2026-04-02 [email protected] Roll Packages from b3fcf14 to 66bf7ec (4 revisions) (flutter/flutter#184514)
2026-04-02 [email protected] Fix line breaks being lost when copying after selection gesture in SelectableRegion (flutter/flutter#184421)
2026-04-02 [email protected] Add plugin version to SwiftPM package symlink directory (flutter/flutter#183668)
2026-04-02 [email protected] Add our own wrapper for `CommonExtension` due to change in signature from 8.x->9.0 (flutter/flutter#184433)
2026-04-02 [email protected] [Android] Use EdgeToEdge.enable/WindowCompat for edge-to-edge mode instead of deprecated View flags (flutter/flutter#183072)
2026-04-02 [email protected] [data_assets] Cleanup tests (flutter/flutter#184209)
2026-04-02 [email protected] Enable SPM by default on Stable (flutter/flutter#184495)
2026-04-02 [email protected] Roll Dart SDK from d84bdfeb45eb to 6008eaddd589 (2 revisions) (flutter/flutter#184513)
2026-04-02 [email protected] Reland "Even more awaits" (flutter/flutter#184467)
2026-04-02 [email protected] Roll Skia from bb9fd8653739 to 973117cfa875 (2 revisions) (flutter/flutter#184498)
2026-04-02 [email protected] [ Widget Preview ] Use analysis server for widget preview detection (flutter/flutter#184473)
2026-04-02 [email protected] [web_ui] Fix avoid_type_to_string lint violation (flutter/flutter#184342)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
xvrh added a commit to flutterware/flutterware that referenced this pull request Sep 27, 2026
The studio's macOS project drops CocoaPods. Every macOS plugin it uses
is a Swift package, so the Podfile was wrapping nothing but FlutterMacOS
in a `Pods_Runner` framework. It differed from Flutter's template only
by `use_modular_headers!`, a 2022 leftover that no pod has needed since
the last plugin pod left. That is why the SDK called it non-standard and
asked for a manual migration.

## The change

`pod deintegrate` in `app/macos`, then delete the Podfile and its lock,
the `Pods-Runner` xcconfig includes and the Pods project in
`Runner.xcworkspace`. The workspace now matches the SDK's own template
byte for byte. The diff is deletions only.

Nothing had to move into the Xcode project. The Podfile's `platform
:osx, '12.0'` only ever applied to the Pods targets, and the project
already sets `MACOSX_DEPLOYMENT_TARGET = 12.0`. The runner already has
`@executable_path/../Frameworks` in its runpath. Nothing reads the
`COCOAPODS=1` define.

## What it buys: a first run that needs no CocoaPods

The launcher builds the studio in a fresh working copy on a user's first
run (`DesktopGui.build`). With the Podfile present, that build ran `pod
install`, and on a machine without CocoaPods it stopped:

| Clean `flutter build macos --release` | before | after |
|---|---|---|
| CocoaPods installed | builds | builds |
| No CocoaPods on `PATH` | **fails**: "CocoaPods not installed or not in
valid state." | builds |

`tool/publish/install_check.dart --gui` also passes locally with no
CocoaPods on `PATH` and an empty flutter config. That is the hosted
first-run path: pack, unpack, resolve, build the CLI, build the studio.
CI never saw the failure because GitHub's macOS runners ship CocoaPods.

## Build time: the same within noise

These were clean builds (`flutter clean`, `Pods/` removed as in a fresh
copy), alternating the two trees to cancel out load drift. Load average
on the machine was 13–34.

| | runs (s) | median |
|---|---|---|
| before (CocoaPods) | 57.1, 56.9, 58.8 | 57.1 |
| after (SwiftPM only) | 55.2, 56.2, 94.2* | 56.2 |

\* The log is line for line the same as the 56 s run, so the extra time
was other work on the machine. `pod install` itself took 0.42–0.47 s,
because the only pod was FlutterMacOS. The SDK's "improve the project's
build time" is about one second here.

## The Swift Package Manager setting

- **Nothing needs to be set.** SwiftPM is on by default on stable since
Flutter 3.44.0 (flutter/flutter#184495), and the package's floor is
3.47.0. A build with `enable-swift-package-manager` *(Not set)* uses
Swift packages and needs no Podfile. Tested with an empty flutter config
dir.
- **An explicit opt-out still builds, the old way.** With
`enable-swift-package-manager: false` set globally, the SDK writes a
template Podfile into the working copy, re-integrates Pods, runs `pod
install` and builds, so the plugins become pod frameworks. That is where
every user was before this change. They need CocoaPods, and anyone who
opted out of SwiftPM has it.
- **The launcher cannot usefully pass the flag.** In
`FlutterFeaturesConfig` the environment variable ranks *below* the
global config (`pubspec ?? global ?? env ?? channel default`), even
though a comment in `flutter_features.dart` says the opposite. Measured:
a global opt-out plus `FLUTTER_SWIFT_PACKAGE_MANAGER=true` still ran
`pod install`. The only override is `flutter: config:
enable-swift-package-manager: true` in `app/pubspec.yaml`, which does
win over the opt-out (tested). It is left out: it would override a
choice the user made on purpose, to spare a case that already builds.

## Checked on the running studio

- Studio (dev) launches on the migrated project with no CocoaPods
warning and no plugin errors.
- `url_launcher`: `canLaunchUrl` round trip, `true`.
- `package_info_plus`: platform channel round trip,
`dev.flutterware.studio 0.6.0`.
- `file_selector`: *Save the screenshot as PNG…* presented its panel.
There was no channel error, and the call stayed pending on it.
- `webview_flutter`: this branch cherry-picked onto the Worlds mail-view
work. A clean release build pulls `webview_flutter_wkwebview` in as a
Swift package with no Podfile. In the running studio, *Pickup order* →
*Mia orders a flat white* → *Mail* → *Read it* → *Page*, the live
WKWebView held the rendered mail. Its text was read back from WebKit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enable Swift Package Manager by default on the stable channel

2 participants