一句话:Swift Package Manager(swift包管理器,简称:SPM)就是在swift开发中用来替代CocoaPod的;在swift开发中,SPM完全可以替代CocoaPod的功能,并且速度更快,体验更佳;

一、安装SPM

SPM随Xcode 8.x 一起发布,终端上可查看SPM版本:

$ swift package --version
Swift Package Manager - Swift 3.0.0-dev

二、使用SPM创建项目

创建一个可执行项目,如SPMDemo:

$ mkdir SPMDemo    // 创建文件夹
$ cd SPMDemo // 进入文件夹
$ swift package init --type executable // 初始化为可执行项目
Creating executable package: SPMDemo
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/
$ swift package generate-xcodeproj //生成Xcode工程,可用Xcode打开
generated: ./SPMDemo.xcodeproj
$ swift build // swift 编译并生成可执行文件
Compile Swift Module 'SPMDemo' (1 sources)
Linking ./.build/debug/SPMDemo
$ ./.build/debug/SPMDemo // 执行生成的文件
Hello, world! // 执行效果

三、添加外部模块

我们试着把Alamofire模块添加到SPMDemo中;
1、编辑Package.swift文件,内容如下:

import PackageDescription

let package = Package(
name: "SPMDemo",
dependencies: [
.Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,2,0))
]
)

2、main.swift中引入并使用Alamofire

import Alamofire
print(Alamofire.request("https://httpbin.org/get"))

3、编译并运行

$ swift build
Compile Swift Module 'SPMDemo' (1 sources)
Linking ./.build/debug/SPMDemo
$ ./.build/debug/SPMDemo
GET https://httpbin.org/get

四、更新依赖包

假设我们需要将Alamofire 4.2.0“更新”到4.1.0;
1、编辑Package.swift,将Version(4,2,0)改为Version(4,1,0);
2、更新依赖:

$ swift package update
Cloning https://github.com/Alamofire/Alamofire.git
HEAD is now at c2134d7 Added release notes to the CHANGELOG and bumped the version to 4.1.0.
Resolved version: 4.1.0

可以用 swift package generate-xcodeproj更新一下Xcode工程文件,然后就可以build的运行了

五、创建模块(库)

假设我们需要创建一个BarModule,步骤如下:
1、初始化模块

$ mkdir BarModule
$ cd BarModule
$ swift package init --type library // 初始化为一个库
Creating library package: BarModule
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/BarModule.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/BarModuleTests/
Creating Tests/BarModuleTests/BarModuleTests.swift
$ swift package generate-xcodeproj // 创建Xcode项目
generated: ./BarModule.xcodeproj

2、编写模块代码
初始化为库时,自动生成了一个文件BarModule.swift,编辑BarModule.swift文件如下:

public struct BarModule {
public var text = "Hello, Module!"
public var num: Int
public init() {
num = 12
}
}

3、添加git tag

$ git init
$ git add .
$ git commit -m "Init Commit"
$ git tag 1.0.0 // 添加tag

这个 tag 1.0.0就是我们引用时的版本号
如果把这个BarModule推送到外部,如github上,就是可以通过引入外部引入的方式引入到项目中;
当然,我们还能本地引入模块;

六、本地引入模块

我们将在SPMDemo项目中引入BarModule;
1、编辑SPMDemo的Package.swift文件

import PackageDescription
let package = Package(
name: "SPMDemo",
dependencies: [
.Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,1,0)),
.Package(url: "../BarModule", Version(1, 0, 0)) // 添加的代码,版本号就是刚才的tag
]
)

2、swift build将BarModule添加到SPMDemo项目中
3、编辑main.swift文件

import Alamofire
import BarModule print(Alamofire.request("https://httpbin.org/get")) let bar = BarModule()
print(bar.num)
print(bar.text)

4、编译运行

$ swift build
$ ./.build/debug/SPMDemo
GET https://httpbin.org/get
12
Hello, Module!

七、待解决的问题

以下是笔者尚未解决的问题:
1、如何在Swift的iOS项目中应用Swift Package Manager进行依赖管理?
2、如何用Swift Package Manager发布管理二进制的SDK?

作者:邓国辉
链接:https://www.jianshu.com/p/4caecb22c4bd
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Swift Package Manager(一)初探的更多相关文章

  1. 使用 Swift Package Manager 集成依赖库

      本文首发于 Ficow Shen's Blog,原文地址: 使用 Swift Package Manager 集成依赖库.   内容概览 前言 添加依赖包 在项目中使用依赖 管理已导入的依赖 在团 ...

  2. 你需要知道的包管理器(Package Manager)

    最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...

  3. 解决VS2015启动时Package manager console崩溃的问题 - Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope

    安装VS2015,启动以后,Package manager console崩溃,错误信息如下: Windows PowerShell updated your execution policy suc ...

  4. Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)

    Visual studio 2015 突然新建不了MVC项目,报出错误: HRESULT: 0x80131500 在折腾了很长时间,最后在Github上看到这样一个贴 地址:https://githu ...

  5. Error: Could not access the Package Manager. Is the system running?

    最近在搭建cordova,android 开发环境,安装android studio之后创建一个demo之后,运行想看一下效果,在运行过程中创建一个虚拟机(arm)的,等了有1分钟左右,再次运行程序, ...

  6. Visual Studio 2010 更新NuGet Package Manager出错解决办法

    在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...

  7. Getting and installing the PEAR package manager

    Windows After you have downloaded and installed PHP, you have to manually execute the batch file loc ...

  8. RPM是RedHat Package Manager(RedHat软件包管理工具)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  9. installation - How to install Synaptic Package Manager? - Ask Ubuntu

    installation - How to install Synaptic Package Manager? - Ask Ubuntu How to install Synaptic Package ...

随机推荐

  1. Html.DropDownListFor练习

    今天练习Html.DropDownListFor(). 在网页开发过程中,这个DropDownList功能定会少不了.让用户能显式选择需求的选项.先来看看下面实时操作,Category这个字段是一个外 ...

  2. order by与索引(转载)

    order by与索引   ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了.另一个是把结果选好之后再排序. 用有序索引这种,当然是 ...

  3. 常用正则表达式:手机、电话、邮箱、身份证、IP地址、网址、日期等

    转载源:http://blog.csdn.net/lun379292733/article/details/8169807 <script type="text/JavaScript& ...

  4. 简明log4j配置教程

    先准备好log4j需要对应的开发包: apache-log4j-extras-1.2.17.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar 然后就是在项 ...

  5. redis主从|哨兵|集群模式

    关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...

  6. BOM(JavaScript高程笔记)

    再次编辑于20160115 一.window对象 双重角色 JS访问浏览器窗口的接口 ECAMAscript规定的Global对象 1.全局作用域 所有在全局作用域中声明的变量.函数都会变成windo ...

  7. 通过api管理grafana

    1. 生成api key 参考: http://docs.grafana.org/http_api/auth/ 2.点击添加后,生成了个获取一个deshboards的api样例 3.放到linux上运 ...

  8. php 去除所有空格 包括中文空格圆角空格

    有的中文的半角,圆角空格或者段落符显示为空白的.可以用正则来处理 preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","" ...

  9. OSGI企业应用开发(九)整合Spring和Mybatis框架(二)

    上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...

  10. php 实现简单购物车功能(2)

    上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除.提交订单后,库存的减少 以及客户账户的余额都没有完善, 这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一 ...