Swift Package Manger的制作和使用

一、SPM库组成
1.1 Package.swift 组件分析
Package.swift 是整个包描述,它依赖 PackageDescription 结构,该结构定义了一个 SPM 导出包需要指定哪些配置信息:

// 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:资源的默认本地化;
  • platforms:支持的最低系统平台的列表;
  • pkgConfig:用于C模块的名称。如果存在,Xcode将搜索.pc文件以获取系统目标所需的其他标志;
  • providers:系统目标的程序包提供者;
  • products:此软件包可让客户使用的产品列表;
  • dependencies:软件包依赖项列表(可空,或需要其它外部依赖);
  • targets:属于此软件包的目标列表(源码目录、测试目录);
  • swiftLanguageVersions:此软件包兼容的Swift版本列表;
  • cLanguageStandard:用于此程序包中所有C目标的C语言标准;
  • cxxLanguageStandard:用于此程序包中所有C ++目标的C ++语言标准;

一般来说,上面的这些配置,通常,我们需要的是:name、platforms、products、dependencies、targets。

二、创建自己的SPM库

2.1可以使用Xcode创建或用命令行创建,这里只使用Xcode创建示例:

Xcode -> File -> New -> Package...
image.png
输入项目名,点击create
image.png
Xcode 自动帮我们生成了配置文件和源码目录:
image.png

2.2 编写风们的SPM库

  • Logger.swift 代码如下:
public struct Logger {
    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 {
            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.关闭SPM Xcode工程
2.打开需要集成SPM的项目工程

  • 添加本地SPM库


    image.png
  • 点击+
    image.png
  • 点击Add Local...,选择我们自己的本地SPM项目,添加到项目中
    image.png

    3.添加framework链接,如图:
    image.png
  • 点击+号,选择如下:
    image.png
  • 点击Add即可
    image.png
  • 代码测试
import Logger

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        Logger(true).log("test log")
    }
}

输出结果:


image.png

2.4 上传至Github

  1. 我是使用Github desktop工具上传的,自行百度,这里不复述了。
  2. 重新集成
  • 移除之前添加本地的SPM文件(2.3第2步)
  • 移除手动添加的framework(2.3第3步)
  • 集成SPM包,完成


    image.png

SPMDemo

参考文章:
iOS包依赖管理工具(五):Swift Package Manager(SPM)自定义篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容