Skip to content

Use swift demangle to verify internal Swift symbols#186835

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
LongCatIsLooong:use-swift-demangle
Jun 4, 2026
Merged

Use swift demangle to verify internal Swift symbols#186835
auto-submit[bot] merged 4 commits into
flutter:masterfrom
LongCatIsLooong:use-swift-demangle

Conversation

@LongCatIsLooong

Copy link
Copy Markdown
Contributor

Use swift demangle --tree-only to get the module name of a swift symbol.

Extracted from #181921

The comments added at the top of the file were copied from the PR description of #167530

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-assist bot 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.

@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label May 20, 2026
@github-actions github-actions Bot added the engine flutter/engine related. See also e: labels. label May 20, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the symbol verification logic for iOS binaries by replacing regex-based Swift symbol detection with a call to the swift demangle tool. It also updates the NmEntry class to be final and introduces helper getters for identifying allowed C and Objective-C symbols. Feedback suggests batching the swift demangle process to avoid performance issues from spawning multiple processes in a loop. Additionally, documentation is requested for the public NmEntry class and its new members to comply with the repository's style guide.

Comment on lines +133 to +137
final ProcessResult demangledResult = Process.runSync('swift', <String>[
'demangle',
'--tree-only',
entry.name,
]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Spawning a new process for every Swift symbol in a loop can be significantly slow, especially as the number of Swift symbols in the framework grows. swift demangle supports taking multiple symbols as arguments or reading from stdin. Consider batching the demangling process by collecting all isSwiftSymbol candidates first and running swift demangle once (or in large chunks) to improve performance.

}

class NmEntry {
final class NmEntry {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Public members should have documentation. Please add a doc comment for the NmEntry class.

Suggested change
final class NmEntry {
/// An entry in the output of the `nm` command.
final class NmEntry {
References
  1. All public members should have documentation. (link)

});
}

bool get isAllowedCSymbol {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Public members should have documentation. Please add a doc comment for isAllowedCSymbol.

  /// Returns true if the symbol is an allowed C symbol.
  bool get isAllowedCSymbol {
References
  1. All public members should have documentation. (link)

name.startsWith('_Flutter');
}

bool get isAllowedObjCSymbol {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Public members should have documentation. Please add a doc comment for isAllowedObjCSymbol.

  /// Returns true if the symbol is an allowed Objective-C symbol.
  bool get isAllowedObjCSymbol {
References
  1. All public members should have documentation. (link)

@github-actions github-actions Bot removed the CICD Run CI/CD label May 20, 2026
@LongCatIsLooong LongCatIsLooong added the CICD Run CI/CD label May 20, 2026
@github-actions github-actions Bot removed the CICD Run CI/CD label May 21, 2026
@LongCatIsLooong LongCatIsLooong added the CICD Run CI/CD label May 21, 2026
hellohuanlin
hellohuanlin previously approved these changes May 27, 2026

@hellohuanlin hellohuanlin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM
CC @cbracken in case you are interested.

(entry.type == '(__DATA,__objc_data)' || entry.type == '(__DATA,__data)') &&
(entry.name.startsWith(r'_OBJC_METACLASS_$_Flutter') ||
entry.name.startsWith(r'_OBJC_CLASS_$_Flutter'));
if (cInternalSymbol || entry.isAllowedCSymbol || entry.isAllowedObjCSymbol) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit: let's be consistent here and move all cases out into helpers.

@LongCatIsLooong LongCatIsLooong added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 4, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 4, 2026
@auto-submit

auto-submit Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/186835, because The base commit of the PR is older than 7 days and can not be merged. Please merge the latest changes from the main into this branch and resubmit the PR.

@github-actions github-actions Bot removed the CICD Run CI/CD label Jun 4, 2026
@LongCatIsLooong LongCatIsLooong added CICD Run CI/CD autosubmit Merge PR when tree becomes green via auto submit App labels Jun 4, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Jun 4, 2026
Merged via the queue into flutter:master with commit 2fdb0a5 Jun 4, 2026
204 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 4, 2026
@LongCatIsLooong
LongCatIsLooong deleted the use-swift-demangle branch June 4, 2026 21:53
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jun 5, 2026
Roll Flutter from 2ba5420a7049 to 1bdf4af29076 (43 revisions)

flutter/flutter@2ba5420...1bdf4af

2026-06-05 [email protected] Roll Packages from 03352b5 to 61bdbb4 (5 revisions) (flutter/flutter#187612)
2026-06-05 [email protected] Roll Skia from 6e003d7f69c8 to a47a9a2c8ae5 (1 revision) (flutter/flutter#187610)
2026-06-05 [email protected] Roll Dart SDK from aad8be4ce307 to 6a9a0efe66eb (10 revisions) (flutter/flutter#187609)
2026-06-05 [email protected] Roll Skia from 494f1bf55f51 to 6e003d7f69c8 (2 revisions) (flutter/flutter#187607)
2026-06-05 [email protected] Roll Fuchsia Linux SDK from ZE1Jy9CtVVi-tjBAE... to N_LiSaBSUsE2LDZgG... (flutter/flutter#187597)
2026-06-05 [email protected] Roll Skia from 59556fdb8c33 to 494f1bf55f51 (2 revisions) (flutter/flutter#187596)
2026-06-04 [email protected] Roll Skia from 8eb107046fd5 to 59556fdb8c33 (1 revision) (flutter/flutter#187590)
2026-06-04 [email protected] Remove `embedded_android_views_integration_test.dart` (flutter/flutter#187465)
2026-06-04 [email protected] Remove Material imports from rendering editable tests (flutter/flutter#186951)
2026-06-04 [email protected] [Impeller] Wait for the Vulkan device to become idle before destroying Vulkan objects in the AHBSwapchainImplVK destructor (flutter/flutter#187477)
2026-06-04 [email protected] [iOS] Eliminate unnecessary redeclaration of FlutterDisplayLink (flutter/flutter#187557)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187583)
2026-06-04 [email protected] Log stdout in adb.dart (flutter/flutter#187531)
2026-06-04 [email protected] Clarify RouterDelegate popRoute bubbling (flutter/flutter#186875)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187584)
2026-06-04 [email protected] Add updating-android-sdk agent skill for rolling Android SDK in CIPD (flutter/flutter#187576)
2026-06-04 [email protected] Fixing alignment issue (flutter/flutter#187518)
2026-06-04 [email protected] [Material Cross Imports] Clean up Material Divider usages (flutter/flutter#187300)
2026-06-04 [email protected] Roll Skia from cecc0e0da9ae to 928ded2a31af (6 revisions) (flutter/flutter#187574)
2026-06-04 [email protected] Use swift demangle to verify internal Swift symbols (flutter/flutter#186835)
2026-06-04 [email protected] Add android 37 platform and build tools to script for android cipd bundle creation (flutter/flutter#187571)
2026-06-04 [email protected] [Impeller] Increase the precision of the IPSampleWithTileModeOES coords parameter to match the input coordinates in the tiled_texture_fill_external shader (flutter/flutter#187545)
2026-06-04 [email protected] Roll Packages from b11504f to 03352b5 (4 revisions) (flutter/flutter#187569)
2026-06-04 [email protected] Roll Dart SDK to Dart 3.13 beta2 (flutter/flutter#187555)
2026-06-04 [email protected] Roll Skia from 611e3f8ceb93 to cecc0e0da9ae (1 revision) (flutter/flutter#187562)
2026-06-04 [email protected] Add step to bootstrap Flutter tool in coverage workflow (flutter/flutter#187199)
2026-06-04 [email protected] Roll Skia from 4fdb859c8da7 to 611e3f8ceb93 (4 revisions) (flutter/flutter#187554)
2026-06-04 [email protected] Roll Skia from 0020aae33f63 to 4fdb859c8da7 (2 revisions) (flutter/flutter#187552)
2026-06-04 [email protected] Roll Fuchsia Linux SDK from ap7MhLX4TdpWRrLS_... to ZE1Jy9CtVVi-tjBAE... (flutter/flutter#187550)
2026-06-04 [email protected] Add vector_math to package issue template (flutter/flutter#187536)
2026-06-04 [email protected] Manual roll Dart SDK from d39850bf4a01 to 3b70b98fa7c0 (flutter/flutter#187519)
2026-06-04 [email protected] Roll Skia from d625048c853a to 0020aae33f63 (20 revisions) (flutter/flutter#187539)
2026-06-04 [email protected] [Impeller][Windows] fix black screen on OpenGL fallback (flutter/flutter#187288)
2026-06-04 [email protected] Fix unintentionally joined path contours (flutter/flutter#187522)
2026-06-03 [email protected] fix: resolve issue #177379 by using lazy buildDirectory.dir() API in build.gradle template (flutter/flutter#187127)
2026-06-03 [email protected] Add a skill for flake analysis (flutter/flutter#187530)
2026-06-03 [email protected] adds linux impeller project flag (flutter/flutter#186982)
2026-06-03 [email protected] Add support for stylus buttons (flutter/flutter#183369)
2026-06-03 [email protected] Prevent Cubic transform from looping on out-of-range input (flutter/flutter#185875)
2026-06-03 [email protected] [Impeller] Reland: Allow attaching specific texture mip levels and slices (flutter/flutter#187470)
2026-06-03 [email protected] [skia] Update image deserial proc (flutter/flutter#185041)
2026-06-03 [email protected] docs: update Impeller advanced blend docs for framebuffer fetch (flutter/flutter#185457)
2026-06-03 [email protected] Handle#6537 fifth grouped tests (flutter/flutter#183720)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
...
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11849)

Roll Flutter from 2ba5420a7049 to 1bdf4af29076 (43 revisions)

flutter/flutter@2ba5420...1bdf4af

2026-06-05 [email protected] Roll Packages from 03352b5 to 61bdbb4 (5 revisions) (flutter/flutter#187612)
2026-06-05 [email protected] Roll Skia from 6e003d7f69c8 to a47a9a2c8ae5 (1 revision) (flutter/flutter#187610)
2026-06-05 [email protected] Roll Dart SDK from aad8be4ce307 to 6a9a0efe66eb (10 revisions) (flutter/flutter#187609)
2026-06-05 [email protected] Roll Skia from 494f1bf55f51 to 6e003d7f69c8 (2 revisions) (flutter/flutter#187607)
2026-06-05 [email protected] Roll Fuchsia Linux SDK from ZE1Jy9CtVVi-tjBAE... to N_LiSaBSUsE2LDZgG... (flutter/flutter#187597)
2026-06-05 [email protected] Roll Skia from 59556fdb8c33 to 494f1bf55f51 (2 revisions) (flutter/flutter#187596)
2026-06-04 [email protected] Roll Skia from 8eb107046fd5 to 59556fdb8c33 (1 revision) (flutter/flutter#187590)
2026-06-04 [email protected] Remove `embedded_android_views_integration_test.dart` (flutter/flutter#187465)
2026-06-04 [email protected] Remove Material imports from rendering editable tests (flutter/flutter#186951)
2026-06-04 [email protected] [Impeller] Wait for the Vulkan device to become idle before destroying Vulkan objects in the AHBSwapchainImplVK destructor (flutter/flutter#187477)
2026-06-04 [email protected] [iOS] Eliminate unnecessary redeclaration of FlutterDisplayLink (flutter/flutter#187557)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187583)
2026-06-04 [email protected] Log stdout in adb.dart (flutter/flutter#187531)
2026-06-04 [email protected] Clarify RouterDelegate popRoute bubbling (flutter/flutter#186875)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187584)
2026-06-04 [email protected] Add updating-android-sdk agent skill for rolling Android SDK in CIPD (flutter/flutter#187576)
2026-06-04 [email protected] Fixing alignment issue (flutter/flutter#187518)
2026-06-04 [email protected] [Material Cross Imports] Clean up Material Divider usages (flutter/flutter#187300)
2026-06-04 [email protected] Roll Skia from cecc0e0da9ae to 928ded2a31af (6 revisions) (flutter/flutter#187574)
2026-06-04 [email protected] Use swift demangle to verify internal Swift symbols (flutter/flutter#186835)
2026-06-04 [email protected] Add android 37 platform and build tools to script for android cipd bundle creation (flutter/flutter#187571)
2026-06-04 [email protected] [Impeller] Increase the precision of the IPSampleWithTileModeOES coords parameter to match the input coordinates in the tiled_texture_fill_external shader (flutter/flutter#187545)
2026-06-04 [email protected] Roll Packages from b11504f to 03352b5 (4 revisions) (flutter/flutter#187569)
2026-06-04 [email protected] Roll Dart SDK to Dart 3.13 beta2 (flutter/flutter#187555)
2026-06-04 [email protected] Roll Skia from 611e3f8ceb93 to cecc0e0da9ae (1 revision) (flutter/flutter#187562)
2026-06-04 [email protected] Add step to bootstrap Flutter tool in coverage workflow (flutter/flutter#187199)
2026-06-04 [email protected] Roll Skia from 4fdb859c8da7 to 611e3f8ceb93 (4 revisions) (flutter/flutter#187554)
2026-06-04 [email protected] Roll Skia from 0020aae33f63 to 4fdb859c8da7 (2 revisions) (flutter/flutter#187552)
2026-06-04 [email protected] Roll Fuchsia Linux SDK from ap7MhLX4TdpWRrLS_... to ZE1Jy9CtVVi-tjBAE... (flutter/flutter#187550)
2026-06-04 [email protected] Add vector_math to package issue template (flutter/flutter#187536)
2026-06-04 [email protected] Manual roll Dart SDK from d39850bf4a01 to 3b70b98fa7c0 (flutter/flutter#187519)
2026-06-04 [email protected] Roll Skia from d625048c853a to 0020aae33f63 (20 revisions) (flutter/flutter#187539)
2026-06-04 [email protected] [Impeller][Windows] fix black screen on OpenGL fallback (flutter/flutter#187288)
2026-06-04 [email protected] Fix unintentionally joined path contours (flutter/flutter#187522)
2026-06-03 [email protected] fix: resolve issue #177379 by using lazy buildDirectory.dir() API in build.gradle template (flutter/flutter#187127)
2026-06-03 [email protected] Add a skill for flake analysis (flutter/flutter#187530)
2026-06-03 [email protected] adds linux impeller project flag (flutter/flutter#186982)
2026-06-03 [email protected] Add support for stylus buttons (flutter/flutter#183369)
2026-06-03 [email protected] Prevent Cubic transform from looping on out-of-range input (flutter/flutter#185875)
2026-06-03 [email protected] [Impeller] Reland: Allow attaching specific texture mip levels and slices (flutter/flutter#187470)
2026-06-03 [email protected] [skia] Update image deserial proc (flutter/flutter#185041)
2026-06-03 [email protected] docs: update Impeller advanced blend docs for framebuffer fetch (flutter/flutter#185457)
2026-06-03 [email protected] Handle#6537 fifth grouped tests (flutter/flutter#183720)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
...
via-guy pushed a commit to via-guy/flutter that referenced this pull request Jun 26, 2026
Use `swift demangle --tree-only` to get the module name of a swift
symbol.

Extracted from flutter#181921

The comments added at the top of the file were copied from the PR
description of flutter#167530



## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot 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.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD engine flutter/engine related. See also e: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants