Skip to content

iOS,macOS: Merge iOS, macOS config - #167945

Merged
auto-submit[bot] merged 1 commit into
flutter:masterfrom
cbracken:merge_ios_macos_sdk_finder
Apr 28, 2025
Merged

iOS,macOS: Merge iOS, macOS config#167945
auto-submit[bot] merged 1 commit into
flutter:masterfrom
cbracken:merge_ios_macos_sdk_finder

Conversation

@cbracken

@cbrackencbracken commented Apr 28, 2025

Copy link
Copy Markdown
Member

Merges iOS and macOS configuration and SDK finder scripts:

  • //build/mac/find_sdk.py and //build/ios/config/ios_sdk.py merge to
    //build/mac/apple_sdk.py.

  • //build/config/ios/ios_sdk.gni and //build/config/mac/mac_sdk.gni
    merge to //build/config/apple/apple_sdk.gni. gn args for macOS are
    available on all builds with host_os == "mac". gn args for iOS are
    available on builds where is_ios is true (in place of the existing
    conditional import logic). Merging the two allows us to check all
    Apple SDK-related variable for anything missing and run apple_sdk.py
    a maximum of once across all Apple platforms.

  • Adds Platforms directory to //flutter/prebuilts, which contains
    Apple platform symlinks for iPhoneOS, iPhoneSimulator, MacOSX.
    Adds ios_device_platform_path, ios_simulator_platform_path,
    mac_platform_path gn args to hold these paths. Adds logic to
    //flutter/tools/gn to locate these paths and prepopulate these args
    from them to avoid running the script as part of the build.

    These are used to link to Swift core libs for each platform where
    necessary, as well as (for tests) test frameworks and .swiftmodules
    like XCTest.framework.

  • Eliminates Library/Frameworks symlink from //flutter/prebuilts.
    This path is a subdirectory of each of the platform directories above.
    It was used to populate platform_frameworks_path in
    //flutter/shell/platform/darwin/ios/BUILD.gn using sort of sketchy
    relative-path logic.

    Further, the existing logic for greating the link was buggy for runs
    of ios_sdk.py where the --sdk option was not specified (i.e. all
    runs where --as-gclient-hook were specified). Without this option,
    we cycle through both iphoneos and iphonesimulator SDKs, and since
    this symlink was written on each iteration through the SDKs list, it
    was always linked to the Library/Frameworks directory for the last
    item in the list: iPhoneSimulator.platform. The platform arg for the
    current build is now resolved to ios_platform_path from which we
    resolve $ios_platform_path/Developer/Library/Frameworks.

A follow-up patch will refactor the iOS build file to extract an iOS
test config that eliminates some of the unnecessary duplication of
cc_flags, swiftflags, and ld_flags across targets.

Issue: #167592

Pre-launch Checklist

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

@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@github-actionsgithub-actionsBot added platform-ios iOS applications specifically engine flutter/engine related. See also e: labels. a: desktop Running on desktop platform-macos labels Apr 28, 2025
@cbracken

cbracken commented Apr 28, 2025

Copy link
Copy Markdown
MemberAuthor

Note, this is currently stacked on top of #167908. The second commit is the one with the relevant diffs.

Edit: it's now rebased and unstacked.

Comment threadengine/src/build/config/BUILDCONFIG.gn
Comment threadengine/src/build/config/apple/apple_sdk.gni
Comment threadengine/src/build/mac/apple_sdk.py
@stuartmorgan-g

Copy link
Copy Markdown
Contributor

test-exempt: code refactor with no semantic change

Merges iOS and macOS configuration and SDK finder scripts:
* //build/mac/find_sdk.py and //build/ios/config/ios_sdk.py merge to
//build/mac/apple_sdk.py.
* //build/config/ios/ios_sdk.gni and //build/config/mac/mac_sdk.gni
merge to //build/config/apple/apple_sdk.gni. gn args for macOS are
available on all builds with `host_os == "mac"`. gn args for iOS are
available on builds where `is_ios` is true (in place of the existing
conditional import logic). Merging the two allows us to check all
Apple SDK-related variable for anything missing and run `apple_sdk.py`
a maximum of once across all Apple platforms.
* Adds `Platforms` directory to `//flutter/prebuilts`, which contains
Apple platform symlinks for `iPhoneOS`, `iPhoneSimulator`, `MacOSX`.
Adds `ios_device_platform_path`, `ios_simulator_platform_path`,
`mac_platform_path` gn args to hold these paths. Adds logic to
`//flutter/tools/gn` to locate these paths and prepopulate these args
from them to avoid running the script as part of the build.
* Eliminates `Library/Frameworks` symlink from `//flutter/prebuilts`.
This path is a subdirectory of each of the platform directories above.
It was used to populate `platform_frameworks_path` in
`//flutter/shell/platform/darwin/ios/BUILD.gn` using sort of sketchy
relative-path logic.
Further, the existing logic for greating the link was buggy for runs
of `ios_sdk.py` where the `--sdk` option was not specified (i.e. all
runs where `--as-gclient-hook` were specified). Without this option,
we cycle through both `iphoneos` and `iphonesimulator` SDKs, and since
this symlink was written on each iteration through the `SDKs` list, it
was always linked to the `Library/Frameworks` directory for the last
item in the list: `iPhoneSimulator.platform`. The platform arg for the
current build is now resolved to `ios_platform_path` from which we
resolve `$ios_platform_path/Developer/Library/Frameworks`.
A follow-up patch will refactor the iOS build file to extract an iOS
test config that eliminates some of the unnecessary duplication of
cc_flags, swiftflags, and ld_flags across targets.
Issue: flutter#167592
@cbracken
cbrackenforce-pushed the merge_ios_macos_sdk_finder branch from 31d3ca8 to 824ae15CompareApril 28, 2025 18:32
Comment threadengine/src/build/config/apple/apple_sdk.gni
@cbrackencbracken added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 28, 2025
@auto-submit
auto-submitBot added this pull request to the merge queueApr 28, 2025
Merged via the queue into flutter:master with commit 34f8df3Apr 28, 2025
@flutter-dashboardflutter-dashboardBot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 28, 2025
Comment threadengine/src/build/config/apple/apple_sdk.gni
Comment threadengine/src/build/config/apple/apple_sdk.gni
Comment threadengine/src/build/config/apple/apple_sdk.gni
Comment threadengine/src/build/mac/apple_sdk.py
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 3, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 3, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 4, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 5, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 6, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 6, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 6, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 6, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 7, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 14, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 14, 2025
romanejaquez pushed a commit to romanejaquez/flutter that referenced this pull request Aug 14, 2025
Merges iOS and macOS configuration and SDK finder scripts:
* //build/mac/find_sdk.py and //build/ios/config/ios_sdk.py merge to
//build/mac/apple_sdk.py.
* //build/config/ios/ios_sdk.gni and //build/config/mac/mac_sdk.gni
merge to //build/config/apple/apple_sdk.gni. gn args for macOS are
available on all builds with `host_os == "mac"`. gn args for iOS are
available on builds where `is_ios` is true (in place of the existing
conditional import logic). Merging the two allows us to check all
Apple SDK-related variable for anything missing and run `apple_sdk.py`
a maximum of once across all Apple platforms.
* Adds `Platforms` directory to `//flutter/prebuilts`, which contains
Apple platform symlinks for `iPhoneOS`, `iPhoneSimulator`, `MacOSX`.
Adds `ios_device_platform_path`, `ios_simulator_platform_path`,
`mac_platform_path` gn args to hold these paths. Adds logic to
`//flutter/tools/gn` to locate these paths and prepopulate these args
from them to avoid running the script as part of the build.
These are used to link to Swift core libs for each platform where
necessary, as well as (for tests) test frameworks and `.swiftmodule`s
like XCTest.framework.
* Eliminates `Library/Frameworks` symlink from `//flutter/prebuilts`.
This path is a subdirectory of each of the platform directories above.
It was used to populate `platform_frameworks_path` in
`//flutter/shell/platform/darwin/ios/BUILD.gn` using sort of sketchy
relative-path logic.
Further, the existing logic for greating the link was buggy for runs
of `ios_sdk.py` where the `--sdk` option was not specified (i.e. all
runs where `--as-gclient-hook` were specified). Without this option,
we cycle through both `iphoneos` and `iphonesimulator` SDKs, and since
this symlink was written on each iteration through the `SDKs` list, it
was always linked to the `Library/Frameworks` directory for the last
item in the list: `iPhoneSimulator.platform`. The platform arg for the
current build is now resolved to `ios_platform_path` from which we
resolve `$ios_platform_path/Developer/Library/Frameworks`.
A follow-up patch will refactor the iOS build file to extract an iOS
test config that eliminates some of the unnecessary duplication of
cc_flags, swiftflags, and ld_flags across targets.
Issue: flutter#167592
## 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.
- [X] 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].
- [X] 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].
<!-- 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
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 15, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 15, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 16, 2025
@stuartmorgan-gstuartmorgan-g added platform-macos Building on or for macOS specifically and removed platform-macos labels Apr 16, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: desktopRunning on desktopengineflutter/engine related. See also e: labels.platform-iosiOS applications specificallyplatform-macosBuilding on or for macOS specifically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@cbracken@stuartmorgan-g@chinmaygarde@zanderso@jason-simmons@vashworth@hellohuanlin