SPM(Swift Package Manager)开发及常见事项

SPM怎么使用的不再赘述,其优点是Cocoapods这样的远古产物难以望其项背的,而且最重要的是可二进制化、对xcproj项目无侵入,除了网络之外简直就是为团队开发的项目库依赖最好的管理工具,是时候抛弃繁杂低下的cocoapods了。

一:如何制作?

这里以使用为准,gui操作创建:

1 . 在Xcode顶部菜单选择如下图操作
在这里插入图片描述

2 . 填写或更改自己的库名称,这里为"MyLibrary"
在这里插入图片描述

3 . 这样就生成了一个壳子SPM。里面最重要的就是图中圈出的部分。
Package.swift是描述管理SPM的文件,也是放到github之类的远端仓库后让Xcode识别的依据。Source则是源码存放的地方,现在里面默认是一个结构体,我们可以把自己要做成库的代码放进去(别忘了open public 等之类的权限修饰语)。除此之外还有readme.md,Tests文件夹,由于国内很少有人关注这些文件故这里直接忽略(Tests文件夹内的测试代码删除下,不然自己的代码编译不过)。

在这里插入图片描述

其中Package.swift作为库的描述和配置文件很重要。在这里需要搞懂一个概念,就是一个spm不是只对应唯一一个库的,是可以对应多个。

package = spm
library = 某个库

所以不太恰当的说,spm = 多个库的集合。当然一个spm只对应一个可执行库是没问题的也是很常见的。

import PackageDescriptionlet package = Package(name: "MyKit", // 库名称products: [// spm生成的可执行库(下面的target)和文件,一个spm可对应多个(例如一个RxSwift就对应多个可执行库).library(name: "MyKit", // 这俩一般默认相同即可targets: ["MyKit"]), // 这俩一般默认相同即可],// 此spm库依赖的其它spm库地址,如没有依赖,dependencies可无dependencies: [// Dependencies declare other packages that this package depends on.// .package(url: /* package url */, from: "1.0.0"),],targets: [.target(name: "MyKit", // 可执行库名称,也即在Source文件夹下的代码文件夹名称dependencies: []   // 此可执行库依赖的其它库的名称,如没有依赖。可无        exclude: ["Info.plist"], // 此库的权限描述plist清单,需要的权限等等resources: [.process("XXX.bundle") // 此库的资源文件路径]), // 此库的资源文件.testTarget( // 此库的测试文件,如没有测试用例,可以删除name: "MyKitTests",dependencies: ["MyKit"]),]
)

二:如何发布?

如果是在国外,可以不受网络限制直接在Xcode操作就可以发布,但国内受网络限制要采取其他方法才能应对。

1 . 先在github建立一个远端仓库。

2 . 提交创建的spm文件,并将其推送到远端。

// 1.提交创建的spm文件或者更改的文件
git commit -m "first commit"
// 2.切换到主分支上
git branch -m main
// 3.设置远端仓库
git remote add origin https://github.com/xxx/GithubTest.git
// 4.推到远端仓库,并输入密码和token
git push -u origin main

在推送期间要科学上网,不然推不成功。

如果没有科学上网的工具怎么办?其实可以不用放到github上。既然github访问不了,那gitlab或者gitee总是可以正常访问的,这也是个解决办法。

那如果想用xcode操作怎么办?xcode网络走的不是系统代理,所以你用clash等工具设置全局代理是没用的,但是可以专门为Xcode设置访问代理,这样就访问更新正常了。

最后

spm还可引入oc / c / c++,至于二进制化或者静态库大家可以共同探讨,这方面的网上资料较少

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/56038.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt

HadoopWEB页面上传文件报错Couldn’t upload the file course_info.txt 右键F2检查发现:文件上传PUT操作的IP地址是节点IP别名识别不到导致 解决方法:在WEB页面访问浏览器所在机器上面配置hosts映射地址(注意:配置的是浏览器访问的地址不是hadoop节点所在…

反弹shell的N种姿势

预备知识1. 关于反弹shell 就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。2. 反弹shel…

全志F1C200S嵌入式驱动开发(soc系统集成)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 任何一个嵌入式设备都是由很多的子系统组成的。这里面有硬件、有软件,还可能有机械,并不一定就是大家看到的消费电子那样,即一个soc构成了所有的系统。现实情况是,要构建一个系…

Nacos源码 (2) 核心模块

返回目录 整体架构 服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚…

JVM详情

JVM详情 一、JVM内存划分二、双亲委派模型(重点考察)三、 GC(垃圾回收机制)垃圾的判定算法垃圾回收算法 一、JVM内存划分 堆:存放new出来的对象;(成员变量) 方法区:存放…

CentOS7 启动谷歌浏览器 java+Selenium+chrome+chromedriver

前言:自己想使用该技术实现自动化抓取音乐,目前在window上运行成功,需要在Linux Centos服务上跑,配置上出现了许多问题,特此记录。 参考文档:CentOS7 安装Seleniumchromechromedriverjava_远方丿的博客-CSD…

这个酒店管理方法太酷了!赶紧试试吧

安全是酒店管理中最重要的优先事项之一,酒店保障住客和员工的生命安全是不可妥协的责任。为了有效预防和应对潜在的火灾风险,引入烟感监控系统是一种普遍且高效的解决方案。 烟感监控系统通过及时检测烟雾和火源,及时发出警报和采取措施&…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转, 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用,使用递归互斥信号量,但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

解决Element Plus中Select在El Dialog里层级过低的问题(修改select选项框样式)

Element Plus是Vue.js的一套基于Element UI的组件库&#xff0c;提供了丰富的组件用于构建现代化的Web应用程序。其中&#xff0c;<el-select>是一个常用的下拉选择器组件&#xff0c;但在某些情况下&#xff0c;当<el-select>组件嵌套在<el-dialog>&#xf…

SQL Server 2016 sa 登录失败,错误代码18456

问题&#xff1a;客户数据库服务器新安装的SQL Server 2016 sa 登录失败 一、故障原因 18456错误是因密码或用户名错误而使身份验证失败并导致连接尝试被拒或者账户被锁定无法sa登录 二、解决办法 按照如下操作依次排查处置 2.1 使用Windows身份认证登录 2.2 windows身份登…

全新二开美化版UI好看的社区源码下载/反编译版

2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版&#xff0c;相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版&#xff08;请尊重每个作者的版权&#xff09;&#xff0c;这个版本没有加密&#xff0c;可以进行反编译&#xff0c;…

Linux:shell脚本:基础使用(2)

test命令 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] (前后至少应有一个空格) 常用的测试操作符 -d&#xff1a;测试是否为目录&#xff08;Directory) -e&#xff1a;测试目录或文件是否存在&#xff08;Exist&#xff09; -f&#xff1a;测试是否…