美文网首页
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