本篇文章给大家谈谈了解Swift 包管理器,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
为什么要使用SPM
最重要的一点:官方支持
跨平台构建
SPM 是一个跨平台的解决方案。 SPM提供了完整的构建环境,可以在不同平台上构建和分发Swift软件包。
与Swift 的关系更加密切
SPM是用Swift编写的,可以利用Swift自身强大的功能,并且与Swift的核心库紧密相连。
SPM拥有更先进的设计
我们将在后面的章节中对此进行扩展。
SPM 的社区影响力不断扩大
作为Swift 开源项目的一部分,社区的受欢迎程度持续升温。 CocoaPods的很多核心成员也参与了架构设计,并且影响力越来越大。
SPM基本用法
SPM的基本概念可以参见官网说明。
常用命令
swift build: 编译包。 swift run: 编译Package中的可执行文件并运行它。 swift test: 运行Package 中的单元测试。 swift package: 该命令有很多用途,包括Package初始化、修改、更新、解析检查、编译选项规范等。 内部结构
对于一个Package来说,主要分为三部分:Target、Products、Dependency。
产品
产品可以理解为Package输出的形式。与Cocoapods只能以静态库/动态库的形式相比,SPM还可以输出为可执行文件。
目标
目标被理解为包含多个文件的模块。目标之间可能存在依赖关系。同时,输出的产品也将取决于一个或多个目标。
依赖关系
依赖关系描述了当前包依赖于其他包的情况。
一个典型的Package目录如下:
其中,Package.swift的定义:
Package.resolved 放在顶级包中的一个文件中,类似于很多软件管理器锁的实现,Swift 使用这个文件进行依赖解析。执行swift build swift test swift packagegenerate-xcodeproj 命令时,默认会隐式调用swiftpackageresolve 来检查依赖版本是否正确。
Package.resolved的详细设计思路可以参考提案。
SPM的设计思想
SPM的设计思想也遵循了Swift的一些设计思想:
Security : SPM的编译环境处于独立的沙箱中,命令和脚本不能随意执行。
快速: 得益于新的llbuild 构建系统,SPM 可以支持具有数百万个节点的依赖关系图。
表达式:使用Swift作为SPM的配置描述语言。
下图描述了Apple对于SPM的总体思路
配置
与Cocoapods等繁琐冗长的DSL语法相比,SPM使用Swift作为SPM的配置描述语言,在保留Swift强大的语言特性并得到Swift相关工具支持的同时,大大降低了开发人员的学习成本。
依赖关系
SPM使用git标签进行版本依赖,格式遵循Semantic Versioning。
语义版本控制(Semver):是一个解决方案,旨在通过使用一组简单的规则和条件来约束版本号配置来解决软件包管理器中著名的依赖地狱问题。
Semver规定的格式分为:主版本号。次要版本号。修订号。版本号递增规则如下:
1. 主要版本号:当您进行不兼容的API 更改时。
2. 次版本号:当您进行向后兼容的功能添加时。
3. 修订号:当您进行向后兼容性问题修正时。
Semver还支持语义关键字来实现版本控制。需要更深入了解Semver的读者可以参考官网的介绍。下图是使用Semver版本控制的Package依赖树结构。
建筑
SPM 使用swift-llbuild 这个并行、高效、增量编译构建系统作为其构建引擎。目前,Xcode9 也已集成用于构建LLVM、Clang 和Swift。同时,SPM由于独立的沙箱构建环境,提供了强大的安全性。
工作流程特点
如果你的某个软件包还处于开发模式,那么标签集成方法就非常不方便。与Cocoapods类似,SPM也提供了分支依赖和本地依赖。
工具的演变
例如指定版本为4.0
SPM的未来新特性
与其他工具更好地集成使用libSwiftPM 和libSyntax 使SPM 的扩展实现更灵活。发布和部署目前的发布过程依赖于手动建立git标签,git推送原点[标签名称],未来将实现更多自动化工具。它支持复杂的Package,支持资源文件、更复杂的编译设置以及扩展的编译工具,以更好地管理Package生态系统、跨平台沙箱隔离、更安全的验证方案,并支持fork操作和搜索索引。可以预见,时机成熟时,SPM 将成为Swift Packages 的标准管理工具。
参考:
https://developer.apple.com/videos/play/wwdc2018/411/
https://swift.org/blog/swift-package-manager-manifest-api-redesign/
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/129495.html
用户评论
可儿
终于明白为什么那么多人推荐使用Swift Package Manager了!以前手动管理依赖真的好麻烦,现在直接用它来管理项目依赖变得高效太多了!
有7位网友表示赞同!
玩味
对于新手来说,学习如何使用 Swift Package Manager 确实比较困难,官方文档写的太抽象了,希望能有更多具体的实战案例和教程帮助理解。
有11位网友表示赞同!
心脏偷懒
我一直觉得 Apple 官方提供的工具就是很棒的, 这个新版Swift Package Manager 简化操作流程感觉超棒!项目整合更灵活,不用像以前那样担心依赖冲突的问题了,太赞了!
有18位网友表示赞同!
醉枫染墨
标题说的对,了解 Swift Package Manager 确实很重要。现在 iOS 开发越来越注重代码复用和团队协作,这个工具能够帮助我们实现更高效、更标准化的代码管理方式。
有9位网友表示赞同!
容纳我ii
作为一个资深iOS开发者,我必须承认Swift Package Manager 确实提高了开发效率和项目易维护性。它就像一个高效的依赖容器,把所有需要的信息都封装了起来。
有9位网友表示赞同!
长裙绿衣
我觉得这个工具非常有用!之前开发中经常遇到依赖冲突,导致调试很痛苦,现在有了 Swift Package Manager ,终于可以轻松解决这个问题,太棒了!
有7位网友表示赞同!
她的风骚姿势我学不来
我最近尝试使用 Swift Package Manager 来管理我的项目,感觉还是有点不太适应。文档比较复杂,需要花更多时间去理解它。希望官方能提供一些更易懂的教程,帮助我们更快速上手。
有7位网友表示赞同!
ヅ她的身影若隐若现
其实刚开始接触Swift Package Manager的时候我还挺抗拒的,觉得用习惯的方案更加简洁方便。然而在实际开发的过程中,发现它的优势越来越明显了!
有7位网友表示赞同!
伤离别
我之前一直使用第三方库来管理依赖关系,结果经常出现冲突和版本问题,自从使用了 Swift Package Manager 后,这些问题都迎刃而解!现在项目更稳定、更易于维护。
有20位网友表示赞同!
青袂婉约
对于想要学习 iOS 开发的同学来说,了解Swift Package Manager 是必不可少的。它不仅能够提高开发效率,还可以帮助你更好地理解 iOS 项目结构和管理模式。
有20位网友表示赞同!
最迷人的危险
虽然 Swift Package Manager 功能强大,但我觉得它的使用门槛还是比较高的。希望官方能提供一些更直观的学习资源,让更多开发者能够更容易地上手这个工具。
有7位网友表示赞同!
箜篌引
我对这个工具的使用体验还算不错!它确实能够高效管理项目依赖关系,并能自动解决版本冲突问题,让我在开发过程中更加轻松愉快。
有14位网友表示赞同!
回到你身边
我一直追求代码的可复用性,而 Swift Package Manager 则是实现这一目标的利器。它可以把各个组件独立封装起来,方便我们进行重用和维护,提高项目的开发效率。
有5位网友表示赞同!
泡泡龙
Swift Package Manager 确实是个很实用的工具,尤其是在团队协作项目中,它的优势更加明显。它能够帮助不同开发者协同管理代码,减少版本冲突的发生概率。
有15位网友表示赞同!
熏染
我觉得这个工具还有很大的提升空间,比如支持更多语言的包,以及提供更完善的错误诊断和调试功能,这样能更加方便开发者使用和维护项目。
有11位网友表示赞同!
陌上蔷薇
希望官方能继续完善 Swift Package Manager 的功能,并将其融入到 Xcode 开发环境中,让它更加便捷易用。期待它的进一步发展!
有6位网友表示赞同!