-
Notifications
You must be signed in to change notification settings - Fork 28.1k
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
Fix flutter run
on Mac x64 hosts if Swift Package Manager is enabled
#154645
Fix flutter run
on Mac x64 hosts if Swift Package Manager is enabled
#154645
Conversation
9367fa1
to
65b4d3e
Compare
65b4d3e
to
4f313f2
Compare
flutter run
on Mac x64 hosts if Swift Package Manager is enabled
final bool onlyActiveArch = activeArch == getCurrentDarwinArch(); | ||
|
||
buildCommands.add('ONLY_ACTIVE_ARCH=${onlyActiveArch? 'YES' : 'NO'}'); | ||
buildCommands.add('ARCHS=${activeArch.name}'); |
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.
A value of
YES
means the product includes only code for the native architecture (NATIVE_ARCH).A value of
NO
means the product includes code for the architectures specified in ARCHS (Architectures).
It means the native arch of the target phone or simulator, not the host Mac arch. If this is on a Mac x64 machine but targeting a physical arm64 device, I don't think this would work?
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.
If this is on a Mac x64 machine but targeting a physical arm64 device, I don't think this would work?
Here's a devicelab test that verifies this works on a Mac x64 machine targeting a physical arm64 device:
Description | Host machine | Target machine | CI test | Result |
---|---|---|---|---|
SwiftPM enabled without fix #154750 |
Mac x64 | Physical arm64 device | Link | ❌ |
SwiftPM enabled with fix #154749 |
Mac x64 | Physical arm64 device | Link | ✅ |
It means the native arch of the target phone or simulator, not the host Mac arch.
As in, NATIVE_ARCH is the native arch of the target phone or simulator? If so, I don't think that's true.
NATIVE_ARCH's docs:
Identifies the architecture on which the build is being performed (same as CURRENT_ARCH).
Also see this devicelab test of a x64 host for arm64 target: https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8737518504062464913/+/u/run_rrect_blur_perf_ios__timeline_summary/stdout
[2024-09-06 12:18:31.283585] [STDOUT] stdout: export ARCHS\=arm64
...
[2024-09-06 12:18:31.286058] [STDOUT] stdout: export NATIVE_ARCH\=x86_64
...
[2024-09-06 12:18:31.288132] [STDOUT] stdout: ♦ /opt/s/w/ir/x/w/rc/tmpbd9z5dzh/flutter sdk/bin/flutter --verbose assemble --no-version-check --output=/opt/s/w/ir/x/w/rc/tmpbd9z5dzh/flutter sdk/dev/benchmarks/macrobenchmarks/build/ios/Profile-iphoneos/ -dTargetPlatform=ios -dTargetFile=test_driver/run_app.dart -dBuildMode=profile -dIosArchs=arm64 -dSdkRoot=/opt/flutter/xcode/15a240d/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.0.sdk -dSplitDebugInfo= -dTreeShakeIcons=false -dTrackWidgetCreation=true -dDartObfuscation=false -dAction=build -dFrontendServerStarterPath= --ExtraGenSnapshotOptions= --DartDefines= --ExtraFrontEndOptions= -dCodesignIdentity=6475AE66068783D9C7566E71522EA3915C7D6C9A profile_ios_bundle_flutter_assets
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 investigating! I didn't have the details paged in.
Roll Flutter from 2e221e7308ba to 303f222e17e3 (77 revisions) flutter/flutter@2e221e7...303f222 2024-09-12 [email protected] Manual roll to 48ddaf578fb0c8326d5b4b680b0f49ea72e33216 (flutter/flutter#155070) 2024-09-12 [email protected] Externalize and update onboarding instructions (flutter/flutter#154730) 2024-09-12 [email protected] when setting up the log reader for a device during `flutter run`, discard any `RPCError` thrown due to the device being disconnected (flutter/flutter#155049) 2024-09-12 98614782+auto-submit[bot]@users.noreply.github.com Reverts "iOS: update provisioning profile for 2024-2025 cert (#155052)" (flutter/flutter#155059) 2024-09-12 [email protected] iOS: update provisioning profile for 2024-2025 cert (flutter/flutter#155052) 2024-09-11 [email protected] Factor out `Container` objects (flutter/flutter#153619) 2024-09-11 [email protected] Move (`dev/tools`), complete v0 of `native_driver` (Android) (flutter/flutter#154843) 2024-09-11 [email protected] Roll Flutter Engine from ade8ef293bc6 to ee5adf6d2ee1 (2 revisions) (flutter/flutter#155046) 2024-09-11 [email protected] Fix `flutter run` on Mac x64 hosts if Swift Package Manager is enabled (flutter/flutter#154645) 2024-09-11 [email protected] Roll Packages from bb53e5d to 4c18648 (1 revision) (flutter/flutter#155033) 2024-09-11 [email protected] Roll Flutter Engine from 4eb729b7a5c4 to ade8ef293bc6 (3 revisions) (flutter/flutter#155031) 2024-09-11 [email protected] fix: Dropdown menu trying to access highlight element which doesn't exist when search and filters both are enabled (flutter/flutter#151969) 2024-09-11 [email protected] Marks Linux build_tests_3_5 to be unflaky (flutter/flutter#154993) 2024-09-11 [email protected] Add 'direction' allow to 'SegmentedButton' oriented vertically (flutter/flutter#150903) 2024-09-11 [email protected] Marks Linux build_tests_5_5 to be unflaky (flutter/flutter#154995) 2024-09-11 [email protected] Update the signature of DDS launcher callback. (flutter/flutter#154949) 2024-09-11 [email protected] Migrate Color.toString() test, improves `equalsIgnoringHashCodes` (flutter/flutter#154934) 2024-09-11 [email protected] Update material and cupertino localizations (flutter/flutter#154959) 2024-09-11 [email protected] Marks Linux build_tests_1_5 to be unflaky (flutter/flutter#154991) 2024-09-11 [email protected] Marks Linux build_tests_2_5 to be unflaky (flutter/flutter#154992) 2024-09-11 [email protected] Fix `flutter create` warning regarding Java compatibility (flutter/flutter#152836) 2024-09-11 [email protected] Roll Flutter Engine from 54757dab9462 to 4eb729b7a5c4 (1 revision) (flutter/flutter#155022) 2024-09-11 [email protected] Fix java version used by `build_aar_module_test` (flutter/flutter#154967) 2024-09-11 [email protected] Roll Flutter Engine from 0a14c519ea4f to 54757dab9462 (1 revision) (flutter/flutter#155015) 2024-09-11 [email protected] Roll Flutter Engine from 35a3171b72c5 to 0a14c519ea4f (1 revision) (flutter/flutter#154984) 2024-09-11 [email protected] Roll Flutter Engine from b9c0b96c3316 to 35a3171b72c5 (1 revision) (flutter/flutter#154980) 2024-09-11 [email protected] Roll Flutter Engine from 52eeea075767 to b9c0b96c3316 (1 revision) (flutter/flutter#154976) 2024-09-11 [email protected] Roll Flutter Engine from a26075f9b1e6 to 52eeea075767 (1 revision) (flutter/flutter#154973) 2024-09-11 [email protected] Roll Flutter Engine from 60c15bc0f40e to a26075f9b1e6 (6 revisions) (flutter/flutter#154969) 2024-09-11 [email protected] Migrate `apple-mobile-web-*` to `mobile-web-*`. (flutter/flutter#154964) 2024-09-11 [email protected] Roll Flutter Engine from 8a038a6f7099 to 60c15bc0f40e (15 revisions) (flutter/flutter#154960) 2024-09-10 [email protected] Adds dart fixes for Color opacity functions (flutter/flutter#154953) 2024-09-10 [email protected] Missing benchmarks for `foundation/all_elements_bench.dart` (flutter/flutter#154954) 2024-09-10 [email protected] Update color assertions (flutter/flutter#154752) 2024-09-10 [email protected] handle EAGAIN (macOS) in ErrorHandlingProcessManager (flutter/flutter#154306) 2024-09-10 [email protected] fix unpack freezing app with animation duration zero (flutter/flutter#153890) 2024-09-10 [email protected] Remove last `--disable-dart-dev` in `flutter/flutter`. (flutter/flutter#154948) 2024-09-10 [email protected] Remove scheduler: luci from new `build_aar_module_test` (flutter/flutter#154945) 2024-09-10 [email protected] Roll pub packages (flutter/flutter#154939) 2024-09-10 [email protected] `CupertinoSlidingSegmentedControl` update (flutter/flutter#152976) 2024-09-10 [email protected] Roll pub packages (flutter/flutter#154933) 2024-09-10 [email protected] fix test `chrome.close can recover if getTab throws a StateError` (flutter/flutter#154889) 2024-09-10 [email protected] SearchBar context menu (flutter/flutter#154833) 2024-09-10 [email protected] Fix `flutter build aar` for modules that use a plugin (flutter/flutter#154757) 2024-09-10 [email protected] Roll Packages from b4e0fc1 to bb53e5d (4 revisions) (flutter/flutter#154926) 2024-09-10 [email protected] Clean up `SnackBar` inherit theme data test (flutter/flutter#154921) ...
Problem
Enabling the Swift Package Manager feature caused post-submit tests to fail on Mac x64 hosts:
Example error...
https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_ios%20rrect_blur_perf_ios__timeline_summary/575/overview
Reproduction
On a mac x64 host:
flutter channel master ; flutter upgrade
flutter config --no-enable-swift-package-manager
flutter run
(flutter build ios
does not reproduce this issue).Background
Previously, the Flutter framework was unpacked in the Xcode target's build. Unfortunately, this happens after Swift packages are built; this prevented Swift packages from using the Flutter framework.
To fix this, we added an Xcode pre-action that unpacks the Flutter framework before Swift Package Manager builds packages. The Xcode target still runs the Flutter framework unpack step, but this step no-ops if both unpack steps have the exact same inputs.
#150052 added an optimization that made it more likely the second unpack step no-ops by fixing a case where the target architecture input could be different:
This optimization is only applied if
ONLY_ACTIVE_ARCH
isYES
.Important
ONLY_ACTIVE_ARCH
's name is misleading. It specifies whether the product includes only object code for the native architecture.A value of
YES
means the product includes only code for the native architecture (NATIVE_ARCH).A value of
NO
means the product includes code for the architectures specified in ARCHS (Architectures).Problem
buildXcodeProject
incorrectly always setsONLY_ACTIVE_ARCH
toYES
if the Xcode built is for a single architecture:flutter/packages/flutter_tools/lib/src/ios/mac.dart
Lines 353 to 361 in 6abef22
This is incorrect! If the host architecture is
x64
but the target architecture isarm64
,ONLY_ACTIVE_ARCH
should beNO
.This caused the prepare pre-action to incorrectly use x64 as the target architecture for arm64 devices on an x64 host, which in turn caused builds to fail if Swift Package Manager was enabled.
Solution
This change updates
buildXcodeProject
to setONLY_ACTIVE_ARCH
correctly.This change also updates the prepare pre-action's to be more conservative in applying the optimization that filters the target architecture. This ensures that the build still works (but without the optimization) if
ONLY_ACTIVE_ARCH
is incorrectly set.Follow-up PR: #154649
This unblocks: #151567
DeviceLab test
This problem reproduces if you
flutter run
to an iPhone Arm64 device from an x64 mac host with the Swift Package Manager feature enabled.I ran an affected DeviceLab test to verify the fix works as expected:
Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.