error: using bridging headers with module interfaces is unsupported Command CompileSwiftSources failed with a nonzero exit code

error: using bridging headers with module interfaces is unsupported Command CompileSwiftSources failed with a nonzero exit code

我已经为我的一个静态库应用程序切换到 Xcode12。我正在尝试进行 XCFramework 分发。 运行 生成命令后,

xcodebuild archive -scheme "MySDK" -sdk iphoneos  -archivePath “./archives/ios.xcarchive” -SKIP_INSTALL=NO

当我将 Build Settings -> Build Libraries for Distribution 切换为 YES

时出现以下错误
<unknown>:0: error: using bridging headers with module interfaces is unsupported
Command CompileSwiftSources failed with a nonzero exit code

** ARCHIVE FAILED **


The following build commands failed:
    CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compiler
    CompileSwiftSources normal armv7s com.apple.xcode.tools.swift.compiler
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(3 failures)

This answer 有效但不幸的是创建 .xcframework 需要设置选项分布 YES.

如何解决这个问题?

Apple 似乎不赞成桥接 header 支持模块,但是 their documentation regarding how to include C headers is missing. The information is instead found in the more detailed clang docs.

尝试从项目设置中删除桥接 header,而是创建一个 module.modulemap 文件:

module MySdk {
   header "MySdk-Bridging-Header.h"
   export *
}

这有一些注意事项,例如需要在您的 swift 代码中 import MySdk 并了解将公开 C 函数,但这让我克服了困难。

我通过反复试验发现的一个技巧是将此模块映射文件和 C headers 包含在框架的 Headers 文件夹中。这允许任何使用该框架的应用程序自动将 MySdk 检测为模块。