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

一、安装SPM

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

  1. $ swift package --version
  2. Swift Package Manager - Swift 3.0.0-dev

二、使用SPM创建项目

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

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

三、添加外部模块

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

  1. import PackageDescription
  2. let package = Package(
  3. name: "SPMDemo",
  4. dependencies: [
  5. .Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,2,0))
  6. ]
  7. )

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

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

3、编译并运行

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

四、更新依赖包

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

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

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

五、创建模块(库)

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

  1. $ mkdir BarModule
  2. $ cd BarModule
  3. $ swift package init --type library // 初始化为一个库
  4. Creating library package: BarModule
  5. Creating Package.swift
  6. Creating .gitignore
  7. Creating Sources/
  8. Creating Sources/BarModule.swift
  9. Creating Tests/
  10. Creating Tests/LinuxMain.swift
  11. Creating Tests/BarModuleTests/
  12. Creating Tests/BarModuleTests/BarModuleTests.swift
  13. $ swift package generate-xcodeproj // 创建Xcode项目
  14. generated: ./BarModule.xcodeproj

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

  1. public struct BarModule {
  2. public var text = "Hello, Module!"
  3. public var num: Int
  4. public init() {
  5. num = 12
  6. }
  7. }

3、添加git tag

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

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

六、本地引入模块

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

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

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

  1. import Alamofire
  2. import BarModule
  3. print(Alamofire.request("https://httpbin.org/get"))
  4. let bar = BarModule()
  5. print(bar.num)
  6. print(bar.text)

4、编译运行

  1. $ swift build
  2. $ ./.build/debug/SPMDemo
  3. GET https://httpbin.org/get
  4. 12
  5. 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. redis缓存工具类,提供序列化接口

    1.序列化工具类 package com.qicheshetuan.backend.util; import java.io.ByteArrayInputStream; import java.io. ...

  2. CSS学习笔记01 CSS简介

    1.CSS定义 CSS 指层叠样式表 (Cascading Style Sheets),是一种样式表语言,用来描述 HTML 或 XML(包括如 SVG.XHTML 之类的 XML 分支语言)文档的呈 ...

  3. Spring IOC 容器源码分析

    声明!非原创,本文出处 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不好好了解 S ...

  4. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  5. js-ES6学习笔记-变量的解构赋值

    1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 2.ES6允许写成:let [a,b,c] = [1,2,3];上面代码表示,可以从数 ...

  6. 前端开发笔记(4)css基础(下)

    标签定位 相对定位 相对定位是用来微调元素位置的,让元素相对于原来的位置进行调整. <head> <meta http-equiv="Content-Type" ...

  7. Maven学习(一)概念简述和安装教程

    刚开始由.net转向java,公司的项目中就开始使用maven,感觉他就像nuget一样,但是他又比nuget要强大(毕竟他是项目管理工具). maven概述 在这里,就不背书包了,怎么简单直接怎么来 ...

  8. Linux 中 awk命令应用

    ls -la | awk '{printf ("%8s %8s %8s %8s %8s %8s %8s %8s %8s\n",$1,$2,$3,$4,$5,$6,$7,$8,sub ...

  9. JS截取字符串方法实例

    // JS截取字符串可使用 substring()或者slice() // // 函数:substring() // 定义:substring(start,end)表示从start到end之间的字符串 ...

  10. Spring Boot系列学习文章(一) -- Intellij IDEA 搭建Spring Boot项目

    前言: 最近做的一个项目是用Spring Boot来做的,所以把工作中遇到的一些知识点.问题点整理一下,做成一系列学习文章,供后续学习Spring Boot的同仁们参考,我也是第一次接触Spring ...