SwiftPM(Swift Package Manager)

什么是SwiftPM

SwiftPM(Swift Package Manager)是 2018 年苹果官方推出供 Swift 开发者进行包管理的工具,相当于我们一直使用的Cocoapods,及近年来开始火的Carthage。

为什么要推出SwiftPM

CocoaPods

使用最广泛的工具,依赖放在各个源(master 或者 自己的源)上的 podspec 文件进行下载代码库,在本地生成一个 workspace 进行统一管理、添加依赖。

  • 自动化/侵入性高:一键配置和集成依赖/自动更改 Xcode.project 的配置
  • 中心化:提供各个源管理仓库配置文件,所有更新仓库文件索引可能会很慢。
  • 缓存:除了项目根目录的缓存之外,还有较完整的本地缓存体系,所以不同工程下载同一个库时会直接从本地拿。

Carthage

  • 去中心化:没有统一管理的中心,所以没有更新中心服务器的文件索引这种耗时步骤
  • 成本略高/侵入性低:Carthage 只会帮你把各个库下载到本地(默认会编译成静态库),具体的 Project 配置需要自己弄
  • 生态环境:很差,很多库都没有提供这种依赖方式
  • 缓存:只有项目根目录的缓存,所以不同项目对于同一个库需要重新下载

SwiftPM来了

官方推出,值得信赖。Swift编写,Xcode自动集成,不需要第三方脚本来管理,无需配置环境,实现CocoaPods的所有功能,对项目本身无影响,无侵入,经测试编译速度和CocoaPods相当。

在Xcode中的使用

点击项目-PROJECT-+,如图:

打开如下页面,在输入框中输入要安装的三方库git地址,如Snapkit的 https://github.com/SnapKit/SnapKit  点击next。

导入规则 Rules 有三个选项: VersionBranchCommit

其中的 Version 可指定库的版本更新规则:

  1. Up to Next Major: 直到下一个大版本(5.2.2 ~ 6.00)
  2. Up to Next minor: 直到下一个中版本(5.2.2 ~ 5.3.0)
  3. Range: 限定版本范围(自定义范围)
  4. Exact: 指定固定版本(5.2.2)

没有特殊需求就使用默认选项,点击 Next 按钮,等待 Xcode 从网上拉取完毕,如搜索结果有多格如下图,请勾选要搜索的库,然后点击finish,如未勾选,目录里有但是无法import

点击finish即可在目录栏中看到新出现的三方库库目录Swift Package Dependencies

 有在Source目录下显示三方库的源码,并且多了Example目录,展示使用三方库使用方法的demo

Pacakage.swift三方库相关配置文件,配置文件中采用声明式语法创建了一个 Package 对象,Package 类来自 PackageDescription包 ,其主要作用是对包的描述。图中 Almofire 的配置参数如下:

name: 包名
platforms: 支持的平台
products: 编译后的library
targets: 包中包含的targets,其中.testTarget是供测试的target
swiftLanguageVersions: 库所使用的的 Swift 版本

除此之外,dependencies 参数为库指定依赖的库,SwiftPM 会自动加载所有依赖的库。例如在引入 Realm 时,其依赖于 RealmCore, Package.swift 中可以看到该字段:

let package = Package(
    //......
    dependencies: [
        .package(url: "https://github.com/realm/realm-core",.exact(Version(coreVersionStr)!)),
    ],
    //......

在 SwiftPM 加载时会自动加载指定 url 处的 realm-core。加载完毕后可在 Swift Package Dependencies 中看到 RealmCore。

更多配置相关的参数可以进入到 PackageDescription 库查看(即 Package.swift 文件头部 import 的 PackageDescription)

导入三方库的配置文件不需要我们更改什么,如果是我们自己创建的库给别人使用,或者直接将 SwiftPM 用来工程模块化,就需要自定义 Package.swift 中的参数。

调用三方库

CocoaPods

import SnapKit

更新仓库版本号

右击当前库-Update Package即可


用Swift PM制作自己的组件

新建Swift PM库,命名为SwiftPMTest,创建完毕后Xcode自动为我们生成好了库的结构

​​​​​​​​​​​​​​

将代码和资源文件加入到该模块的 Source文件夹 中。

组件配置文件:package.swift,内容​​​​​​​​​​​​​​包括:

name :组件名

platforms:支持的平台

platforms可以配置支持的平台版本,支持最低iOS10,.iOS(.v10)

Dependencies

若有依赖于其他库可在 .dependencies字段后添加所依赖库的git地址,url:依赖库的git地址,from:依赖库的版本号

targets

Swift将代码组织到模块中。每个模块都指定一个名称空间,并强制执行访问控制,以便可以在该模块外部使用该代码的哪些部分。可以将所有代码都放在一个模块中,也可以将其他模块作为依赖项导入。将解决特定问题的代码提取到一个单独的模块中,可以在其他情况下重用该代码。

Products

目标可以构建库或可执行文件作为其产品。一个库包含一个可以被其他Swift代码导入的模块。可执行文件是可以由操作系统运行的程序。

swiftLanguageVersions

swift语言版本

let package = Package(
    name: "MySwiftPakage",
    platforms: [
           .iOS(.v10),
           .macOS(.v10_12),
           .tvOS(.v10)
       ],
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library(
            name: "MySwiftPakage",
            targets: ["MySwiftPakage"]),
    ],
    dependencies: [
           .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.0.0")),
       ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "MySwiftPakage",
            dependencies: []),
        .testTarget(
            name: "MySwiftPakageTests",
            dependencies: ["MySwiftPakage"]),
    ],
    swiftLanguageVersions: [
            .v5
        ]
)

其它配置请参考官方文档:https://github.com/apple/swift-package-manager/blob/main/Documentation/Usage.md

配置好建好git仓库,上传git,用做测试的git地址:https://github.com/Leo623/SwiftPMTest

$ git init
$ git add .
$ git remote add origin [https://github.com/Leo623/SwiftPMTest]
$ git commit -m "第一次SwiftPM测试"
$ git push origin master
$ git tag 1.0.0
$ git push --tags

传上去后就可以在项目中使用了,是不是非常简单好用呢

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值