Use swift demangle to verify internal Swift symbols#186835
Conversation
There was a problem hiding this comment.
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.
| final ProcessResult demangledResult = Process.runSync('swift', <String>[ | ||
| 'demangle', | ||
| '--tree-only', | ||
| entry.name, | ||
| ]); |
There was a problem hiding this comment.
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 { |
There was a problem hiding this comment.
Public members should have documentation. Please add a doc comment for the NmEntry class.
| final class NmEntry { | |
| /// An entry in the output of the `nm` command. | |
| final class NmEntry { |
References
- All public members should have documentation. (link)
| }); | ||
| } | ||
|
|
||
| bool get isAllowedCSymbol { |
There was a problem hiding this comment.
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
- All public members should have documentation. (link)
| name.startsWith('_Flutter'); | ||
| } | ||
|
|
||
| bool get isAllowedObjCSymbol { |
There was a problem hiding this comment.
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
- All public members should have documentation. (link)
6aa8d35 to
fa05d22
Compare
hellohuanlin
left a comment
There was a problem hiding this comment.
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) { |
There was a problem hiding this comment.
nit: let's be consistent here and move all cases out into helpers.
|
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. |
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: ...
…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: ...
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
Use
swift demangle --tree-onlyto 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-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.