如何构建自定义 Swift 框架,它与 SPM 有什么关系?

How to build a custom Swift framework and how is it related to the SPM?

我目前正在构建我真正想用作框架的代码,因为能够 import MyCustomFramework 就像我使用 Apple 框架一样(将来我也想分发它们)。

我对此有一些疑问:

谢谢。

  • 我在2周前的回答中详细回答了如何使用Xcode创建Framework目标。这个问题与框架没有特别相关,所以我可以理解它为什么没有出现在搜索中。 (我也相信如果我copied/pasted在这里会不受欢迎,但如果我错了我会这样做。)

  • 目前 Swift 框架目标可以跨 Apple 平台兼容,前提是您将 UIKit、Foundation 和核心代码分离到它们自己的框架中。 (可能有更好的方法,但这是我所知道的最好的方法。

  • 关于Swift 核心代码:目前Swift(仍在)快速发展。 Swift 3 开始在生产服务器端使用,一些 Linux 使用,但现在没有二进制兼容性(这是 Swift 4 的一部分)我会坚持使用 Apple 平台。

  • 我听说 Swift 版本兼容性在 Swift 2 和 3 之间存在冲突。我的意思是你可以在同一个项目中使用两者,但是有障碍,如果你这样做。

目前,Swift 包管理器 (SPM) 和 Xcode 框架遵循不同的路径。对于 Linux,您必须遵循 SPM 路径 ,因为编译 Linux swift 应用程序的唯一方法是使用 SPM。对于 macOS 命令行应用程序,您也可以遵循 SPM 路径。对于 iOS 应用程序和 macOS UI 应用程序,您必须遵循 Xcode 框架路径

对于 SPM 路径,您将框架的项目设为 SPM-enabled:添加 Package.swift 文件并根据 SPM 约定设置项目的文件布局.该项目还必须是一个 git 存储库。然后可以将项目的 git 存储库指定为对其他启用 SPM 的 frameworks/applications 的依赖项。每个启用 SPM 的项目都可以随时使用 swift package generate-xcodeproj 命令转换为 Xcode 项目。

Xcode Frameworks 路径是使用 Xcode 框架的标准、SPM 之前的方式,这在其他地方有描述。您创建一个 Xcode 项目来定义您的框架。

因此,如果您希望您的框架既用于支持 SPM 的项目 Linux 和 macOS 命令行应用程序,又用于支持 Xcode 的项目用于 iOS 和macOS UI 应用程序,你必须遵循双重路径。您使您的项目启用 SPM 并添加一个 Xcode 项目来定义您的框架。您必须维护您的项目信息两次 - 在 Package.swift 文件和 Xcode 项目中。