SwiftPM简介与使用

目录

  • 前言
  • 一、什么是SwiftPM?
  • 二、概览
    • 2.1 Packages(包)
    • 2.2 Modules(模块)---targets
    • 2.3 Products(产物)
    • 2.4 Dependencies(依赖)
      • 2.5 通过Manifest文件了解target、product、dependencies
  • 三、基础使用
    • 3.1 创建包
      • 3.1.1 创建库包
        • 3.1.1.1 库包使用实例
      • 3.1.2 创建可执行程序包
    • 3.2 发布包
  • 四、SwiftPM的设计
    • 4.1 对C、C++、OC的支持
    • 4.2 依赖解析(Dependency Resolution)
    • 4.3 llbuild
    • 4.4 工作流程功能
      • 4.4.1 编辑模式
      • 4.4.2 分支依赖
      • 4.4.3 本地包依赖
    • 4.5 工具演变
  • 五、资源和本地化
    • 5.1 添加资源到包
    • 5.2 访问包中资源
    • 5.3 本地化包中资源
  • 六、二进制框架
    • 6.1 XCFrameworks
      • 6.1.1 如何使用XCFramework
      • 6.1.2 如何创建XCFramework
      • 6.1.3 框架作者注意事项
    • 6.2 将二进制框架作为Swift包分发
      • 6.2.1 通过Xcode的Swift Packages Manager使用
      • 6.2.2 将XCFramework捆绑进Swift Package发布
      • 6.2.3 使用二进制依赖关系的权衡。
  • 总结

前言

最近在Xcode中使用RxSwift想要通过打印输出RxSwift.Resources.total来检测一些资源泄漏,为了启用调试模式,必须在RxSwift目标构建设置中将TRACE_RESOURCES标志添加到“Other Swift Flags”下,从RxSwift项目的Issues #2223中找到通过SwiftPM设置cSetting的方法,为了对SwiftPM的了解,把学习内容记录一下。

一、什么是SwiftPM?

Swift Package Manager是用于管理源代码分发的工具,旨在简化共享代码和重用他人代码的过程。该工具直接解决了编译和链接Swift包,管理依赖关系,版本控制以及支持灵活的分发和协作模型的挑战。

我们设计该系统的目的是使在GitHub之类的服务上共享包变得非常容易,但是包也非常适合私人个人开发,团队内部共享代码或任何其他粒度。

二、概览

2.1 Packages(包)

Swift包是一个包含package.swift清单(Manifest)文件的目录。清单文件使用PackageDescription模块定义包的名称及其内容。一个包有一个或多个目标,每个目标都指定一个产品,并可以声明一个或多个依赖项。

简而言之,包是一个带有语义版本标记的git存储库,它在根目录中包含Swift源代码和Package.swift清单文件。

2.2 Modules(模块)—targets

Swift将代码组织到模块中。每个模块都指定一个名称空间,并强制执行访问控制,以便可以在该模块外部使用该代码的哪些部分。可以将所有代码都放在一个模块中,也可以将其他模块作为依赖项导入。将解决特定问题的代码提取到一个单独的模块中,可以在其他情况下重用该代码。

根据经验:更多的模块可能比更少的模块更好。SwiftPM旨在使创建具有多个模块的包和应用程序变得尽可能容易。

2.3 Products(产物)

目标可以构建库或可执行文件作为其产品。一个库包含一个可以被其他Swift代码导入的模块。可执行文件是可以由操作系统运行的程序。

2.4 Dependencies(依赖)

SwiftPM的作用是使下载和构建项目的所有依赖项的过程自动化,并使与代码重用相关的协调成本最小化。

  • 基于语义版本的包依赖关系在称为依赖项的部分中,它们有两个组件 - 源 URL 和版本要求。
.package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "14.0.0"))
  • 也有基于分支(branch)的依赖项,如果您想要开发多个包,并且想要保持它们同步,这非常有用。
.package(url: "https://github.com/Moya/Moya.git", .branch("master"))
  • 还有基于修订(revision)的要求,这对于将我们的依赖性与特定的修订固定。
.package(url: "https://github.com/Moya/Moya.git", .revision("85cfe6"))

请注意,发布的软件包中既不允许基于分支的需求,也不能基于修订的需求。发布软件包之前,必须删除所有基于分支和修订的要求。

2.5 通过Manifest文件了解target、product、dependencies

// swift-tools-version:5.0
import PackageDescription
let package = Package(
    name: "xxxxxx",
    platforms: [
        .iOS(.v10),
        .macOS(.v10_12),
        .tvOS(.v10)
    ],
    products: [
        .library(name: "xxxxxx", targets: ["xxxxxx"]),
    ],
    dependencies: [
   

你可能感兴趣的:(Swift)