Add warning for plugins not migrated to UIScene#182826
Add warning for plugins not migrated to UIScene#182826auto-submit[bot] merged 6 commits intoflutter:masterfrom
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds a warning that is logged when a plugin using application lifecycle events has not been migrated to UIScene. The warning message includes a link to the relevant migration guide. The change also includes new unit tests to verify that the warning is logged when a plugin does not conform to FlutterSceneLifeCycleDelegate, and that no warning is logged when it does.
| id mockAppDelegate = OCMProtocolMock(@protocol(FlutterAppLifeCycleProvider)); | ||
| id mockApplication = OCMClassMock([UIApplication class]); | ||
| OCMStub([mockApplication sharedApplication]).andReturn(mockApplication); | ||
| OCMStub([mockApplication delegate]).andReturn(mockAppDelegate); |
There was a problem hiding this comment.
This block of code for mocking UIApplication and its delegate is duplicated in testAddApplicationDelegateDoesNotLogWarningWhenPluginConformsToSceneDelegate (lines 798-801).
To improve maintainability and adhere to the DRY (Don't Repeat Yourself) principle, consider extracting this setup into a private helper method within the FlutterEngineTest class.
For example:
- (void)setUpApplicationLifeCycleProviderMock {
id mockAppDelegate = OCMProtocolMock(@protocol(FlutterAppLifeCycleProvider));
id mockApplication = OCMClassMock([UIApplication class]);
OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);
OCMStub([mockApplication delegate]).andReturn(mockAppDelegate);
}You could then call [self setUpApplicationLifeCycleProviderMock]; in both tests, which would make them cleaner and easier to maintain.
References
- The style guide recommends optimizing for readability. Reducing code duplication by extracting this common setup into a helper method would improve the readability and maintainability of these tests. (link)
| } | ||
| if (![delegate conformsToProtocol:@protocol(FlutterSceneLifeCycleDelegate)]) { | ||
| // TODO(vashworth): If the plugin doesn't conform to the FlutterSceneLifeCycleDelegate, | ||
| // print a warning pointing to documentation: https://github.com/flutter/flutter/issues/175956 |
There was a problem hiding this comment.
@vashworth i may be missing something - if a FlutterPlugin only wants non-UI related app life cycle events (e.g. didFinishLaunching), they don't have to implement FlutterSceneLifeCycleDelegate right?
There was a problem hiding this comment.
Good point. Also, while I was auditing plugins, I noticed a bunch call addApplicationDelegate, but then don't actually use any application lifecycle events.
@okorohelijah Can you update this to also check if the delegate has selectors for any of the following methods:
applicationDidBecomeActiveapplicationWillResignActiveapplicationWillEnterForegroundapplicationDidEnterBackgroundapplication:continueUserActivity:restorationHandler:application:performActionForShortcutItem:completionHandler:application:openURL:options:application:performFetchWithCompletionHandler:
There was a problem hiding this comment.
I wonder if we can just make FlutterPlugin to conform to FlutterSceneLifeCycleDelegate automatically (just like how FlutterPlugin conforms FlutterApplicationLifeCycleDelegate right now). Curious is there a reason behind not doing so?
There was a problem hiding this comment.
If I remember correctly, I decided to do it like this so we can easily tell if the plugin author has migrated
engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
Show resolved
Hide resolved
a9458be to
3a0f1d7
Compare
engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
Outdated
Show resolved
Hide resolved
- Only show warning when plugin actually implements scene-related lifecycle methods (applicationDidBecomeActive, applicationWillResignActive, applicationWillEnterForeground, applicationDidEnterBackground, application:continueUserActivity:restorationHandler:, application:performActionForShortcutItem:completionHandler:, application:openURL:options:, application:performFetchWithCompletionHandler:) - Extract duplicate mock setup into helper method (DRY principle) - Add third test case for plugins that don't use any lifecycle methods - Use concrete test class instead of OCMock for minimal plugin test
3a0f1d7 to
3bde0ad
Compare
engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
Outdated
Show resolved
Hide resolved
engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
Outdated
Show resolved
Hide resolved
hellohuanlin
left a comment
There was a problem hiding this comment.
LGTM after a function name change.
Though not necessarily related to this PR, I am still curious that's the decision behind having FlutterPlugin to auto-conform to FlutterApplicationLifeCycleDelegate, but not FlutterSceneLifeCycleDelegate. @vashworth do you recall?
engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm
Outdated
Show resolved
Hide resolved
Roll Flutter from d3dd7744e81f to d18214307703 (33 revisions) flutter/flutter@d3dd774...d182143 2026-03-06 [email protected] Roll Packages from 8d5c5cd to fe3de64 (2 revisions) (flutter/flutter#183308) 2026-03-06 [email protected] Roll Dart SDK from 1b51451cdb99 to 7c7c1e3d024d (2 revisions) (flutter/flutter#183294) 2026-03-06 [email protected] Roll Dart SDK from 9ac06cdd1801 to 1b51451cdb99 (9 revisions) (flutter/flutter#183289) 2026-03-06 [email protected] Add GitHub workflows to assist with release tasks (flutter/flutter#181978) 2026-03-06 [email protected] [Impeller] Fix new convex path shadow generation in perspective (flutter/flutter#183187) 2026-03-06 [email protected] Roll pub packages (flutter/flutter#183178) 2026-03-05 [email protected] fix: use double quotes in settings.gradle.kts template (flutter/flutter#183081) 2026-03-05 [email protected] Add fallbackColor for PredictiveBackPageTransitionBuilder and PredictiveBackFullscreenPageTransitionBuilder (flutter/flutter#182690) 2026-03-05 [email protected] Simplify TesterContextGLES (multithreading logic not needed), and enable some tests that now pass (flutter/flutter#183250) 2026-03-05 [email protected] Roll Skia from a94df1cdabb0 to a69ef43650ee (14 revisions) (flutter/flutter#183280) 2026-03-05 [email protected] Windowing implementation of `showDialog` that uses a native desktop window to display the content (flutter/flutter#181861) 2026-03-05 [email protected] Build CocoaPod plugin frameworks for Add to App FlutterPluginRegistrant (flutter/flutter#183239) 2026-03-05 [email protected] Extend the Linux web_skwasm_tests_1 timeout to 45 minutes (flutter/flutter#183247) 2026-03-05 [email protected] Update Dart to 3.12 beta 2 (flutter/flutter#183251) 2026-03-05 [email protected] Replace the rest of the references to `flutter/engine` with `flutter/flutter` (flutter/flutter#182938) 2026-03-05 [email protected] chore: convert android_verified_input to pub-workspace (flutter/flutter#183175) 2026-03-05 [email protected] Add await to flutter_test callsites (flutter/flutter#182983) 2026-03-05 [email protected] [iOS] Skip gesture recognizer reset workaround on iOS 26+ (flutter/flutter#183186) 2026-03-05 [email protected] Add warning for plugins not migrated to UIScene (flutter/flutter#182826) 2026-03-05 [email protected] Roll Fuchsia Linux SDK from JJw5EJ87vLGqFVl4h... to 8ay15_eQOEgPHCypm... (flutter/flutter#183255) 2026-03-05 [email protected] Roll Skia from ada0b7628c79 to a94df1cdabb0 (2 revisions) (flutter/flutter#183249) 2026-03-05 [email protected] Roll Packages from 82baf93 to 8d5c5cd (2 revisions) (flutter/flutter#183269) 2026-03-05 [email protected] Add `UnlabaledLeafNodeEvaluation` (flutter/flutter#182872) 2026-03-04 [email protected] Re-specify the ndk version in various test apps, to prevent ndk download (flutter/flutter#183134) 2026-03-04 [email protected] Eliminate rebuilds for Scaffold FAB animation (flutter/flutter#182331) 2026-03-04 [email protected] Add Michal Kucharski to AUTHORS (flutter/flutter#182366) 2026-03-04 [email protected] Merge changelog from 3.41.4 stable. (flutter/flutter#183243) 2026-03-04 [email protected] Allow stylus support on windows (flutter/flutter#165323) 2026-03-04 [email protected] Fix docs on SingletonFlutterWindow.supportsShowingSystemContextMenu (flutter/flutter#183142) 2026-03-04 [email protected] Roll Packages from 9083bc9 to 82baf93 (5 revisions) (flutter/flutter#183240) 2026-03-04 [email protected] Fixes FocusHighlightMode on Android when typing in software keyboard (flutter/flutter#180753) 2026-03-04 [email protected] Make compileShader() retry without sksl if it fails with sksl. (flutter/flutter#183146) 2026-03-04 [email protected] [web] Use pointer-events: auto for non-interactive leaf semantics nodes (flutter/flutter#183077) 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: ...
Add warning for plugins not migrated to UIScene *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* Fixes flutter#175956 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [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 `///`). - [x] 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 [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
Add warning for plugins not migrated to UIScene
List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.
Fixes #175956
If you had to change anything in the flutter/tests repo, include a link to the migration guide as per the breaking change policy.
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-assistbot 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.