Swift Package Manager (SPM) 创建并集成本地库
在macOS 项目中,使用 Swift Package Manager (SPM) 创建并集成本地库的完整步骤。
-
创建一个macos应用程序,选择 swift、oc、swiftui都可以。
-
创建好应用之后,开始创建SPM本地库。
打开终端app,进入项目根目录,逐次输入一下命令:
// 创建本地库目录(名称自定)
mkdir tools
cd tools
# 初始化 Swift 包(类型选择 Library)
swift package init --type library
创建成功之后终端会输出以下内容以及右侧自动生成的内容:
-
进入刚才自动生成的Sources文件夹中,将abs文件夹删掉(也可以不删掉,我这边删掉是因为tools中需要管理更多的本地库)
-
在Sources文件夹中,新建文件夹以及swift文件
注:自己编写swift文件中的内容
5. 到这一步已经完成50%,重点是编写Package文件内容
// swift-tools-version: 6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
/**
* name:Swift包的名称;
* defaultLocalization:资源的默认本地化;
* platforms:支持的最低系统平台的列表;
* pkgConfig:用于C模块的名称。如果存在,Xcode将搜索.pc文件以获取系统目标所需的其他标志;
* providers:系统目标的程序包提供者;
* products:此软件包可让客户使用的产品列表;
* dependencies:软件包依赖项列表(可空,或需要其它外部依赖);
* targets:属于此软件包的目标列表(源码目录、测试目录);
* swiftLanguageVersions:此软件包兼容的Swift版本列表;
* cLanguageStandard:用于此程序包中所有C目标的C语言标准;
* cxxLanguageStandard:用于此程序包中所有C ++目标的C ++语言标准;
通常我们需要的是:name、platforms、products、dependencies、targets
*/
let package = Package(
name: "tools",
platforms: [.macOS(.v14)],
products: [
.library(name: "MyLogger",targets: ["MyLogger"]),
.library(name: "MyLocalLibrary",targets: ["MyLocalLibrary"]),
],
targets: [
.target(name: "MyLogger"),
.target(name: "MyLocalLibrary"),
.testTarget(name: "toolsTests",dependencies: ["MyLogger", "MyLocalLibrary"]),
]
)
此时,可以直接在创建的本地库中运行单元测试,测试是否有报错,有报错需要解决。
-
创建好本地SPM和运行也正常测试,这时候主工程就需要使用本地SPM库
直接将创建好的SPM库往工程里面拖,注意选好选项。
7、想要使用刚才创建好的本地SPM本地库,还需要将他们加入到工程中
到此,创建好的本地SPM库就可以正常使用了。
public struct MyLogger {
var DEBUG: Bool = false
// 这里是 struct,所以按照 swift 的 struct 语法,可以不写 init,
// 但是,因为是封装成 SPM 库,需要对外暴露,
// 所以 init 构造器不能默认不写,一定需要有 public 构造器,否则外部无法初始化
public init() {
}
public init(_ DEBUG: Bool) {
self.DEBUG = DEBUG
}
public func log(_ msg: String) {
if DEBUG {
print("Logger\t\(msg)")
}
}
}