一、SPM庫組成
1.1 Package.swift
組件分析
Package.swift 是整個包描述蹋辅,它依賴 PackageDescription 結(jié)構(gòu)柒瓣,該結(jié)構(gòu)定義了一個 SPM 導(dǎo)出包需要指定哪些配置信息:
// struct Package
init(
name: String,
defaultLocalization: LanguageTag? = nil,
platforms: [SupportedPlatform]? = nil,
pkgConfig: String? = nil,
providers: [SystemPackageProvider]? = nil,
products: [Product] = [],
dependencies: [Package.Dependency] = [],
targets: [Target] = [],
swiftLanguageVersions: [SwiftVersion]? = nil,
cLanguageStandard: CLanguageStandard? = nil,
cxxLanguageStandard: CXXLanguageStandard? = nil
)
- name:Swift包的名稱;
- defaultLocalization:資源的默認(rèn)本地化;
- platforms:支持的最低系統(tǒng)平臺的列表羡藐;
- pkgConfig:用于C模塊的名稱。如果存在悯许,Xcode將搜索.pc文件以獲取系統(tǒng)目標(biāo)所需的其他標(biāo)志仆嗦;
- providers:系統(tǒng)目標(biāo)的程序包提供者;
- products:此軟件包可讓客戶使用的產(chǎn)品列表岸晦;
- dependencies:軟件包依賴項列表(可空欧啤,或需要其它外部依賴);
- targets:屬于此軟件包的目標(biāo)列表(源碼目錄启上、測試目錄)邢隧;
- swiftLanguageVersions:此軟件包兼容的Swift版本列表;
- cLanguageStandard:用于此程序包中所有C目標(biāo)的C語言標(biāo)準(zhǔn)冈在;
- cxxLanguageStandard:用于此程序包中所有C ++目標(biāo)的C ++語言標(biāo)準(zhǔn)倒慧;
一般來說,上面的這些配置包券,通常纫谅,我們需要的是:name、platforms溅固、products付秕、dependencies、targets侍郭。
二询吴、創(chuàng)建自己的SPM庫
2.1可以使用Xcode創(chuàng)建或用命令行創(chuàng)建,這里只使用Xcode創(chuàng)建示例:
Xcode -> File -> New -> Package...
輸入項目名亮元,點擊create
Xcode 自動幫我們生成了配置文件和源碼目錄:
2.2 編寫風(fēng)們的SPM庫
-
Logger.swift
代碼如下:
public struct Logger {
var DEBUG: Bool = false
/*
這里是 struct猛计,所以按照 swift 的 struct 語法,可以不寫 init爆捞,
但是奉瘤,因為是封裝成 SPM 庫,需要對外暴露煮甥,
所以 init 構(gòu)造器不能默認(rèn)不寫盗温,一定需要有 public 構(gòu)造器,否則外部無法初始化
*/
public init() {
}
public init(_ debug: Bool) {
self.DEBUG = debug
}
public func log(_ msg: String) {
if DEBUG {
debugPrint("Logger: \(msg)")
}
}
}
- 修改測試用例
LoggerTests.swift
成肘,不然會報錯:
import XCTest
@testable import Logger
final class LoggerTests: XCTestCase {
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct
// results.
Logger(true).log("hhm")
}
static var allTests = [
("testExample", testExample),
]
}
然后command+B
編譯就能成功了
2.3 本地集成SPM庫
1.關(guān)閉SPM Xcode工程
2.打開需要集成SPM的項目工程
-
添加本地SPM庫
- 點擊
+
號
- 點擊
Add Local...
肌访,選擇我們自己的本地SPM項目,添加到項目中
3.添加framework鏈接艇劫,如圖:
- 點擊
+
號吼驶,選擇如下:
- 點擊
Add
即可
- 代碼測試
import Logger
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Logger(true).log("test log")
}
}
輸出結(jié)果:
2.4 上傳至Github
- 我是使用
Github desktop
工具上傳的惩激,自行百度,這里不復(fù)述了蟹演。 - 重新集成
- 移除之前添加本地的SPM文件(2.3第2步)
- 移除手動添加的framework(2.3第3步)
-
集成SPM包风钻,完成