Xcode12.4 - 带有 xcframework 子项目的 iOS Umbrella xcframework 框架

问题描述

我想使用 Xcode 12.4 for iOS 将一些 XCFrameworks 放入一个伞形框架或伞形 xcframework 中。我尝试了这些线程中提到的所有方法。但是,我无法让它为我的客户端应用程序中的任何 swift 类工作。

请注意,这可以与 ObjC 类无缝配合。

Umbrella framework

XCFramework with static frameworks sub dependencies

方法 1 - 创建 .framework

当我通过添加 sub xcframeworks 来复制框架构建阶段来构建 .framework 时,我看到 xcframework 子项目被提取到静态库“.a”文件中。 我在我的 ObjC + Swift 应用程序中导入了这个 .framework,对于导入伞形框架的所有 swift 类中的所有子项目,我收到“没有这样的模块”错误

方法 2 - 创建 .xcframework

当我使用所有 xcframework 子项目创建 .xcframework 时,当我在客户端应用程序中使用伞形框架时,在 x86_64-apple-ios-simulator.swiftinterface 中出现 No such module 'XXXX' 错误

注意,我在客户端应用程序中链接和嵌入了雨伞/xcframework。

一个想法

此外,当我使用 Xcode 12.4 创建示例应用程序并导入相同的框架框架/.xcframework 时,一切正常。这是否与在旧版本的 XCode 中创建的客户端应用程序 .xcodeproj 有关?

解决方法

一些值得尝试的事情:

  1. 确保设置了 BUILD_LIBRARY_FOR_DISTRIBUTION

  2. 静态链接子框架。如果您使用 CocoaPods 包含其他框架,请确保指定 use_frameworks! :linkage => :static

  3. 在使用子框架的源文件中,写入 @_implementationOnly import SomeFramework .