美文网首页
Swift Package Manager 创建依赖库

Swift Package Manager 创建依赖库

作者: 喔牛慢慢爬 | 来源:发表于2021-09-06 23:04 被阅读0次

    SPM介绍

    SPM又称SwiftPM(Swift Package Manager),是苹果官方推出的依赖包管理工具,它被集成到Xcode开发工具中,可以自动执行依赖库的下载、编译、链接,在swift3.0时被引入,SPM完全由swift编写,与Swift有着非常好的契合性,可以将 SPM看做是工程引入的一个特殊的库。

    SPM中的一些概念

    Modules:模块

    Swift将代码组织成模块,将package以模块的形式进行管理。每个模块都指定了一个命名空间,并且可以通过访问控制符,控制模块内的代码是否可以被模块外访问。

    每个工程可以将它需要用到的代码放入一个模块中,也可以将其他模块作为依赖库导入进来。

    Packages:包

    包是由swift源文件和配置文件组成的,这个配置文件被命名为Package.swift,配置文件中定义了 Package 的名称和内容。一个package可以包含创建多个target,每个target对应一个product,并且可以声明一个或以上的 dependency依赖项。

    Products:产品

    target可以构建可执行文件做为它的产物,库中包含可以被其他swift代码导入引用的模块,可执行文件可以由操作系统直接运行。

    Dependencies:依赖关系

    工程需要外部三方待代码实现某些功能、复用一些功能代码,就需要指定自己的工程依赖哪些外部的代码,这些外部提供的代码称为依赖。所以target中引入的依赖库是工程代码中需要模块,Target有自己需要的依赖库,依赖库也可以有自己的依赖项,每个依赖项也可以有自己的依赖项,因此形成依赖关系图。

    如何创建依赖库

    这里先介绍下如何使用SPM创建依赖Package

    1、创建项目

    命令行方式创建

    使用swift package init 命令创建一个Swift项目,默认创建的是library

    $ mkdir TestPackage //创建文件夹,文件夹名为依赖包的名字
    $ cd TestPackage //进入文件内
    $ swift package init //默认创建的类型是library
    或
    $ swift package init --type library/executable/empty/system module
    

    type支持的四种类型

    1. library:创建库;
    2. executable:创建可执行文件;
    3. empty:创建空项目;
    4. system module:创建系统模块项目;

    创建完项目后进入项目文件夹,点击Package.swift文件即可启动xcode进行开发,我们也可以使用swift package generate-xcodeproj来生成xcode项目,如果需要更新项目中的依赖包版本信息可执行swift package update 进行更新。

    相关的命令行

    1. swift package init --type library 初始化创建一个库或可执行文件项目
    2. swift package generate-xcodeproj 构建xcode项目
    3. swift package clean 删除构建工件
    4. swift build 进行编译
    5. swift run 编译并且运行可执行文件
    6. swift package update 更新依赖包
    xcode中创建

    这个简单,看下图


    2、配置文件

    依赖库的相关配置在 Pacakage.swift 中,Package.swift 是整个包描述,它依赖 PackageDescription 结构。

    // swift-tools-version:5.0
    
    import PackageDescription
    
    let package = Package(
        name: "TestLibrary",
        //平台版本限制
        platforms: [.iOS(.v10)],
        products: [
            // Products define the executables and libraries produced by a package, and make them visible to other packages.
            // A package can produce multiple executables and libraries.
            .library(
                name: "TestLibrary",
                targets: ["TestLibrary"]),
        ],
        dependencies: [
            // Dependencies declare other packages that this package depends on.
            // .package(url: /* package url */, from: "1.0.0"),
             //添加外部依赖库
        ],
        targets: [
            // Targets are the basic building blocks of a package. A target can define a module or a test suite, and of course an executable.
            // Targets can depend on other targets in this package, and on products in packages which this package depends on.
            .target(
                name: "TestLibaray",
                dependencies: []), //此处需要填写依赖的外部库名字
            .testTarget(
                name: "TestLibarayTests",
                dependencies: ["TestLibaray"]),
        ]
    )
    

    详细解释下各个字段的含义

    • name:指定项目(包)名称
    • products:指定编译后项目生成的东西,可以是 library 或者 executable,同一个项目可以生成多个 library 或 executable
    • dependencies:指定项目所使用的依赖库及其 URL、版本等信息。可以为空
    • targets:属于此软件包的目标列表(源码目录、测试目录)
    • platforms:支持的最低系统平台的列表;
    • providers:系统目标的程序包提供者;
    • swiftLanguageVersions:此软件包兼容的Swift版本列表;

    注:常用的一些字段:name、platforms、products、dependencies、targets

    3、发布

    将编译好的library发布到gitHub、gitLee中托管仓库中

    结束

    还有很多细节及遇到的坑未总结!!!
    下面是如何在自己的项目中集成SPM,并添加依赖库,

    相关文章

      网友评论

          本文标题:Swift Package Manager 创建依赖库

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