Check for watch companion in build settings#113956
Check for watch companion in build settings#113956auto-submit[bot] merged 9 commits intoflutter:masterfrom
Conversation
…emes for Watch identifier
There was a problem hiding this comment.
/b/s/w/ir/x/w/flutter sdk/packages/flutter_tools/test/general.shard/project_test.dart:792: trailing U+0020 space character
/b/s/w/ir/x/w/flutter sdk/packages/flutter_tools/test/general.shard/project_test.dart:814: trailing U+0020 space character
/b/s/w/ir/x/w/flutter sdk/packages/flutter_tools/lib/src/xcode_project.dart:368: trailing U+0020 space character
Your IDE should have a "remove trailing spaces" editor option.

Also update the https://github.com/flutter/flutter/tree/master/dev/integration_tests/ios_app_with_extensions integration test to use INFOPLIST_KEY_WKCompanionAppBundleIdentifier instead. Ideally we would have 2 integration tests that tested both the Info.plist and build settings paths respectively, but I think just testing the current default pattern with the build setting would be enough.
|
|
||
| /// Check if one the [targets] of the project is a watchOS companion app target. | ||
| Future<bool> containsWatchCompanion(List<String> targets, BuildInfo buildInfo, String? deviceId) async { | ||
| Future<bool> containsWatchCompanion(List<String> targets, List<String> schemes, BuildInfo buildInfo, String? deviceId) async { |
There was a problem hiding this comment.
Instead of having to know the difference between the first and second position parameter with the same type, make these named parameters:
| Future<bool> containsWatchCompanion(List<String> targets, List<String> schemes, BuildInfo buildInfo, String? deviceId) async { | |
| Future<bool> containsWatchCompanion({ | |
| required List<String> targets, | |
| required List<String> schemes, | |
| required BuildInfo buildInfo, | |
| String? deviceId, | |
| }) async { |
| return false; | ||
| } | ||
| for (final String scheme in schemes) { | ||
| final Map<String, String>? allBuildSettings = await buildSettingsForBuildInfo(buildInfo, deviceId: deviceId, scheme: scheme, isWatch: true); |
There was a problem hiding this comment.
This line is a little long.
| final Map<String, String>? allBuildSettings = await buildSettingsForBuildInfo(buildInfo, deviceId: deviceId, scheme: scheme, isWatch: true); | |
| final Map<String, String>? allBuildSettings = await buildSettingsForBuildInfo( | |
| buildInfo, | |
| deviceId: deviceId, | |
| scheme: scheme, | |
| isWatch: true, | |
| ); |
| '-project', | ||
| '/', | ||
| '-destination', | ||
| 'generic/platform=watchOS', |
There was a problem hiding this comment.
Add test for the generic/platform=watchOS Simulator case.
…nterpreter to hold build settings per build context, add test for simulator watch build, adjust spacings
jmagman
left a comment
There was a problem hiding this comment.
Can this be marked ready for review? Looks pretty good to me.
|
|
||
| // The build settings of the watchOS companion app's scheme | ||
| // may contain the key INFOPLIST_KEY_WKCompanionAppBundleIdentifier | ||
| final bool watchIdentifierFound = firstMatchInFile(xcodeProjectInfoFile, _watchAppCompanionAppIdPattern) != null; |
There was a problem hiding this comment.
I don't think this needs to be a regex, you're just checking if the file contains this string at all. You can also remove _watchAppCompanionAppIdPattern.
| final bool watchIdentifierFound = firstMatchInFile(xcodeProjectInfoFile, _watchAppCompanionAppIdPattern) != null; | |
| final bool watchIdentifierFound = xcodeProjectInfoFile.readAsStringSync().contains('WKCompanionAppBundleIdentifier'); |
| } | ||
| } | ||
|
|
||
| // The build settings of the watchOS companion app's scheme |
There was a problem hiding this comment.
Can you update the "The Info.plist file of a target contains the key WKCompanionAppBundleIdentifier" comment above to explain why the Info.plist is checked first, then with a fallback to the more expensive build setting check?
| if (bundleIdentifier == fromBuild) { | ||
| return true; | ||
| } | ||
| if (fromBuild != null && fromBuild.contains(r'$')) { |
There was a problem hiding this comment.
| if (fromBuild != null && fromBuild.contains(r'$')) { | |
| if (fromBuild != null && fromBuild.contains('$')) { |
There was a problem hiding this comment.
I found that removing the r caused an error, because it expects an identifier or expression. If I escaped it, like '\$', the linter suggests to use a raw string instead of escaping https://dart-lang.github.io/linter/lints/use_raw_strings.html. So I left it as is.
| final File infoFile = hostAppRoot.childDirectory(target).childFile('Info.plist'); | ||
| // The Info.plist file of a target contains the key WKCompanionAppBundleIdentifier, | ||
| // if it is a watchOS companion app. | ||
| // In older versions of XCode, if the target was a watchOS companion app, |
There was a problem hiding this comment.
| // In older versions of XCode, if the target was a watchOS companion app, | |
| // In older versions of Xcode, if the target was a watchOS companion app, |
|
@vashworth can you mark this Ready for review? Generally as soon as it is ready for review it's good to make it not a draft to indicate to the reviewers that it's not a work in progress. 🙂 |
| if (bundleIdentifier == fromBuild) { | ||
| return true; | ||
| } | ||
| if (fromBuild != null && fromBuild.contains('\$')) { |
There was a problem hiding this comment.
info • Use raw string to avoid escapes • packages/flutter_tools/lib/src/xcode_project.dart:390:53 • use_raw_strings
you were right, put it back to r'.
Do you see these warnings in your IDE? You'll have a tighter iteration time if you can catch them locally.
There was a problem hiding this comment.
Whoops, I had been experimenting with it and forgot to change it back. I'll be more careful in the future!
There was a problem hiding this comment.
No worries at all, was checking if we needed to tune your IDE 🙂
jmagman
left a comment
There was a problem hiding this comment.
This looks great, a mighty first PR! 🎉 Thank you for working on this!
|
Also, this PR satisfies these three checks.
|
christopherfujino
left a comment
There was a problem hiding this comment.
LGTM, good work!
* e4b9796 [flutter_tools] Implement NotifyingLogger.supportsColor (flutter/flutter#113635) * 5a42f33 Roll Flutter Engine from d62aa9526a56 to 490b06d13390 (20 revisions) (flutter/flutter#113761) * 30161d4 Enable cache cleanup. (flutter/flutter#113729) * 780ceb5 Roll Flutter Engine from 490b06d13390 to bcd83df4ecbd (4 revisions) (flutter/flutter#113766) * 2668f90 Composing text shouldn't be part of undo/redo (flutter/flutter#108765) * 4f373e1 Roll Plugins from e6184f9 to a577c00 (4 revisions) (flutter/flutter#113769) * 482466e Roll Flutter Engine from bcd83df4ecbd to 3a7acb3dbe9b (6 revisions) (flutter/flutter#113771) * 483e1d9 Validate bins on path in doctor (flutter/flutter#113106) * 103a5c9 Overlay always applies clip (flutter/flutter#113770) * c0f8229 Roll Flutter Engine from 3a7acb3dbe9b to 69f2bc881f46 (3 revisions) (flutter/flutter#113780) * 7caaac2 link "iOS PlatformView BackdropFilter design doc" in the BackdropFilter widget's documentation (flutter/flutter#113779) * 46d2908 Roll Flutter Engine from 69f2bc881f46 to 3b6ecf9f1a66 (1 revision) (flutter/flutter#113789) * 37af038 Roll pub packages (flutter/flutter#113574) * 2340188 Roll Flutter Engine from 3b6ecf9f1a66 to 2b21a3125ca2 (6 revisions) (flutter/flutter#113798) * 3665dd8 Start generating coverage. (flutter/flutter#113587) * 25b10ef Roll Flutter Engine from 2b21a3125ca2 to 85e4fa84d660 (3 revisions) (flutter/flutter#113803) * 59d26c4 Roll Flutter Engine from 85e4fa84d660 to f24ea1a04d93 (3 revisions) (flutter/flutter#113806) * 07319a9 revert last 2 engine rolls (flutter/flutter#113835) * 782baec Resolve 113705: Separated longer running tests from `runMisc` to prevent flakiness from timeouts (flutter/flutter#113784) * 8834692 [web] Use TrustedTypes in flutter.js and other tools (flutter/flutter#112969) * 1f95a7d Roll Plugins from a577c00 to 7a7480a (4 revisions) (flutter/flutter#113834) * 1ebe53c Roll pub packages (flutter/flutter#113799) * 70c1f26 Avoid creating map literal in `flutter.gradle` multidex check (flutter/flutter#113845) * 8d13c89 Followup 113705: Allow the `slow` tests to break the tree as all tests in that shard previously could (flutter/flutter#113846) * 4323397 Roll Flutter Engine from 2b21a3125ca2 to 83092c04c105 (20 revisions) (flutter/flutter#113847) * f4804ad Roll Flutter Engine from 2b21a3125ca2 to de83ef6d2c26 (21 revisions) (flutter/flutter#113849) * 44c146a Bump actions/upload-artifact from 3.1.0 to 3.1.1 (flutter/flutter#113859) * 025a3ab Roll Flutter Engine from de83ef6d2c26 to 6aa683e365d5 (3 revisions) (flutter/flutter#113863) * 4c6251a Add fontFamilyFallback to ThemeData (flutter/flutter#112976) * a0731af Roll Flutter Engine from 6aa683e365d5 to c03114f1575d (2 revisions) (flutter/flutter#113864) * b5ac8c5 Roll Flutter Engine from c03114f1575d to 30cec21e4b3c (1 revision) (flutter/flutter#113871) * 92c3e29 Roll Flutter Engine from 30cec21e4b3c to e35f850102e6 (1 revision) (flutter/flutter#113872) * 1b5b469 Roll Flutter Engine from e35f850102e6 to 30bb44616bac (3 revisions) (flutter/flutter#113875) * 35daf37 Roll Flutter Engine from 30bb44616bac to 9a671daf1c92 (2 revisions) (flutter/flutter#113877) * 2714226 Roll Flutter Engine from 9a671daf1c92 to 07bdae45e7f9 (1 revision) (flutter/flutter#113888) * 777040d Roll Flutter Engine from 07bdae45e7f9 to 5abc1b8713be (1 revision) (flutter/flutter#113892) * fd813de Roll Flutter Engine from 5abc1b8713be to 51f8ac74b558 (1 revision) (flutter/flutter#113901) * 6ac2cc5 Roll Flutter Engine from 51f8ac74b558 to 360dcd1cf31a (1 revision) (flutter/flutter#113902) * e4cc916 Roll Flutter Engine from 360dcd1cf31a to fb9df8d65dc8 (1 revision) (flutter/flutter#113918) * 20c4b6c Roll Flutter Engine from fb9df8d65dc8 to f62df692058c (1 revision) (flutter/flutter#113919) * 4a62876 Roll Flutter Engine from f62df692058c to 7fc208c07693 (1 revision) (flutter/flutter#113926) * 12b05ca Roll Flutter Engine from 7fc208c07693 to 6bb2f03e6fd0 (1 revision) (flutter/flutter#113929) * a25c86c Roll Flutter Engine from 6bb2f03e6fd0 to 2b5d630e4831 (1 revision) (flutter/flutter#113938) * 28e0f08 Reland "[text_input] introduce TextInputControl" (flutter/flutter#113758) * 0b1fbd2 Roll Plugins from 7a7480a to 84f5ec6 (2 revisions) (flutter/flutter#113942) * 15a4b00 Use correct semantics for toggle buttons (flutter/flutter#113851) * a7fe536 [framework] re-rasterize when window size or insets changes (flutter/flutter#113647) * bd9021a Roll Flutter Engine from 2b5d630e4831 to 168c711a330e (1 revision) (flutter/flutter#113947) * 29397c2 Fix selectWordsInRange when last word is located before the first word (flutter/flutter#113224) * 6415de4 Roll Flutter Engine from 168c711a330e to 7cd07782141c (1 revision) (flutter/flutter#113948) * 700b449 Roll Flutter Engine from 7cd07782141c to 2f6c6583058b (2 revisions) (flutter/flutter#113951) * b4058b9 Update Popup Menu to support Material 3 (flutter/flutter#103606) * b571abf Scribble mixin (flutter/flutter#104128) * 903e9fb Roll Flutter Engine from 2f6c6583058b to f445898c1a28 (1 revision) (flutter/flutter#113959) * 2dd87fb Fix --local-engine for the new web/wasm mode (flutter/flutter#113759) * 3c2f500 Fix edge scrolling on platforms that select word by word on long press move (flutter/flutter#113128) * 5259e1b Add --empty to the flutter create command (flutter/flutter#113873) * 0c14308 Add branch coverage to flutter test (flutter/flutter#113802) * 7571f30 Roll Flutter Engine from f445898c1a28 to ecf2f85cab61 (5 revisions) (flutter/flutter#113968) * 391330f Roll Flutter Engine from ecf2f85cab61 to 926bb80f49a2 (2 revisions) (flutter/flutter#113971) * 884f4d0 Updated the Material Design tokens used to generate component defaults to v0.137. (flutter/flutter#113970) * 694b253 [Android] Fix spell check integration test guarded function conflict (flutter/flutter#113541) * 806fb93 Fix ScrollPosition.isScrollingNotifier.value for pointer scrolling (flutter/flutter#113972) * 14a7360 Roll Flutter Engine from 926bb80f49a2 to 7577fd46d50f (1 revision) (flutter/flutter#113974) * 6154b3b Improve Scrollbar drag behavior (flutter/flutter#112434) * 1037f99 Roll Flutter Engine from 7577fd46d50f to 24d7b5f255c0 (1 revision) (flutter/flutter#113976) * e62d519 Roll Flutter Engine from 24d7b5f255c0 to 75bfcd73ca8a (1 revision) (flutter/flutter#113981) * 49f0061 Roll Flutter Engine from 75bfcd73ca8a to b93c654bd158 (1 revision) (flutter/flutter#113984) * 2a59bd5 Roll Flutter Engine from b93c654bd158 to 9abb459368d5 (2 revisions) (flutter/flutter#113992) * 400136b Fix `Slider` overlay and value indicator interactive behavior on desktop. (flutter/flutter#113543) * b0e7c9c Move `AnimatedIcons` example and fix typo in `cupertino/text_selection_toolbar.dart` (flutter/flutter#113937) * 7f75d24 Add Material 3 `ProgressIndicator` examples (flutter/flutter#113950) * 593315e Roll Flutter Engine from 9abb459368d5 to 2b70cba93123 (1 revision) (flutter/flutter#113997) * 5304a24 Roll Flutter Engine from 2b70cba93123 to c414b1d57b2b (1 revision) (flutter/flutter#114000) * 3599b3a Add support for expression compilation when debugging integration tests (flutter/flutter#113481) * 13cb46d Roll Plugins from 84f5ec6 to fed9104 (2 revisions) (flutter/flutter#114019) * b375b4a Fix an issue that Dragging the iOS text selection handles is jumpy and iOS text selection update incorrectly. (flutter/flutter#109136) * 563e0a4 Page Up / Page Down in text fields (flutter/flutter#107602) * 0fe29f5 Raise an exception when invalid subshard name (flutter/flutter#113222) * dbbef15 Add Focus.parentNode to allow controlling the shape of the Focus tree. (flutter/flutter#113655) * b373be8 Upgrade gradle for flutter tool to 7.3.0 (flutter/flutter#114023) * 92d8b04 [macOS] Flavors project throws `no flavor specified` for creating a project. (flutter/flutter#113979) * ae143ad Hide debug logs from a MemoryAllocations test that intentionally throws an exception (flutter/flutter#113786) * e133721 Check for watch companion in build settings (flutter/flutter#113956) * 9f5c655 Revert "Check for watch companion in build settings (#113956)" (flutter/flutter#114035) * df259c5 Add `clipBehavior` and apply `borderRadius` to DataTable's Material (flutter/flutter#113205) * e76f883 Cache TextPainter plain text value to improve performance (flutter/flutter#109841) * a30d816 fix stretch effect with rtl support (flutter/flutter#113214) * af34b10 Roll Flutter Engine from c414b1d57b2b to 92500cfe7a65 (1 revision) (flutter/flutter#114001) * 3ce88d3 Replace menu defaults with tokens (flutter/flutter#113963) * 8c3806f Add parentNode to FocusScope widget (flutter/flutter#114034) * a30c63a Roll Flutter Engine from 92500cfe7a65 to e9aba46a7bcb (13 revisions) (flutter/flutter#114038) * 3ed14a0 Roll Flutter Engine from e9aba46a7bcb to b1f1ec2bae46 (4 revisions) (flutter/flutter#114043) * b816801 fix to add both flutter_test and integration_test (flutter/flutter#109650) * e39fa7a Fix wasted memory caused by debug fields - 16 bytes per object (when adding that should-be-removed field crosses double-word alignment) (flutter/flutter#113927) * d5c53b8 Fix text field label animation duration and curve (flutter/flutter#105966) * dcf219e Roll Flutter Engine from b1f1ec2bae46 to ce6649aeea6d (1 revision) (flutter/flutter#114044) * afa9a70 Roll Flutter Engine from ce6649aeea6d to a34d38ccb726 (1 revision) (flutter/flutter#114046) * 8b28104 Roll Flutter Engine from a34d38ccb726 to 71675e2de9f2 (2 revisions) (flutter/flutter#114049) * dd9b7ac Roll Flutter Engine from 71675e2de9f2 to c814452fcb26 (1 revision) (flutter/flutter#114052) * b00b2f1 Roll Flutter Engine from c814452fcb26 to ac95a3a4cc92 (1 revision) (flutter/flutter#114053) * dcc6a4c Roll Flutter Engine from ac95a3a4cc92 to 199166f7c642 (1 revision) (flutter/flutter#114056) * e739ad0 M3 Text field UI update (flutter/flutter#113776) * 89e1fbd Roll Flutter Engine from 199166f7c642 to c00953e610fa (1 revision) (flutter/flutter#114059) * 391f356 Roll Flutter Engine from c00953e610fa to 3b086a0e98e3 (1 revision) (flutter/flutter#114062) * 97970ac Roll Flutter Engine from 3b086a0e98e3 to 56841d491f80 (1 revision) (flutter/flutter#114065) * 8b36497 Roll Flutter Engine from 56841d491f80 to 27269992caec (1 revision) (flutter/flutter#114068) * 7d037f2 Roll Flutter Engine from 27269992caec to 25133f15440d (1 revision) (flutter/flutter#114075) * cb53405 Don't specify libraries-spec argument if we are passing a platform dill. (flutter/flutter#114045) * e6be983 Roll Plugins from fed9104 to cd8bb0a (9 revisions) (flutter/flutter#114077) * d988c11 Expose `alwaysShowMiddle` in `CupertinoSliverNavigationBar` (flutter/flutter#113544) * 5d93894 [flutter_tools] Decouple fatal-warnings check from fatal-infos (flutter/flutter#113748) * 609b8f3 Revert part of "Terminate simulator app on "q" (#113581)" (flutter/flutter#114083) * 235a325 Provide test API for accessibility announcements (flutter/flutter#109661) * e4a80b4 Roll Flutter Engine from 25133f15440d to 2705bcb4e7d6 (1 revision) (flutter/flutter#114084) * 51acda8 Update Cupertino text input padding (flutter/flutter#113958) * 7bca82c Roll Flutter Engine from 2705bcb4e7d6 to 31d21cbed7b2 (1 revision) (flutter/flutter#114086) * e334ac1 Revert "Update Cupertino text input padding (#113958)" (flutter/flutter#114102) * 671c532 107866: Add support for verifying SemanticsNode ordering in widget tests (flutter/flutter#113133) * 23d258d Remove deprecated `updateSemantics` API usage. (flutter/flutter#113382) * 156c313 Dispose animation controller in platform view benchmarks (flutter/flutter#110413) * 8cd7953 Roll Flutter Engine from 31d21cbed7b2 to a772d20c7550 (12 revisions) (flutter/flutter#114113) * eaecf46 Roll Flutter Engine from a772d20c7550 to 871de2f904a4 (6 revisions) (flutter/flutter#114119) * 732d117 Roll Flutter Engine from 871de2f904a4 to f0eb4f0bae67 (1 revision) (flutter/flutter#114122) * d9a2229 Roll Flutter Engine from f0eb4f0bae67 to 1ea6e5e2de95 (1 revision) (flutter/flutter#114125)

Add an additional check for watch companion by checking build settings of different schemes.
Fixes #92294.
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.