Swift Package Manager(一)初探
一句话: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(一)初探的更多相关文章
- 使用 Swift Package Manager 集成依赖库
本文首发于 Ficow Shen's Blog,原文地址: 使用 Swift Package Manager 集成依赖库. 内容概览 前言 添加依赖包 在项目中使用依赖 管理已导入的依赖 在团 ...
- 你需要知道的包管理器(Package Manager)
最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...
- 解决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 ...
- Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)
Visual studio 2015 突然新建不了MVC项目,报出错误: HRESULT: 0x80131500 在折腾了很长时间,最后在Github上看到这样一个贴 地址:https://githu ...
- Error: Could not access the Package Manager. Is the system running?
最近在搭建cordova,android 开发环境,安装android studio之后创建一个demo之后,运行想看一下效果,在运行过程中创建一个虚拟机(arm)的,等了有1分钟左右,再次运行程序, ...
- Visual Studio 2010 更新NuGet Package Manager出错解决办法
在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...
- Getting and installing the PEAR package manager
Windows After you have downloaded and installed PHP, you have to manually execute the batch file loc ...
- RPM是RedHat Package Manager(RedHat软件包管理工具)
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...
- installation - How to install Synaptic Package Manager? - Ask Ubuntu
installation - How to install Synaptic Package Manager? - Ask Ubuntu How to install Synaptic Package ...
随机推荐
- [Angularjs]ng-bind-html指令
摘要 在为html标签绑定数据的时,如果绑定的内容是纯文本,你可以使用{{}}或者ng-bind.但在为html标签绑定带html标签的内容的时候,angularjs为了安全考虑,不会将其渲染成htm ...
- 基于asp.net mvc的近乎产品开发培训课程(第四讲)
演示产品源码下载地址:http://www.jinhusns.com/Products/Download 演示产品源码下载地址:http://www.jinhusns.com/Products/Do ...
- 通过jquery.cookie.js实现记住用户名、密码登录功能
Cookies 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery.cookie.js基于jquery:先引入jquery,再引入:jq ...
- [android] 手机卫士号码归属地查询
使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id=”前七位手机号” 再查询data ...
- 浅谈Http协议是怎么回事?
老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...
- 【JavaFx教程】第二部分:Model 和 TableView
第二部分的主题 创建一个 模型 类. 在 ObservableList 使用模型类. 使用 Controllers 在 TableView 上显示数据. 创建 模型 类. 我们需要一个模型类来保存联系 ...
- POJ2533(KB12-N LIS)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 50827 Acc ...
- 【学习笔记】--- 老男孩学Python,day2
今天正式上课的第一天,好害怕.好紧张.好激动.好兴奋! 第一天的课程还算是比较简单吧,因为之前断断续续学的就是这点东西,算是这些都比较熟了吧 今天学习了如下课程: 1. 简单计算机组成 2. pyth ...
- python学习之老男孩python全栈第九期_day009之文件操作总结
# 文件处理# 打开文件# open('路径','打开方式', '指定编码方式')# 打开方式:r w a 可读可写:r+ 可写可读:w+ 可追加可读:a+ b# r+ :打开文件直接写,和读完再写 ...
- 微信小程序 发现之旅(二)—— 自定义组件
组件化的项目开发中,组件应当划分为三个层次:组件.模块.页面 微信小程序已经为开发者封装好了基础组件,页面文件(pages)也有了详细的规定 而模块就需要自行开发,并且要和页面文件区分开,这就涉及到自 ...