Skip to content

Conversation

@a-wallen
Copy link
Contributor

@a-wallen a-wallen commented Jan 13, 2023

Adds --flavor option to flutter run and flutter build. Running against preexisting devicelab flavor tests for feature parity between macOS, iOS, and Android.

It'll be easier to review after #117352, commits from c22f1cc to 727ee2c are from that PR.

Fixes #64088

Flavors macOS Checklist

  • flutter build
  • flutter install not needed since install doesn't do any work on DesktopDevices
  • flutter run
  • flutter drive

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
  • I signed the CLA.
  • 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.
  • All existing and new tests are passing.

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

@flutter-dashboard flutter-dashboard bot added c: contributor-productivity Team-specific productivity, code health, technical debt. tool Affects the "flutter" command-line tool. See also t: labels. labels Jan 13, 2023
@a-wallen a-wallen force-pushed the macos_flavor_tooling branch 3 times, most recently from e7f64b2 to 9185571 Compare January 13, 2023 19:36
@a-wallen a-wallen marked this pull request as ready for review January 13, 2023 23:11
@a-wallen a-wallen requested a review from keyonghan as a code owner January 13, 2023 23:11
@jmagman
Copy link
Member

jmagman commented Jan 13, 2023

I'll review once this is rebased on #117352, looks like this PR also includes that?

@a-wallen a-wallen changed the title Add new macos target configured for flavors [macos] add flavor options to the flutter_tool Jan 13, 2023
@a-wallen a-wallen changed the title [macos] add flavor options to the flutter_tool [macos] add flavor options to commands in the flutter_tool Jan 13, 2023
@a-wallen
Copy link
Contributor Author

a-wallen commented Jan 13, 2023

@stuartmorgan it looks like flutter install on all desktop devices doesn't do anything at the moment. Is there supposed to be a concrete implementation on macOS?

Here's the current console output

Installing com.example.placeholder to macOS...
Uninstalling old version...

which is misleading since device.isAppInstalled, device.uninstallApp, and device.installApp don't do anything on a DesktopDevice. How about adding for some clarity?

if(device is DesktopDevice) {
  globals.printStatus('`flutter install` on a desktop device is currently unavailable');
}

@jmagman
Copy link
Member

jmagman commented Jan 13, 2023

@stuartmorgan it looks like flutter install on all desktop devices doesn't do anything at the moment

@jonahwilliams may remember https://github.com/flutter/flutter/pull/26593/files#r249918739

@stuartmorgan-g
Copy link
Contributor

How about adding for some clarity?

Saying it's "currently unavailable" seems even less clear IMO, because it suggests there's some missing functionality that we plan to implement. AFAIK there's no reason for us to ever implement it (unless we support remote cross-desktop devices at some point).

@jonahwilliams
Copy link
Contributor

flutter install on mobile deivces copies the APK/IPA to the target device. When developing on the desktop, the host device is the target device, so there is nothing to install. We could make flutter install on desktop simply no-op and return 0, 🤷 .

If we added support for developing linux/macos/windows with a different target and host machine, we'd almost certainly need to implement a different device type/discovery. In that case flutter install wouldn't be a no-op, but since that doesn't exist I wouldn't worry about it.

@a-wallen a-wallen force-pushed the macos_flavor_tooling branch from e388ad8 to 75aaed7 Compare January 17, 2023 18:55
@a-wallen
Copy link
Contributor Author

Thanks @jonahwilliams and @stuartmorgan! Please let me know if 75aaed7 adequately addresses those comments and if there's a better way to check whether the host and target platform are the same.

@a-wallen a-wallen force-pushed the macos_flavor_tooling branch 2 times, most recently from e1d22f6 to 36d32cd Compare January 17, 2023 19:48
@a-wallen
Copy link
Contributor Author

a-wallen commented Jan 17, 2023

Review on this PR is blocked until #117352, which lands some commits in this PR (c22f1cc - 727ee2c) is unblocked on Google Testing (see b/261725731).

That is unless someone wants to give this a review in the meantime :)

@jmagman
Copy link
Member

jmagman commented Jan 18, 2023

Review on this PR is blocked until #117352, which lands some commits in this PR (c22f1cc - 727ee2c) is unblocked on Google Testing (see b/261725731).

Merge #117352 manually, it shouldn't impact g3.

@a-wallen a-wallen force-pushed the macos_flavor_tooling branch from 36d32cd to 0c5326d Compare January 18, 2023 17:37
@a-wallen
Copy link
Contributor Author

Merge #117352 manually, it shouldn't impact g3.

Done and rebased.

Copy link
Member

Choose a reason for hiding this comment

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

Why was this needed? The tool should be parsing the flavor from the configuration, I think?
macOS flavors should work with the same setup as iOS: https://docs.flutter.dev/deployment/flavors#creating-flavors-in-ios

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It probably isn't needed, but I followed the way that the iOS project was set up.

<string>${PRODUCT_FLAVOR}</string>

[flavorChannel setMethodCallHandler:^(FlutterMethodCall *call, FlutterResult result) {
NSString* flavor = (NSString*)[[NSBundle mainBundle].infoDictionary valueForKey:@"Flavor"];
result(flavor);
}];

Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The test passed because it checked the paid and not the free version. Regardless, the project was slightly broken when it landed because the PRODUCT_FLAVOR property for the free configs was missing in the .pbxproj.

Copy link
Member

Choose a reason for hiding this comment

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

This logic looks very suspect to detect a desktop device. Can the device itself say whether it supports installation?

bool get supportsHotReload => true;

Copy link
Contributor Author

Choose a reason for hiding this comment

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

d12e9a6 should have those revisions.

@a-wallen a-wallen force-pushed the macos_flavor_tooling branch 2 times, most recently from 64021c3 to 5c08c9b Compare January 18, 2023 21:52
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 20, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 20, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 20, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 20, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 20, 2023
auto-submit bot pushed a commit to flutter/plugins that referenced this pull request Jan 20, 2023
* 3348987 Add new macos target configured for flavors (flutter/flutter#117352)

* 6277520 Roll Plugins from 4e5cf2d to 11361d0 (4 revisions) (flutter/flutter#118682)

* 997d436 Fix applyBoxFit's handling of fitWidth and fitHeight. (flutter/flutter#117185)

* 8a58ec5 Roll Flutter Engine from f79030440948 to c52b290813bd (29 revisions) (flutter/flutter#118720)

* 374f09e [flutter_tools] No more implicit --no-sound-null-safety (flutter/flutter#118491)

* ae1cc18 remove single-view assumption from `paintImage` (flutter/flutter#118721)

* bb8b96a Fix path for require.js (flutter/flutter#118722)

* c83a698 update uikit view documentation (flutter/flutter#118715)

* 2b3ca0d Bump github/codeql-action from 2.1.38 to 2.1.39 (flutter/flutter#118735)

* 666dccc [macOS] bringup new e2e_summary devicelab test (flutter/flutter#118717)

* d07b88e Docs fix an=>a (flutter/flutter#118652)

* 11d21e0 Add @pragma('vm:entry-point') to RestorableRouteBuilder arguments (flutter/flutter#118738)

* 7d9eaab Appbar iconTheme override fix (flutter/flutter#118681)

* 6f70830 Roll Flutter Engine from c52b290813bd to 290636c1cb6b (2 revisions) (flutter/flutter#118743)

* b3059d2 Bump activesupport from 6.1.5 to 6.1.7.1 in /dev/ci/mac (flutter/flutter#118745)

* ffcf63a Add verbose flag to plugin_dependencies_test to debug flake (flutter/flutter#118755)

* 2609212 2a11023c7 [ios_platform_view] more precision when determine if a clip rrect is necessary (flutter/engine#38965) (flutter/flutter#118751)

* 21fb443 8ed6790b5 Bump chrome_and_driver version to 110. (flutter/engine#38986) (flutter/flutter#118758)

* e5c9d06 Forgot to remove emulator flag. (flutter/flutter#118762)

* 6a9b2db 95b0c151f Roll Dart SDK from 645fd748e79e to ddf70a598f27 (14 revisions) (flutter/engine#38990) (flutter/flutter#118763)

* 0bbb5ec 40f7f0f09 Roll Fuchsia Mac SDK from P5QcCJU8I71xVXuMT... to tlYMsnCv86Fjt5LfF... (flutter/engine#38994) (flutter/flutter#118771)

* d53cc4a [macOS] New e2e_summary benchmark fails without Cocoapods. (flutter/flutter#118754)

* 3e71e0c Updated `ListTile` documentation, add Material 3 example and other `ListTile` examples fixes. (flutter/flutter#118705)

* 213b3cb Check whether slider is mounted before interaction, no-op if unmounted (flutter/flutter#113556)

* 06909cc Update packages + fix tests for javascript mime change (flutter/flutter#118617)

* 46c7fd1 88e61d8bd Remove references to Observatory (flutter/engine#38919) (flutter/flutter#118793)

* b9ab640 Remove incorrect statement in documentation (flutter/flutter#118636)

* ea36b3a Add focus detector to CupertinoSwitch (flutter/flutter#118345)

* 9b5ea30 Switching over from iOS-15 to iOS-16 in .ci.yaml. (flutter/flutter#118807)

* 67ffaef 29a0582a1 Roll Fuchsia Mac SDK from tlYMsnCv86Fjt5LfF... to 6oiZwMyNsjucSxTHJ... (flutter/engine#39004) (flutter/flutter#118817)

* 5cd2d4c Support iOS wireless debugging (flutter/flutter#118104)

* cbf2e16 Revert "Support iOS wireless debugging (#118104)" (flutter/flutter#118826)

* 2258590 Do not run Mac_arm64_ios run_debug_test_macos in presubmit during iPhone 11 migration (flutter/flutter#118828)

* 1dd7f45 Add `build macos --config-only` option. (flutter/flutter#118649)

* 22520f5 [macOS] Add timeline summary benchmarks (flutter/flutter#118748)

* 99e4ca5 Roll Flutter Engine from 29a0582a1d5f to 78bbea005d27 (2 revisions) (flutter/flutter#118829)

* c5ceff1 [flutter_tools] Ensure service worker starts caching assets since first load  (flutter/flutter#116833)

* 818bb4e Roll Flutter Engine from 78bbea005d27 to 26b6609c603b (3 revisions) (flutter/flutter#118839)

* 09bd0f6 Support logging 'flutter run' communication to DAP clients (flutter/flutter#118674)

* 73096fd [macos] add flavor options to commands in the `flutter_tool` (flutter/flutter#118421)

* 030288d Revert "[macos] add flavor options to commands in the `flutter_tool` (#118421)" (flutter/flutter#118858)

* 9acf34d Roll Flutter Engine from 26b6609c603b to 7d40e77d0035 (2 revisions) (flutter/flutter#118852)

* ec51d32 Remove unnecessary null checks in ‘dev/conductor’ (flutter/flutter#118843)

* 54217bd Remove unnecessary null checks in `dev/benchmarks` (flutter/flutter#118840)

* 98c18ca Remove unnecessary null checks in examples/ (flutter/flutter#118848)

* 99b5262 Remove unnecessary null checks in dev/tools (flutter/flutter#118845)

* 52d1205 Roll Flutter Engine from 7d40e77d0035 to 730e88fb6787 (3 revisions) (flutter/flutter#118869)

* ee9c9b6 3876320cb Roll Skia from aedfc8695954 to 1b3aa8b6e1cc (43 revisions) (flutter/engine#39024) (flutter/flutter#118871)

* 589f2eb d2436a536 Extract WideToUTF16String/UTF16StringToWide to FML (flutter/engine#39020) (flutter/flutter#118873)

* 74645b4 Fix `NavigationBar` indicator ripple doesn't account for label height (flutter/flutter#117473)

* f78b1f3 dfe67f4c7 Roll Skia from 1b3aa8b6e1cc to f6a5c806294d (11 revisions) (flutter/engine#39027) (flutter/flutter#118874)

* 572f0a1 66e177a3d Roll Dart SDK from ddf70a598f27 to fbbfc122dba6 (9 revisions) (flutter/engine#39029) (flutter/flutter#118878)

* 26472b5 ccccee513 [macos] Synthesize modifier keys events on pointer events (flutter/engine#37870) (flutter/flutter#118880)

* 095b1ab Checkbox borderSide lerp bug fix (flutter/flutter#118728)

* ec6ff90 Roll Flutter Engine from ccccee513fb2 to d84b3dc74c9f (2 revisions) (flutter/flutter#118893)

* 492d572 Cleanup obsolete --compact-async compiler option (flutter/flutter#118894)

* f291eb3 Remove unnecessary null checks in integration_test (flutter/flutter#118861)

* ab3c822 Remove unnecessary null checks in dev/devicelab (flutter/flutter#118842)

* bf72f5e 58eb1061e Revert "Remove references to Observatory (#38919)" (flutter/engine#39035) (flutter/flutter#118899)

* a07e8a6 [reland] Support wireless debugging (flutter/flutter#118895)
mauricioluz pushed a commit to mauricioluz/plugins that referenced this pull request Jan 26, 2023
* 3348987 Add new macos target configured for flavors (flutter/flutter#117352)

* 6277520 Roll Plugins from 4e5cf2d to 11361d0 (4 revisions) (flutter/flutter#118682)

* 997d436 Fix applyBoxFit's handling of fitWidth and fitHeight. (flutter/flutter#117185)

* 8a58ec5 Roll Flutter Engine from f79030440948 to c52b290813bd (29 revisions) (flutter/flutter#118720)

* 374f09e [flutter_tools] No more implicit --no-sound-null-safety (flutter/flutter#118491)

* ae1cc18 remove single-view assumption from `paintImage` (flutter/flutter#118721)

* bb8b96a Fix path for require.js (flutter/flutter#118722)

* c83a698 update uikit view documentation (flutter/flutter#118715)

* 2b3ca0d Bump github/codeql-action from 2.1.38 to 2.1.39 (flutter/flutter#118735)

* 666dccc [macOS] bringup new e2e_summary devicelab test (flutter/flutter#118717)

* d07b88e Docs fix an=>a (flutter/flutter#118652)

* 11d21e0 Add @pragma('vm:entry-point') to RestorableRouteBuilder arguments (flutter/flutter#118738)

* 7d9eaab Appbar iconTheme override fix (flutter/flutter#118681)

* 6f70830 Roll Flutter Engine from c52b290813bd to 290636c1cb6b (2 revisions) (flutter/flutter#118743)

* b3059d2 Bump activesupport from 6.1.5 to 6.1.7.1 in /dev/ci/mac (flutter/flutter#118745)

* ffcf63a Add verbose flag to plugin_dependencies_test to debug flake (flutter/flutter#118755)

* 2609212 2a11023c7 [ios_platform_view] more precision when determine if a clip rrect is necessary (flutter/engine#38965) (flutter/flutter#118751)

* 21fb443 8ed6790b5 Bump chrome_and_driver version to 110. (flutter/engine#38986) (flutter/flutter#118758)

* e5c9d06 Forgot to remove emulator flag. (flutter/flutter#118762)

* 6a9b2db 95b0c151f Roll Dart SDK from 645fd748e79e to ddf70a598f27 (14 revisions) (flutter/engine#38990) (flutter/flutter#118763)

* 0bbb5ec 40f7f0f09 Roll Fuchsia Mac SDK from P5QcCJU8I71xVXuMT... to tlYMsnCv86Fjt5LfF... (flutter/engine#38994) (flutter/flutter#118771)

* d53cc4a [macOS] New e2e_summary benchmark fails without Cocoapods. (flutter/flutter#118754)

* 3e71e0c Updated `ListTile` documentation, add Material 3 example and other `ListTile` examples fixes. (flutter/flutter#118705)

* 213b3cb Check whether slider is mounted before interaction, no-op if unmounted (flutter/flutter#113556)

* 06909cc Update packages + fix tests for javascript mime change (flutter/flutter#118617)

* 46c7fd1 88e61d8bd Remove references to Observatory (flutter/engine#38919) (flutter/flutter#118793)

* b9ab640 Remove incorrect statement in documentation (flutter/flutter#118636)

* ea36b3a Add focus detector to CupertinoSwitch (flutter/flutter#118345)

* 9b5ea30 Switching over from iOS-15 to iOS-16 in .ci.yaml. (flutter/flutter#118807)

* 67ffaef 29a0582a1 Roll Fuchsia Mac SDK from tlYMsnCv86Fjt5LfF... to 6oiZwMyNsjucSxTHJ... (flutter/engine#39004) (flutter/flutter#118817)

* 5cd2d4c Support iOS wireless debugging (flutter/flutter#118104)

* cbf2e16 Revert "Support iOS wireless debugging (#118104)" (flutter/flutter#118826)

* 2258590 Do not run Mac_arm64_ios run_debug_test_macos in presubmit during iPhone 11 migration (flutter/flutter#118828)

* 1dd7f45 Add `build macos --config-only` option. (flutter/flutter#118649)

* 22520f5 [macOS] Add timeline summary benchmarks (flutter/flutter#118748)

* 99e4ca5 Roll Flutter Engine from 29a0582a1d5f to 78bbea005d27 (2 revisions) (flutter/flutter#118829)

* c5ceff1 [flutter_tools] Ensure service worker starts caching assets since first load  (flutter/flutter#116833)

* 818bb4e Roll Flutter Engine from 78bbea005d27 to 26b6609c603b (3 revisions) (flutter/flutter#118839)

* 09bd0f6 Support logging 'flutter run' communication to DAP clients (flutter/flutter#118674)

* 73096fd [macos] add flavor options to commands in the `flutter_tool` (flutter/flutter#118421)

* 030288d Revert "[macos] add flavor options to commands in the `flutter_tool` (#118421)" (flutter/flutter#118858)

* 9acf34d Roll Flutter Engine from 26b6609c603b to 7d40e77d0035 (2 revisions) (flutter/flutter#118852)

* ec51d32 Remove unnecessary null checks in ‘dev/conductor’ (flutter/flutter#118843)

* 54217bd Remove unnecessary null checks in `dev/benchmarks` (flutter/flutter#118840)

* 98c18ca Remove unnecessary null checks in examples/ (flutter/flutter#118848)

* 99b5262 Remove unnecessary null checks in dev/tools (flutter/flutter#118845)

* 52d1205 Roll Flutter Engine from 7d40e77d0035 to 730e88fb6787 (3 revisions) (flutter/flutter#118869)

* ee9c9b6 3876320cb Roll Skia from aedfc8695954 to 1b3aa8b6e1cc (43 revisions) (flutter/engine#39024) (flutter/flutter#118871)

* 589f2eb d2436a536 Extract WideToUTF16String/UTF16StringToWide to FML (flutter/engine#39020) (flutter/flutter#118873)

* 74645b4 Fix `NavigationBar` indicator ripple doesn't account for label height (flutter/flutter#117473)

* f78b1f3 dfe67f4c7 Roll Skia from 1b3aa8b6e1cc to f6a5c806294d (11 revisions) (flutter/engine#39027) (flutter/flutter#118874)

* 572f0a1 66e177a3d Roll Dart SDK from ddf70a598f27 to fbbfc122dba6 (9 revisions) (flutter/engine#39029) (flutter/flutter#118878)

* 26472b5 ccccee513 [macos] Synthesize modifier keys events on pointer events (flutter/engine#37870) (flutter/flutter#118880)

* 095b1ab Checkbox borderSide lerp bug fix (flutter/flutter#118728)

* ec6ff90 Roll Flutter Engine from ccccee513fb2 to d84b3dc74c9f (2 revisions) (flutter/flutter#118893)

* 492d572 Cleanup obsolete --compact-async compiler option (flutter/flutter#118894)

* f291eb3 Remove unnecessary null checks in integration_test (flutter/flutter#118861)

* ab3c822 Remove unnecessary null checks in dev/devicelab (flutter/flutter#118842)

* bf72f5e 58eb1061e Revert "Remove references to Observatory (#38919)" (flutter/engine#39035) (flutter/flutter#118899)

* a07e8a6 [reland] Support wireless debugging (flutter/flutter#118895)
cbracken added a commit to cbracken/flutter that referenced this pull request Jan 30, 2023
Adds --flavor option to flutter run and flutter build. Running against
preexisting devicelab flavor tests for feature parity between macOS,
iOS, and Android.

This relands flutter#118421 by alex-wallen which was reverted in flutter#118858 due to
the following test failures:

The bail-out with "Host and target are the same. Nothing to install."
added in `packages/flutter_tools/lib/src/commands/install.dart`
triggered failures in the following tests, which unconditionally attempt
to install the built app, which is unsupported on desktop since the
host and target are the same:

* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791495589540422465/+/u/run_flutter_view_macos__start_up/test_stdout
* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791496218824259121/+/u/run_complex_layout_win_desktop__start_up/test_stdout
* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791496218165602641/+/u/run_flutter_gallery_win_desktop__start_up/test_stdout

Fixes flutter#64088
auto-submit bot pushed a commit that referenced this pull request Jan 31, 2023
* Reland: [macos] add flavor options to tool commands

Adds --flavor option to flutter run and flutter build. Running against
preexisting devicelab flavor tests for feature parity between macOS,
iOS, and Android.

This relands #118421 by alex-wallen which was reverted in #118858 due to
the following test failures:

The bail-out with "Host and target are the same. Nothing to install."
added in `packages/flutter_tools/lib/src/commands/install.dart`
triggered failures in the following tests, which unconditionally attempt
to install the built app, which is unsupported on desktop since the
host and target are the same:

* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791495589540422465/+/u/run_flutter_view_macos__start_up/test_stdout
* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791496218824259121/+/u/run_complex_layout_win_desktop__start_up/test_stdout
* https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8791496218165602641/+/u/run_flutter_gallery_win_desktop__start_up/test_stdout

Fixes #64088

* Partial revert: eliminate install check on desktop

The original flavour support patch included a check that triggered a
failure when flutter install is run on desktop OSes. This was
intentional, since the host and target devices are the same and
installation is unnecessary to launch the app on currently-supported
desktop OSes.

Note that Windows UWP apps *do* require installation to run, and we used
to have an install command for those apps, though UWP is no longer
supported.

Since that part of the change was orthogonal to flavour support itself,
I'm reverting that component of the change and we can deal with it
separately if so desired.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App c: contributor-productivity Team-specific productivity, code health, technical debt. tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support flavors for macOS

4 participants