【问题标题】:How to build a custom Swift framework and how is it related to the SPM?如何构建一个自定义的 Swift 框架,它与 SPM 有什么关系?
【发布时间】:2016-12-31 17:23:11
【问题描述】:

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

我对此有一些疑问:

  • 构建我想要的框架的最简单方法是什么?这可以直接在 Xcode 中完成,还是我需要在终端中使用命令行工具?
  • 这个框架是否兼容多个平台(我正在考虑所有 Apple 平台,但也考虑 Swift 支持的其他平台,例如 Linux)。
  • Swift 框架和 Swift 包管理器之间到底有什么联系?我需要 SPM 来构建我的框架还是这两个不同的工具?

谢谢。

【问题讨论】:

  • 关于兼容性,它取决于你将使用哪些库,并非所有可可库都可用于 swift 的 linux 版本。
  • @MatteoCrippa 谢谢:)
  • @StefanNestorov 谢谢!我看到这是一个 Cocoa Touch 框架,是否兼容其他平台?
  • 应该适用于 iOS 和 osX,但不确定是否适用于其他平台(Linux)。

标签: swift swift-package-manager


【解决方案1】:

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

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

Xcode Frameworks 路径是使用 Xcode 处理框架的标准的 pre-SPM 方式,这在别处进行了描述。您创建一个 Xcode 项目来定义您的框架。

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

【讨论】:

    【解决方案2】:
    • 我在两周前的回答here 中给出了关于如何使用Xcode 创建Framework 目标的详细回答。这个问题与框架没有特别的关系,所以我可以理解它是如何在搜索中出现的。 (我也相信如果我在这里复制/粘贴它会不受欢迎,但如果我错了我会这样做。)

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

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

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

    【讨论】:

    • 感谢您的回答!如果我构建一个框架并将其添加到“链接框架和库”并尝试导入它,Xcode 会抱怨不存在这样的模块。 “没有二进制兼容性”到底是什么意思?是否已经有支持 Swift 服务器的服务(例如 Heroku?)?
    • 我在 Swift ABI 上进行了快速搜索,可能有更好的链接,但这里有一个不错的链接,它解释了 Swift 3 中缺乏二进制兼容性 (ABI) 的含义。 infoq.com/news/2016/05/swift-3-no-stable-abi。你是对的 - 有服务器端和 Linux Swift 构建。它们(尤其是 Linux)的稳定性和前向兼容程度正在不断发展。只要记住这一点就是我的建议。关于服务器端的另一件事......就像HTTP服务器一样,那里有一些构建,我相信每个都有自己的优点和缺点。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多