在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)")}}
}
其他本地库想使用tools
dependencies: [.package(path: "../Tools"),// 使用三方库.package(url: "https://github.com/sparkle-project/Sparkle", from: "2.0.0"),],