美文网首页人生几何?
实战:Swift Package Manager制作依赖包

实战:Swift Package Manager制作依赖包

作者: 喔牛慢慢爬 | 来源:发表于2021-09-10 00:07 被阅读0次

    1、通过命令行创建包

    我们创建一个可执行文件类型的包

    $ mkdir SPMTestDemo  //创建文件夹
    $ cd SPMTestDemo //进入文件夹
    $ swift package init --type executable  //创建可执行的二进制包
    Creating executable package: SPMTestDemo  //以下为创建的工程文件
    Creating Package.swift
    Creating README.md
    Creating .gitignore
    Creating Sources/
    Creating Sources/SPMTestDemo/main.swift
    Creating Tests/
    Creating Tests/SPMTestDemoTests/
    Creating Tests/SPMTestDemoTests/SPMTestDemoTests.swift
    $ swift build //编译并生成可执行的二进制文件
    [3/3] Build complete!
    $ swift run  //通过命令行运行可执行文件
    [0/0] Build complete!
    Hello, world!   //运行结果
    

    再通过 swift package init 或swift package init --type library创建一个静态库包,后面我们将静态库作为依赖库引入到SPMTestDemo工程中。

    • 二进制包文件结构
    二进制包
    • 静态包文件结构


      静态包

    两者唯一的区别就是前者会生成二进制可执行文件,可以直接用命令行执行。如果创建的是Library,用命令行执行会提示没有可执行文件,这个时候只需要在Sources目录下创建一个main.swift文件就可以执行了。

    2、添加依赖包

    这里对SPMTestDemo工程配置三方SwiftyJSON依赖包添加,双击Package.swift文件即打开Xcode,就可以对Package.swift配置文件进行修改。

    import PackageDescription
    let package = Package(
        name: "SPMTestDemo",
        dependencies: [
            // Dependencies declare other packages that this package depends on.
            .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.2"),   
        ],
        targets: [
            .target(
                name: "SPMTestDemo",
                dependencies: ["SwiftyJSON"]),
            .testTarget(
                name: "SPMTestDemoTests",
                dependencies: ["SPMTestDemo"]),
        ]
    )
    

    **注: **dependencies可以指定分支、具体的commit编号、版本范围等。

    稍等片刻,等待SwiftyJSON库加载完成。

    然后我们在main.swift文件中填写import SwiftyJSON ,查看下依赖包是否引入成功.

    import SwiftyJSON
    let json = JSON(["name":"www", "age": 25, "sex":"男"])
    print(json)
    print("Hello, world!")
    

    然后运行 swift run

    $ swift run
    [3/3] Build complete!
    {
      "name" : "www",
      "age" : 25,
      "sex" : "男"
    }
    Hello, world!
    

    输入结果证明SwiftyJSON依赖包被引入成功

    3、定义一个库作为其他项目的依赖包

    通过命令行创建自定义依赖库

    $ mkdir SPMLDemo
    $ cd SPMLDemo/
    $ swift package init
    Creating library package: SPMLDemo
    Creating Package.swift
    Creating README.md
    Creating .gitignore
    Creating Sources/
    Creating Sources/SPMLDemo/SPMLDemo.swift
    Creating Tests/
    Creating Tests/SPMLDemoTests/
    Creating Tests/SPMLDemoTests/SPMLDemoTests.swift
    

    修改自定义依赖库代码,使之可以具备外部访问能力

    public struct SPMLDemo {
        var text = "Hello, SPMLDemo!"
        public var num:Int
        public init() {
            num = 20
        }
    }
    

    进行build(命令swift build),看一看是否可以顺利编译成功。

    注:因为SPM依赖包必须使用git url和版本号,所以我们需要为我们的库创建一个git仓库并提交代码和打tag。

    $ git init
    $ git add .
    $ git commit -m "Initial Commit"
    $ git tag 1.0.1
    

    继续,在SPMTestDemo工程的Package.swift文件中加入对SPMLDemo的依赖配置。

    import PackageDescription
    let package = Package(
        name: "SPMTestDemo",
        dependencies: [
            // Dependencies declare other packages that this package depends on.
            .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.2"),
            //因为没有推送到远程仓库,所以这里用相对路径,from就是我们刚才打的tag
            .package(url: "../SPMLDemo", from: "1.0.1") ,
        ],
        targets: [
            .target(
                name: "SPMTestDemo",
                dependencies: ["SPMTestDemo","SPMLDemo"]),//添加依赖包名
            .testTarget(
                name: "SPMTestDemoTests",
                dependencies: ["SPMTestDemo"]),
        ]
    )
    

    然后运行命令swift build进行编译,等待片刻发现工程文件变为下图

    在Swift package Dependencies下gitHub下载的三方库和自定义的本地库都加载进去了。

    4、验证自定义包是否导入成功

    修改SPMTestDemo的main.swift文件

    import SwiftyJSON
    import SPMLDemo
    //SwiftyJSON:来自gitHub
    let json = JSON(["name":"www", "age": 25, "sex":"男"])
    print(json)
    print("Hello, world!")
    
    //自定义依赖库
    let customlib = SPMLDemo()
    print(customlib)
    

    然后运行 swift run

    {
      "name" : "www",
      "age" : 25,
      "sex" : "男"
    }
    Hello, SPMDemo!
    SPMLDemo(text: "Hello, SPMLDemo!", num: 20)
    

    自定义依赖包导入成功

    相关文章

      网友评论

        本文标题:实战:Swift Package Manager制作依赖包

        本文链接:https://www.haomeiwen.com/subject/bwqgwltx.html