前言
最近在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: [
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.0.0")),
],
targets: [
.target(name: "xxxxxx", path: "Source"),
.testTarget(name: "xxxxxxTests", dependencies: ["xxxxxx"])