构建 Swift 个动态框架与第三方静态框架作为一个单独的框架

Build Swift dynamic framework with third party static framework as a single framework

正在尝试为我的客户准备一个单一的动态框架。我的框架(A.framework)使用了第三方识别静态框架(B.framework)。我无法向客户提供单独的 A 和 B 框架。 理想情况下,应该构建 B.framework 并将其包含到我的 A.framework 二进制文件中,这样客户的应用程序只会嵌入 A.framework,而无需对 link 与该第三方应用程序进行任何其他操作.

我做了什么:

  1. 已将 B.framework 添加到项目中。
  2. 在相应的目标中将B.framework添加到"Linked Frameworks and Libraries"。
  3. 建成A.framework。
  4. 创建了一个演示应用程序并将 A.framework 包含到项目中。
  5. 已将 A.framework 添加到 "Embedded Binaries"。
  6. 演示应用程序的构建失败并显示消息 "Missing required module 'B'"(尽管它仅在 A.framework 中使用)。

注:

如有任何想法,我们将不胜感激!

UPD 1:这与伞式框架无关,因为正确的伞式框架实现需要从包中加载子框架,这并不好。由于不同的 Mach-O 值 - 动态和静态,虚假框架实现(子框架简单地复制到 umbrella)将无法用于发布。再加上假伞框架体积庞大,因为子框架被完全复制到伞内。

UPD 2:创建了一个小型测试项目:StaticFrameworkTest,其中有 3 个子项目:

  1. 具有动态框架依赖性(框架 A)的演示应用程序,不应该对框架 B 有任何了解
  2. 具有静态框架依赖性的动态框架(框架 B),理想情况下应包含在框架 A 的二进制文件中。
  3. 静态框架B

根据定义,静态框架是一个包含任何其他所需资源的胖静态库。因此,您可以将第三方静态库嵌入到您自己的 中,还可以包括图像、故事板、plist 等。

您不能在静态库(即 *.a)中执行此操作,但在静态框架中可以执行此操作。 有关如何执行此操作的详细信息,请参见示例 https://www.raywenderlich.com/65964/create-a-framework-for-ios(在文章末尾,它从静态 *.a 和一些资源中创建了静态 *.framework)

动态框架永远不能嵌入第三方静态库。导入动态框架的主应用程序总是必须显式地link反对静态库,这似乎不是你想要的。