SwiftPM简介与使用

SwiftPM是Swift的包管理工具,负责管理源代码分发,简化共享代码和依赖关系管理。本文介绍了SwiftPM的基本概念,如包、模块、产品和依赖,并详细讲解了创建、发布包以及依赖解析的过程。此外,还探讨了SwiftPM对C、C++、OC的支持,依赖解析策略,以及资源和本地化处理。最后,讨论了如何创建和使用XCFrameworks,以及二进制框架作为Swift包分发的权衡。
摘要由CSDN通过智能技术生成

前言

最近在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"])
SwiftUI 和 SQLite 结合可以让你在 iOS、macOS 或 watchOS 应用程序中轻松地存储数据,而不必依赖于服务器或网络连接。SQLite 是一种轻量级的关系型数据库管理系统,非常适合本地数据存储。 在 SwiftUI 中使用 SQLite,你可以通过以下步骤操作: 1. **添加依赖**: - 对于 iOS 13 及以上,你可以在 Xcode 的 Package.swift 文件中添加 `Swift包管理器` 对 `SQLite.swift` 的引用。 ```swift dependencies { .package(url: "https://github.com/stephencelis/SwiftPM-SQLite.swift.git", from: "0.7") } ``` 2. **设置数据库**: - 创建或初始化 SQLite 数据库,并处理连接错误。 ```swift import SQLite private let dbQueue = DatabaseQueue(in: .main) func setupDatabase() { do { try dbQueue.inTransaction { db in try db.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)") } } catch { print("Error setting up database: \(error)") } } ``` 3. **CRUD 操作**: - 插入数据: ```swift func insertUser(name: String) { try dbQueue.inTransaction { db in try db.execute("INSERT INTO users (name) VALUES (?)", [name]) } } ``` - 查询数据: ```swift func getUsers() -> [User] { return try dbQueue.map { row in User(id: row[0], name: row[1]) }.filter { $0.id != nil } } ``` 4. **视图绑定**: - 在 SwiftUI 中,你可以使用 Combine 或 Delegate 缓存数据,以便在界面更新时保持数据一致性。 ```swift struct ContentView: View { @StateObject var viewModel = UsersViewModel() // ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值