Skip to content

Make InternalFlutterSwift & InternalFlutterSwiftCommon internal for real - #190494

Merged
auto-submit[bot] merged 17 commits into
flutter:masterfrom
LongCatIsLooong:strip-swift-symbols
Aug 6, 2026
Merged

auto-submit[bot] merged 17 commits into
flutter:masterfrom
LongCatIsLooong:strip-swift-symbols

Conversation

@LongCatIsLooong

@LongCatIsLooong LongCatIsLooong commented Aug 4, 2026 •

Copy link
Copy Markdown
Contributor

Marking types and type members internal prevents the swift compiler from marking the corresponding symbols (in the case of @objc, both the Swift and Objc symbols) visible.

Unfortunately since the CI is still on Swift 6.2, so the -emit-clang-header-min-access flag is not available. As a result the engine/src/out/host_debug_unopt_arm64/gen/flutter/shell/platform/darwin/common/test_utils_swift/test_utils_swift.h file swift compiler emits doesn't actually include the interface of StringOutputWriter since it's internal. The only workaround I found was to manually add the interface. Adding a bridging header fixed that.

With these changes, when I build the iOS Flutter.framework with enable-testing set to false, the only visible swift symbols are from a class marked @usableFromInline (_FlutterTraceScope). And as gemini suggested I removed the @inlinable from that class. So no Swift symbols or internal objc symbols:

nm -gUm out/ios_debug_sim_unopt_arm64/Flutter.framework/Flutter 
00000000038d64b0 (__DATA,__common) external _FlutterEndOfEventStream
00000000038d64a8 (__DATA,__common) external _FlutterMethodNotImplemented
00000000037d5838 (__DATA_CONST,__const) external _FlutterSemanticsUpdateNotification
00000000037d5848 (__DATA_CONST,__const) external _FlutterViewControllerHideHomeIndicator
00000000037d5850 (__DATA_CONST,__const) external _FlutterViewControllerShowHomeIndicator
00000000037d5840 (__DATA_CONST,__const) external _FlutterViewControllerWillDealloc
00000000019bc8c4 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyBufferToTexture
00000000019bc9a8 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToBuffer
00000000019bca50 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToTexture
00000000019bc410 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Initialize
00000000019bc5b0 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Submit
00000000019c6df8 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultColorFormat
00000000019c7048 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultDepthStencilFormat
00000000019c7004 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultStencilFormat
00000000019c7174 (__TEXT,__text) external _InternalFlutterGpu_Context_GetMaxSamplerAnisotropy
00000000019c708c (__TEXT,__text) external _InternalFlutterGpu_Context_GetMinimumUniformByteAlignment
00000000019c70f4 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsFramebufferRenderMipmap
00000000019c7134 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsManuallyMippedTextures
00000000019c70cc (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsOffscreenMSAA
00000000019c6c30 (__TEXT,__text) external _InternalFlutterGpu_Context_InitializeDefault
00000000019c71b4 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureCompression
00000000019c7230 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureFormat
00000000019c9ca8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Flush
00000000019c9720 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Initialize
00000000019c99f8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
00000000019c9c48 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Overwrite
00000000019cc474 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Begin
00000000019cc6ec (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindIndexBufferDevice
00000000019cc4cc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindPipeline
00000000019ccb6c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTexture
00000000019cceb8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTextureIndexed
00000000019cc7fc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDevice
00000000019ccac4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDeviceIndexed
00000000019cc598 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindVertexBufferDevice
00000000019ccf54 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_ClearBindings
00000000019cd660 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Draw
00000000019cd6d4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_DrawIndexed
00000000019cbf98 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Initialize
00000000019cc0e4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorAttachment
00000000019ccf78 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEnable
00000000019ccfbc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEquation
00000000019cd4b0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetCullMode
00000000019cd0e8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthCompareOperation
00000000019cc2f0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthStencilAttachment
00000000019cd0ac (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthWriteEnable
00000000019cd5f4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPolygonMode
00000000019cd51c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPrimitiveType
00000000019cd168 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetScissor
00000000019cd3b4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilConfig
00000000019cd148 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilReference
00000000019cd2a0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetViewport
00000000019cd588 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetWindingOrder
00000000019d6208 (__TEXT,__text) external _InternalFlutterGpu_RenderPipeline_Initialize
00000000019e4898 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_GetShader
00000000019e4190 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithAsset
00000000019e44d8 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithBytes
00000000019e43a0 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithAsset
00000000019e473c (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithBytes
00000000019dc244 (__TEXT,__text) external _InternalFlutterGpu_Shader_DebugIsDirty
00000000019dc170 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformMemberOffset
00000000019dc0d0 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructIndex
00000000019dc04c (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructSize
00000000019dc120 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformTextureIndex
00000000019f2f64 (__TEXT,__text) external _InternalFlutterGpu_Surface_AcquireNextFrame
00000000019f2ff0 (__TEXT,__text) external _InternalFlutterGpu_Surface_DiscardFrame
00000000019f312c (__TEXT,__text) external _InternalFlutterGpu_Surface_GetBackingTextureCount
00000000019f3030 (__TEXT,__text) external _InternalFlutterGpu_Surface_GetCurrentImage
00000000019f2d4c (__TEXT,__text) external _InternalFlutterGpu_Surface_Initialize
00000000019f2f90 (__TEXT,__text) external _InternalFlutterGpu_Surface_PresentFrame
00000000019f3054 (__TEXT,__text) external _InternalFlutterGpu_Surface_Resize
00000000019f7650 (__TEXT,__text) external _InternalFlutterGpu_Texture_AsImage
00000000019f7674 (__TEXT,__text) external _InternalFlutterGpu_Texture_ImageTextureInfo
00000000019f7214 (__TEXT,__text) external _InternalFlutterGpu_Texture_Initialize
00000000019f7aec (__TEXT,__text) external _InternalFlutterGpu_Texture_InitializeFromImage
00000000019f75a0 (__TEXT,__text) external _InternalFlutterGpu_Texture_Overwrite
000000000388da18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterAppDelegate
0000000003890a20 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBasicMessageChannel
0000000003890bb0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryCodec
00000000038909d0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryMessengerRelay
000000000388dae0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackCache
000000000388da90 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackInformation
000000000388db58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterDartProject
000000000388dd88 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngine
000000000388df18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroup
000000000388def0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroupOptions
0000000003890a70 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterError
0000000003890b60 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEventChannel
000000000388df68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterHeadlessDartRunner
0000000003890c50 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMessageCodec
0000000003890ca0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMethodCodec
0000000003890ac0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodCall
0000000003890b10 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodChannel
000000000388e4b8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginAppLifeCycleDelegate
000000000388e5a8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginSceneLifeCycleDelegate
000000000388e558 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterSceneDelegate
0000000003890d68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMessageCodec
0000000003890db8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMethodCodec
0000000003890ea8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReader
0000000003890d40 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReaderWriter
0000000003890e08 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardTypedData
0000000003890e58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardWriter
0000000003890c00 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStringCodec
000000000388e828 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextInputView
000000000388eaa8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextureRegistryRelay
000000000388ebe8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterViewController
000000000388da40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterAppDelegate
0000000003890a48 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBasicMessageChannel
0000000003890bd8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryCodec
00000000038909f8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryMessengerRelay
000000000388dab8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackCache
000000000388da68 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackInformation
000000000388db80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterDartProject
000000000388de00 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngine
000000000388df40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroup
000000000388dec8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroupOptions
0000000003890a98 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterError
0000000003890b88 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEventChannel
000000000388df90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterHeadlessDartRunner
0000000003890c78 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMessageCodec
0000000003890cc8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMethodCodec
0000000003890ae8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodCall
0000000003890b38 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodChannel
000000000388e4e0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginAppLifeCycleDelegate
000000000388e5d0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginSceneLifeCycleDelegate
000000000388e580 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterSceneDelegate
0000000003890d90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMessageCodec
0000000003890de0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMethodCodec
0000000003890ed0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReader
0000000003890ef8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReaderWriter
0000000003890e30 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardTypedData
0000000003890e80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardWriter
0000000003890c28 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStringCodec
000000000388e968 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextInputView
000000000388ead0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextureRegistryRelay
000000000388ec10 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterViewController
00000000022b91c0 (__TEXT,__const) external _kDartSnapshotData
0000000001eb0440 (__TEXT,__text) external _kDartSnapshotText
0000000002dd0e40 (__TEXT,__const) external _kPlatformStrongDill
00000000037b76a0 (__TEXT,__const) external _kPlatformStrongDillSize

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.

@github-actions github-actions Bot added platform-ios iOS applications specifically engine flutter/engine related. See also e: labels. a: desktop Running on desktop team-ios Owned by iOS platform team team-macos Owned by the macOS platform team labels Aug 4, 2026
@LongCatIsLooong LongCatIsLooong added the CICD Run CI/CD label Aug 4, 2026
@github-actions github-actions Bot added the platform-macos Building on or for macOS specifically label Aug 4, 2026
@LongCatIsLooong
LongCatIsLooong marked this pull request as ready for review August 4, 2026 22:30
@LongCatIsLooong
LongCatIsLooong requested review from a team as code owners August 4, 2026 22:30

@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 restricts the visibility of various Swift classes, structs, protocols, and members across the Darwin platform implementation by removing explicit public and internal modifiers, and updates corresponding tests to use @testable import. The review feedback suggests further optimizing access control in Tracing+TraceScope.swift by removing @inlinable and @usableFromInline attributes from internal members, and identifies a typo in a comment within BUILD.gn.

Comment thread engine/src/flutter/shell/platform/darwin/common/BUILD.gn
@github-actions github-actions Bot added a: text input Entering text in a text field or keyboard related problems tool Affects the "flutter" command-line tool. See also t: labels. framework flutter/packages/flutter repository. See also f: labels. e: impeller Impeller rendering backend issues and features requests labels Aug 4, 2026
@github-actions github-actions Bot removed a: text input Entering text in a text field or keyboard related problems tool Affects the "flutter" command-line tool. See also t: labels. framework flutter/packages/flutter repository. See also f: labels. e: impeller Impeller rendering backend issues and features requests labels Aug 4, 2026
/// prevent timeline corruption.
@objc(FlutterTraceScope)
public final class TraceScope: NSObject {
final class TraceScope: NSObject {

@LongCatIsLooong LongCatIsLooong Aug 4, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the inlinable as gemini suggested, because the they're exposing symbols. According to the documentation that's expected behavior.

These APIs are currently not used. Maybe we can turn this into a freestanding macro instead of relying on the compiler to inline withTrace.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes! I have a branch that plays with this but getting macro support requires some build work in the toolchain stuff.

cbracken
cbracken previously approved these changes Aug 5, 2026

@cbracken cbracken left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM stamp from a Japanese personal seal

WOW!

@LongCatIsLooong LongCatIsLooong changed the title Make most classes in InternalFlutterSwift internal Make InternalFlutterSwift & InternalFlutterSwiftCommon internal for real Aug 5, 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.

I'm curious what was the original issue that forced us to use public? Is adding the bridging header the fix for that issue?

@LongCatIsLooong

LongCatIsLooong commented Aug 5, 2026 •

Copy link
Copy Markdown
Contributor Author

I'm curious what was the original issue that forced us to use public? Is adding the bridging header the fix for that issue?

From what I was seeing before making the bridging header change, the Objc header swiftc emitted for the test_utils_swift target (engine/src/out/host_debug_unopt_arm64/gen/flutter/shell/platform/darwin/common/test_utils_swift/test_utils_swift.h) was basically empty (it should include StringOutputWriter), unless you make that class public. So Objective-C code importing that header couldn't see the StringOutputWriter class unless you make the class public.

I was able to fix that using -emit-clang-header-min-access internal but that flag is only available on Swift 6.3+, then it turned out adding a bridging header magically fixes that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: desktop Running on desktop CICD Run CI/CD engine flutter/engine related. See also e: labels. platform-ios iOS applications specifically platform-macos Building on or for macOS specifically team-ios Owned by iOS platform team team-macos Owned by the macOS platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants