-
Notifications
You must be signed in to change notification settings - Fork 29.7k
[macOS] Migrate @NSApplicationMain attribute to @main #146848
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[macOS] Migrate @NSApplicationMain attribute to @main #146848
Conversation
hellohuanlin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for doing this!
@jmagman One thing in my mind is whether this kind of migration scripts will get out of hand in the future? Because keeping track of the delta can be tedious.
Strawman idea - what if we just regenerate the whole thing? This way we can have a simple one-for-all migration script that simply detects some sort of version change.
| /// | ||
| /// See: | ||
| /// https://github.com/apple/swift-evolution/blob/main/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.md | ||
| class NSApplicationMainDeprecationMigration extends ProjectMigrator { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
im wondering if it's possible to reuse the ios migration?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They're very similar but subtly different - the affected file is different, the log messages are slightly different (due to differences in path), the attribute is different. The migration logic would need to be more a little more complicated to support both platforms.
Personally I think this duplication results in simple code that's easier to maintain. That said, both approaches are viable and I'm happy to defer to whatever the team prefers :)
We can't regenerate files Flutter doesn't "own", at least not easily, or we would blow away the user changes. For example in https://github.com/flutter/flutter/pull/146707/files#r1566254461, if we had regenerated the AppDelegate the user would have lost all their changes. flutter/examples/platform_channel_swift/ios/Runner/AppDelegate.swift Lines 22 to 23 in 2240998
The Xcode project files are another example: users are supposed to edit their Xcode project in some cases (as you know from your validator tool work), so we can't just regenerate it for them without keeping track of the deltas in a much more complicated, error-prone way. There was an attempt to do something much more complicated with https://github.com/flutter/flutter/wiki/Flutter-migrate, (see https://flutter.dev/go/flutter-migrate and #40460), but it was extremely complicated and required users running a tool explicitly, and allowing rollbacks. There wasn't much appetite to finish up that project since these incremental migrations that essentially just string match (the first one was introduced in #51453) were doing a decent enough job. Before that, users would just get build errors and have to figure out how to fix them themselves. |
jmagman
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Roll Flutter from 3882afb to fb110b9 (56 revisions) flutter/flutter@3882afb...fb110b9 2024-04-18 [email protected] Fix memory leaks in `MaterialBanner` (flutter/flutter#146963) 2024-04-18 [email protected] Fix memory leak in data table (flutter/flutter#146892) 2024-04-18 [email protected] Dispose the curved animation in transition test (flutter/flutter#146961) 2024-04-18 [email protected] Roll Flutter Engine from 5687011d5e94 to 2c3e9c8bfce6 (1 revision) (flutter/flutter#146982) 2024-04-18 [email protected] Roll Flutter Engine from 132d364ef373 to 5687011d5e94 (2 revisions) (flutter/flutter#146972) 2024-04-18 [email protected] Roll Flutter Engine from 20638b75c8c4 to 132d364ef373 (1 revision) (flutter/flutter#146969) 2024-04-18 [email protected] [macOS] Migrate @NSApplicationMain attribute to @main (flutter/flutter#146848) 2024-04-18 [email protected] Roll Flutter Engine from 07f7532ecd29 to 20638b75c8c4 (2 revisions) (flutter/flutter#146962) 2024-04-18 [email protected] Roll Flutter Engine from 725ebd708246 to 07f7532ecd29 (1 revision) (flutter/flutter#146960) 2024-04-18 [email protected] Roll Flutter Engine from 624730fb8840 to 725ebd708246 (4 revisions) (flutter/flutter#146959) 2024-04-17 [email protected] Roll Flutter Engine from 9edcb26f5949 to 624730fb8840 (2 revisions) (flutter/flutter#146955) 2024-04-17 49699333+dependabot[bot]@users.noreply.github.com Bump github/codeql-action from 3.25.0 to 3.25.1 (flutter/flutter#146953) 2024-04-17 49699333+dependabot[bot]@users.noreply.github.com Bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 (flutter/flutter#146954) 2024-04-17 [email protected] Roll Flutter Engine from cc73c5c124c4 to 9edcb26f5949 (4 revisions) (flutter/flutter#146946) 2024-04-17 [email protected] Bump meta to 1.14.0 (flutter/flutter#146925) 2024-04-17 [email protected] Make goldenFileComparator a field instead of a trivial property (flutter/flutter#146800) 2024-04-17 [email protected] Assert that the goldenFileComparator is a LocalFileComparator (flutter/flutter#146802) 2024-04-17 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Try to be more consistent about deleting test apps in devicelab logic (#146931)" (flutter/flutter#146947) 2024-04-17 [email protected] Create web tests suite & runner_utils (flutter/flutter#146592) 2024-04-17 [email protected] Roll Flutter Engine from 376c86e3bbb6 to cc73c5c124c4 (3 revisions) (flutter/flutter#146940) 2024-04-17 [email protected] Try to be more consistent about deleting test apps in devicelab logic (flutter/flutter#146931) 2024-04-17 [email protected] Roll Flutter Engine from bc6382e35365 to 376c86e3bbb6 (2 revisions) (flutter/flutter#146937) 2024-04-17 [email protected] Remove now-redundant tests for isForEnvironment (flutter/flutter#146804) 2024-04-17 [email protected] Roll pub packages (flutter/flutter#146929) 2024-04-17 [email protected] Get rid of _NullElement. (flutter/flutter#146741) 2024-04-17 [email protected] Roll Flutter Engine from 818191d11404 to bc6382e35365 (2 revisions) (flutter/flutter#146930) 2024-04-17 [email protected] Fix memory leak in paginated tables (flutter/flutter#146755) 2024-04-17 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Try to be more consistent about deleting test apps in devicelab logic. (#146856)" (flutter/flutter#146927) 2024-04-17 [email protected] Roll Flutter Engine from 25b09e883dd8 to 818191d11404 (3 revisions) (flutter/flutter#146898) 2024-04-17 [email protected] Try to be more consistent about deleting test apps in devicelab logic. (flutter/flutter#146856) 2024-04-17 [email protected] Unpin frontend_server_client and roll packages (flutter/flutter#146650) 2024-04-17 [email protected] Roll Packages from 90c876d to d39830e (4 revisions) (flutter/flutter#146895) 2024-04-17 [email protected] Roll Flutter Engine from 0e9e2f419225 to 25b09e883dd8 (1 revision) (flutter/flutter#146889) 2024-04-17 [email protected] Reland: Update link branches to `main` (flutter/flutter#146882) 2024-04-17 [email protected] Roll Flutter Engine from 4b949d7d6065 to 0e9e2f419225 (4 revisions) (flutter/flutter#146884) 2024-04-17 [email protected] Revert "Update link branches to `main`" (flutter/flutter#146880) 2024-04-17 [email protected] Fix `Tab` indicator image configuration doesn't inherit device pixel ratio (flutter/flutter#146812) 2024-04-17 [email protected] Roll Flutter Engine from 1ea39b29ce8c to 4b949d7d6065 (1 revision) (flutter/flutter#146865) 2024-04-17 [email protected] Update link branches to `main` (flutter/flutter#146558) 2024-04-17 [email protected] Roll Flutter Engine from 45c86593a09a to 1ea39b29ce8c (1 revision) (flutter/flutter#146863) 2024-04-17 [email protected] Rewrap some lines that are about to get much longer. (flutter/flutter#146803) 2024-04-17 [email protected] Roll Flutter Engine from 0cdbc8a6e463 to 45c86593a09a (1 revision) (flutter/flutter#146862) 2024-04-17 [email protected] Roll Flutter Engine from 31b67985de27 to 0cdbc8a6e463 (1 revision) (flutter/flutter#146861) 2024-04-17 [email protected] Roll Flutter Engine from e7d8c62d291a to 31b67985de27 (1 revision) (flutter/flutter#146859) 2024-04-17 [email protected] Roll Flutter Engine from 4d69c0c95483 to e7d8c62d291a (11 revisions) (flutter/flutter#146857) 2024-04-16 [email protected] Switch to relevant `Remote` constructors (flutter/flutter#146773) ...
This migrates Flutter to use the `@main` attribute introduced in Swift 5.3. The `@NSApplicationMain` attribute is deprecated and will be removed in Swift 6. See: https://github.com/apple/swift-evolution/blob/main/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.md This change is split into two commits: 1. flutter@a508d3e - This updates the macOS app template and adds a migration to replace `@NSApplicationMain` uses with `@main`. 2. flutter@f434827 - I ran `flutter run -d macos` on each Flutter macOS app in this repository to verify the app migrates and launches successfully. Follow-up to flutter#146707 Fixes flutter#143044
Roll Flutter from 3882afb to fb110b9 (56 revisions) flutter/flutter@3882afb...fb110b9 2024-04-18 [email protected] Fix memory leaks in `MaterialBanner` (flutter/flutter#146963) 2024-04-18 [email protected] Fix memory leak in data table (flutter/flutter#146892) 2024-04-18 [email protected] Dispose the curved animation in transition test (flutter/flutter#146961) 2024-04-18 [email protected] Roll Flutter Engine from 5687011d5e94 to 2c3e9c8bfce6 (1 revision) (flutter/flutter#146982) 2024-04-18 [email protected] Roll Flutter Engine from 132d364ef373 to 5687011d5e94 (2 revisions) (flutter/flutter#146972) 2024-04-18 [email protected] Roll Flutter Engine from 20638b75c8c4 to 132d364ef373 (1 revision) (flutter/flutter#146969) 2024-04-18 [email protected] [macOS] Migrate @NSApplicationMain attribute to @main (flutter/flutter#146848) 2024-04-18 [email protected] Roll Flutter Engine from 07f7532ecd29 to 20638b75c8c4 (2 revisions) (flutter/flutter#146962) 2024-04-18 [email protected] Roll Flutter Engine from 725ebd708246 to 07f7532ecd29 (1 revision) (flutter/flutter#146960) 2024-04-18 [email protected] Roll Flutter Engine from 624730fb8840 to 725ebd708246 (4 revisions) (flutter/flutter#146959) 2024-04-17 [email protected] Roll Flutter Engine from 9edcb26f5949 to 624730fb8840 (2 revisions) (flutter/flutter#146955) 2024-04-17 49699333+dependabot[bot]@users.noreply.github.com Bump github/codeql-action from 3.25.0 to 3.25.1 (flutter/flutter#146953) 2024-04-17 49699333+dependabot[bot]@users.noreply.github.com Bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 (flutter/flutter#146954) 2024-04-17 [email protected] Roll Flutter Engine from cc73c5c124c4 to 9edcb26f5949 (4 revisions) (flutter/flutter#146946) 2024-04-17 [email protected] Bump meta to 1.14.0 (flutter/flutter#146925) 2024-04-17 [email protected] Make goldenFileComparator a field instead of a trivial property (flutter/flutter#146800) 2024-04-17 [email protected] Assert that the goldenFileComparator is a LocalFileComparator (flutter/flutter#146802) 2024-04-17 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Try to be more consistent about deleting test apps in devicelab logic (#146931)" (flutter/flutter#146947) 2024-04-17 [email protected] Create web tests suite & runner_utils (flutter/flutter#146592) 2024-04-17 [email protected] Roll Flutter Engine from 376c86e3bbb6 to cc73c5c124c4 (3 revisions) (flutter/flutter#146940) 2024-04-17 [email protected] Try to be more consistent about deleting test apps in devicelab logic (flutter/flutter#146931) 2024-04-17 [email protected] Roll Flutter Engine from bc6382e35365 to 376c86e3bbb6 (2 revisions) (flutter/flutter#146937) 2024-04-17 [email protected] Remove now-redundant tests for isForEnvironment (flutter/flutter#146804) 2024-04-17 [email protected] Roll pub packages (flutter/flutter#146929) 2024-04-17 [email protected] Get rid of _NullElement. (flutter/flutter#146741) 2024-04-17 [email protected] Roll Flutter Engine from 818191d11404 to bc6382e35365 (2 revisions) (flutter/flutter#146930) 2024-04-17 [email protected] Fix memory leak in paginated tables (flutter/flutter#146755) 2024-04-17 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Try to be more consistent about deleting test apps in devicelab logic. (#146856)" (flutter/flutter#146927) 2024-04-17 [email protected] Roll Flutter Engine from 25b09e883dd8 to 818191d11404 (3 revisions) (flutter/flutter#146898) 2024-04-17 [email protected] Try to be more consistent about deleting test apps in devicelab logic. (flutter/flutter#146856) 2024-04-17 [email protected] Unpin frontend_server_client and roll packages (flutter/flutter#146650) 2024-04-17 [email protected] Roll Packages from 90c876d to d39830e (4 revisions) (flutter/flutter#146895) 2024-04-17 [email protected] Roll Flutter Engine from 0e9e2f419225 to 25b09e883dd8 (1 revision) (flutter/flutter#146889) 2024-04-17 [email protected] Reland: Update link branches to `main` (flutter/flutter#146882) 2024-04-17 [email protected] Roll Flutter Engine from 4b949d7d6065 to 0e9e2f419225 (4 revisions) (flutter/flutter#146884) 2024-04-17 [email protected] Revert "Update link branches to `main`" (flutter/flutter#146880) 2024-04-17 [email protected] Fix `Tab` indicator image configuration doesn't inherit device pixel ratio (flutter/flutter#146812) 2024-04-17 [email protected] Roll Flutter Engine from 1ea39b29ce8c to 4b949d7d6065 (1 revision) (flutter/flutter#146865) 2024-04-17 [email protected] Update link branches to `main` (flutter/flutter#146558) 2024-04-17 [email protected] Roll Flutter Engine from 45c86593a09a to 1ea39b29ce8c (1 revision) (flutter/flutter#146863) 2024-04-17 [email protected] Rewrap some lines that are about to get much longer. (flutter/flutter#146803) 2024-04-17 [email protected] Roll Flutter Engine from 0cdbc8a6e463 to 45c86593a09a (1 revision) (flutter/flutter#146862) 2024-04-17 [email protected] Roll Flutter Engine from 31b67985de27 to 0cdbc8a6e463 (1 revision) (flutter/flutter#146861) 2024-04-17 [email protected] Roll Flutter Engine from e7d8c62d291a to 31b67985de27 (1 revision) (flutter/flutter#146859) 2024-04-17 [email protected] Roll Flutter Engine from 4d69c0c95483 to e7d8c62d291a (11 revisions) (flutter/flutter#146857) 2024-04-16 [email protected] Switch to relevant `Remote` constructors (flutter/flutter#146773) ...
This migrates Flutter to use the
@mainattribute introduced in Swift 5.3. The@NSApplicationMainattribute is deprecated and will be removed in Swift 6. See: https://github.com/apple/swift-evolution/blob/main/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.mdThis change is split into two commits:
@NSApplicationMainuses with@main.flutter run -d macoson each Flutter macOS app in this repository to verify the app migrates and launches successfully.Follow-up to #146707
Fixes #143044
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.