[ios] Fix //flutter:unittests build for physical devices#189543
Merged
Conversation
When building tests under `ios_debug_unopt` targeting physical device SDKs, we get an ambiguous method call error for `[mockSession configuration]` because `mockSession` was untyped (`id`), and the iOS device SDK includes `Metal.framework/Headers/MTL4PipelineDataSetSerializer.h`, which defines a `configuration` property returning a primitive enum type `MTL4PipelineDataSetSerializerConfiguration`. Because the device SDK contains `configuration` methods returning both object pointers (such as `UISceneConfiguration*`) and primitive values, the compiler can't figure out the correct return type and calling convention for the invocation. This issue doesn't surface on simulator builds because `MTL4PipelineDataSetSerializer.h` header is stubbed out in the simulator SDK. We now explicitly type `mockSession` as a `UISceneSession*`, which fixes the issue. This also fixes a gn configuration error that triggers a link-time error. When building tests under `ios_debug_unopt` targeting device SDKs, the build fails at the linking stage with architecture compatibility errors. The `test_config` configuration in `//flutter/shell/platform/darwin/common/BUILD.gn` previously unconditionally appended `-mios-simulator-version-min`, regardless whether we were building for simulator or device. We now set the compiler/linker flags conditionally to `-miphoneos-version-min` for device targets (when `use_ios_simulator` is false) and `-mios-simulator-version-min` for simulator targets No changes to tests since this is a compilation fix for existing tests. Fixes flutter#189542
Contributor
There was a problem hiding this comment.
Code Review
This pull request updates the iOS build configuration in BUILD.gn to conditionally apply compiler and linker flags for either the simulator or the device depending on the use_ios_simulator flag, and refactors a test in FlutterSceneLifeCycleTest.mm to use a strongly-typed UISceneSession* instead of id for a mock session. Feedback suggests refactoring the build configuration to avoid duplicating the cflags and ldflags additions by defining a local variable for the version minimum flag.
cbracken
requested review from
LongCatIsLooong,
hellohuanlin,
jmagman and
vashworth
and removed request for
jmagman
July 16, 2026 00:41
LongCatIsLooong
approved these changes
Jul 16, 2026
cbracken
enabled auto-merge
July 16, 2026 01:29
This was referenced Jul 16, 2026
auto-submit Bot
pushed a commit
to flutter/packages
that referenced
this pull request
Jul 18, 2026
Roll Flutter from fc1ad955f164 to 8005793c3562 (40 revisions) flutter/flutter@fc1ad95...8005793 2026-07-18 [email protected] Remove `LineContents ` experimental AA line shader that is no longer used (flutter/flutter#189619) 2026-07-18 [email protected] Roll Skia from 9468e96cc40f to ba90f98535de (8 revisions) (flutter/flutter#189680) 2026-07-17 [email protected] Roll Dart SDK from 33e4b71e984b to 666e1e2133b7 (2 revisions) (flutter/flutter#189673) 2026-07-17 [email protected] [iOS] Fix potential use-after-free in a11y bridge channel handler (flutter/flutter#189637) 2026-07-17 [email protected] Migrate dev/tools skill validation to new dart_skills_lint API (flutter/flutter#189626) 2026-07-17 [email protected] Add validation for required fields during xcodebuild (flutter/flutter#187772) 2026-07-17 [email protected] Upgrade android_hardware_smoke_test CI to run instrumented tests (flutter/flutter#189390) 2026-07-17 [email protected] Roll Dart SDK from 0867cb1897b5 to 33e4b71e984b (1 revision) (flutter/flutter#189661) 2026-07-17 [email protected] Roll Skia from 702c3e790232 to 9468e96cc40f (1 revision) (flutter/flutter#189660) 2026-07-17 [email protected] Roll Packages from 9f95026 to 4fdc766 (11 revisions) (flutter/flutter#189659) 2026-07-17 [email protected] Roll Skia from 2e4a3ae035cd to 702c3e790232 (1 revision) (flutter/flutter#189655) 2026-07-17 [email protected] [macOS] Add FlutterPluginRegistrar.valuePublished(byPlugin:) just like iOS (flutter/flutter#189614) 2026-07-17 [email protected] Roll Dart SDK from c69d138c9646 to 0867cb1897b5 (2 revisions) (flutter/flutter#189649) 2026-07-17 [email protected] Roll Skia from 4f5aca109c87 to 2e4a3ae035cd (3 revisions) (flutter/flutter#189646) 2026-07-17 [email protected] [iOS] Fix missing nil checks and improve SemanticsObject bridge API (flutter/flutter#189630) 2026-07-17 [email protected] Roll Skia from 37c5e6b26aee to 4f5aca109c87 (19 revisions) (flutter/flutter#189638) 2026-07-17 [email protected] Roll Fuchsia Linux SDK from lLFbh5kFWbUGgC9Ek... to NL8xtzr8cxr5E8r8E... (flutter/flutter#189632) 2026-07-17 [email protected] Add blendMode parameter to RawImage and RenderImage (flutter/flutter#185938) 2026-07-17 [email protected] [web] Cache WASM network requests in flutter test (flutter/flutter#189623) 2026-07-17 [email protected] android_hardware_smoke_tests: Apply semantic line breaks to readme (flutter/flutter#189613) 2026-07-16 [email protected] ci(github-actions): resolve zizmor github-env findings in composite flutter actions (flutter/flutter#189602) 2026-07-16 [email protected] Remove obsolete packages analysis flag (flutter/flutter#189525) 2026-07-16 [email protected] Roll Dart SDK from e24870ff15bc to c69d138c9646 (2 revisions) (flutter/flutter#189597) 2026-07-16 [email protected] [fuchsia][iwyu] Remove transitive include of fuchsia.input.report. (flutter/flutter#188891) 2026-07-16 [email protected] Remove unnecessary value key hack in `key.dart` (flutter/flutter#189291) 2026-07-16 [email protected] Roll Dart SDK from 81306a2ed317 to e24870ff15bc (1 revision) (flutter/flutter#189569) 2026-07-16 [email protected] [Impeller] Fix atlas growth test (flutter/flutter#189533) 2026-07-16 [email protected] Roll Dart SDK from d402ff7c9c84 to 81306a2ed317 (4 revisions) (flutter/flutter#189558) 2026-07-16 [email protected] Move shared darwin plugin tests into own builder (flutter/flutter#189411) 2026-07-16 [email protected] Roll Skia from ab2410bc857c to 37c5e6b26aee (19 revisions) (flutter/flutter#189549) 2026-07-16 [email protected] [ios] Fix //flutter:unittests build for physical devices (flutter/flutter#189543) 2026-07-16 [email protected] Fix lower DragTarget not being recognized in overlapping targets (flutter/flutter#188979) 2026-07-16 [email protected] Relocate cupertino samples that were under widgets/ (flutter/flutter#188876) 2026-07-15 [email protected] [iOS] Migrate DisplayLinkManager to a shared instance (flutter/flutter#189492) 2026-07-15 [email protected] [Impeller] Call glfwTerminate during global test environment teardown if a playground test called glfwInit (flutter/flutter#189523) 2026-07-15 [email protected] Roll pub packages (flutter/flutter#189515) 2026-07-15 [email protected] Roll Packages from ad2eab1 to 9f95026 (8 revisions) (flutter/flutter#189509) 2026-07-15 [email protected] add `@nonVirtual` to `RenderObject.attached`, fix `WidgetTester.hasRunningAnimations` (flutter/flutter#186832) 2026-07-15 [email protected] Roll vulkan-deps to 0582f446e54a (flutter/flutter#188524) 2026-07-15 [email protected] Roll Dart SDK from 0c408ff6dce9 to d402ff7c9c84 (1 revision) (flutter/flutter#189497) 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. ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When building tests under
ios_debug_unopttargeting physical device SDKs, we get an ambiguous method call error for[mockSession configuration]becausemockSessioninFlutterLifecycleTestwas declared as untyped (id), and the iOS device SDK includesMetal.framework/Headers/MTL4PipelineDataSetSerializer.h, which defines aconfigurationproperty returning a primitive enum typeMTL4PipelineDataSetSerializerConfiguration.Because the device SDK contains
configurationmethods returning both object pointers (such asUISceneConfiguration*) and primitive values, the compiler can't figure out the correct return type and calling convention for the invocation. This issue doesn't surface on simulator builds becauseMTL4PipelineDataSetSerializer.hheader is stubbed out in the simulator SDK.We now explicitly type
mockSessionas aUISceneSession*, which fixes the issue.This also fixes a gn configuration error that triggers a link-time error.
When building tests under
ios_debug_unopttargeting device SDKs, the build fails at the linking stage with architecture compatibility errors. Thetest_configconfiguration in//flutter/shell/platform/darwin/common/BUILD.gnpreviously unconditionally appended-mios-simulator-version-min, regardless whether we were building for simulator or device.We now set the compiler/linker flags conditionally to
-miphoneos-version-minfor device targets (whenuse_ios_simulatoris false) and-mios-simulator-version-minfor simulator targetsNo changes to tests since this is a compilation fix for existing tests.
Fixes #189542
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance.
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.