Xcode 15的#Preview宏破坏framework的.swiftinterface文件
解决#Preview宏在XCFramework中未展开导致的编译错误
问题根源在于Xcode构建框架时,默认不会将#Preview宏从公开接口中移除,而该宏仅用于预览场景,不应出现在框架的.swiftinterface文件中,最终导致集成到应用后触发“顶级不允许表达式”的编译错误。
方案一:通过编译条件排除Preview代码
- 在框架Target的构建设置中,找到
SWIFT_ACTIVE_COMPILATION_CONDITIONS,为你用于构建XCFramework的配置(通常是Release)添加自定义编译标记,比如FRAMEWORK_BUILD。 - 在包含
#Preview的视图文件中,用条件编译包裹预览代码:
这样在构建XCFramework时,Preview代码会被直接排除,不会进入#if !FRAMEWORK_BUILD #Preview { YourCustomView() } #endif.swiftinterface文件。
方案二:隔离Preview代码到专属文件
- 创建单独的预览文件,比如
YourView+Preview.swift,将#Preview宏放在这个文件中。 - 在该文件的Target Membership设置里,取消勾选用于构建XCFramework的Release配置,只保留Debug模式的勾选。
构建XCFramework时,这个文件不会被纳入编译产物,自然不会将Preview宏带入公开接口。
补充说明
#Preview是Xcode15引入的编译期宏,仅用于Xcode的画布预览。框架构建时,公开接口会生成.swiftinterface供下游应用调用,默认情况下宏不会被自动过滤,因此必须通过上述方式主动排除预览代码,避免冲突。
内容的提问来源于stack exchange,提问作者lawicko
相关产品推荐
相关产品推荐

