Swift Package Manager (SPM) 创建并集成本地库

在macOS 项目中,使用 Swift Package Manager (SPM) 创建并集成本地库的完整步骤。

  1. 创建一个macos应用程序,选择 swift、oc、swiftui都可以。
    在这里插入图片描述

  2. 创建好应用之后,开始创建SPM本地库。

    打开终端app,进入项目根目录,逐次输入一下命令:

// 创建本地库目录(名称自定)
mkdir tools 
cd tools
# 初始化 Swift 包(类型选择 Library)
swift package init --type library
创建成功之后终端会输出以下内容以及右侧自动生成的内容:

在这里插入图片描述

  1. 进入刚才自动生成的Sources文件夹中,将abs文件夹删掉(也可以不删掉,我这边删掉是因为tools中需要管理更多的本地库)

  2. 在Sources文件夹中,新建文件夹以及swift文件

在这里插入图片描述
注:自己编写swift文件中的内容

5. 到这一步已经完成50%,重点是编写Package文件内容

// swift-tools-version: 6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescription
/*** name:Swift包的名称;* defaultLocalization:资源的默认本地化;* platforms:支持的最低系统平台的列表;* pkgConfig:用于C模块的名称。如果存在,Xcode将搜索.pc文件以获取系统目标所需的其他标志;* providers:系统目标的程序包提供者;* products:此软件包可让客户使用的产品列表;* dependencies:软件包依赖项列表(可空,或需要其它外部依赖);* targets:属于此软件包的目标列表(源码目录、测试目录);* swiftLanguageVersions:此软件包兼容的Swift版本列表;* cLanguageStandard:用于此程序包中所有C目标的C语言标准;* cxxLanguageStandard:用于此程序包中所有C ++目标的C ++语言标准;通常我们需要的是:name、platforms、products、dependencies、targets*/let package = Package(name: "tools",platforms: [.macOS(.v14)],products: [.library(name: "MyLogger",targets: ["MyLogger"]),.library(name: "MyLocalLibrary",targets: ["MyLocalLibrary"]),],targets: [.target(name: "MyLogger"),.target(name: "MyLocalLibrary"),.testTarget(name: "toolsTests",dependencies: ["MyLogger", "MyLocalLibrary"]),]
)

此时,可以直接在创建的本地库中运行单元测试,测试是否有报错,有报错需要解决。

  1. 创建好本地SPM和运行也正常测试,这时候主工程就需要使用本地SPM库
    直接将创建好的SPM库往工程里面拖,注意选好选项。

    在这里插入图片描述
    7、想要使用刚才创建好的本地SPM本地库,还需要将他们加入到工程中在这里插入图片描述

到此,创建好的本地SPM库就可以正常使用了。
public struct MyLogger {var DEBUG: Bool = false// 这里是 struct,所以按照 swift 的 struct 语法,可以不写 init,// 但是,因为是封装成 SPM 库,需要对外暴露,// 所以 init 构造器不能默认不写,一定需要有 public 构造器,否则外部无法初始化public init() {}public init(_ DEBUG: Bool) {self.DEBUG = DEBUG}public func log(_ msg: String) {if DEBUG {print("Logger\t\(msg)")}}
}

其他本地库想使用tools

dependencies: [.package(path: "../Tools"),// 使用三方库.package(url: "https://github.com/sparkle-project/Sparkle", from: "2.0.0"),],

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

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

相关文章

渗透测试之利用sql拿shell(附完整流程+防御方案)【下】

导读: 时刻保持谦逊,始终保持学习,探寻事物的本质,不要把事情复杂化 话不多说,书接上回 三、利用日志getshell 利用条件: 拥有网站的写入权限知道网站的绝对路径数据库日志开启 实际操作: (1)查看数据库日志是否开启以及路径 show variables like %general%; (2…

LeetCode 热题 100_每日温度(72_739_中等_C++)(栈)(暴力破解;栈(从左到右);栈(从右到左))

LeetCode 热题 100_每日温度(72_739) 题目描述:输入输出样例:题解:解题思路:思路一(暴力破解法(双重循环)):思路二(栈:从左到右)&…

【HarmonyOS Next之旅】DevEco Studio使用指南(二)

目录 1 -> 工程模板介绍 2 -> 创建一个新的工程 2.1 -> 创建和配置新工程 2.1.1 -> 创建HarmonyOS工程 2.2.2 -> 创建OpenHarmony工程 1 -> 工程模板介绍 DevEco Studio支持多种品类的应用/元服务开发,预置丰富的工程模板,可以根…

unity3d 背景是桌面3d数字人,前面是web的表单

是可以实现的,但涉及多个技术栈的结合,包括 Unity3D、Web 技术(HTML、JavaScript)、以及可能的 WebGL 或 WebRTC 技术。大致有以下几种实现方案: 方案 1:Unity 作为独立应用(桌面端&#xff0…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中,经历过传统的 pro code 阶段,即活动页面完全由前端开发编码实现,直到 2020 年接入公司内部的低代码活动平台,满足了大部分日常活动的需求,运营可自主配置活动并上线,释…

深度学习系列79:Text2sql调研

参考 https://github.com/topics/text-to-sql 这里是一些资源:https://github.com/eosphoros-ai/Awesome-Text2SQL/blob/main/README.zh.md 这里是综述文章:https://zhuanlan.zhihu.com/p/647249972 1. 数据集 Spider: 一个跨域的复杂text2sql数据集&a…

Linux 系统负载过高的排查思路

技术探讨:Linux系统负载过高的排查思路 在Linux服务器运行过程中,如果系统负载过高,可能会导致性能下降和服务不稳定。以下是针对Linux系统负载过高问题的排查思路和解决方法: 1. 查看系统负载: 使用uptime或top命令查…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

linux---天气爬虫

代码概述 这段代码实现了一个天气查询系统,支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型,并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求,并解析返回的 JSON 数据来展示天气信息。 #in…

Java高频面试之集合-08

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说CopyOnWriteArrayList CopyOnWriteArrayList 详解 CopyOnWriteArrayList 是 Java 并发包(java.util…

【微信小程序 onTabItemTap:精准监听 TabBar 点击事件】

onTabItemTap 是微信小程序中的一个页面生命周期函数,用于监听用户点击 TabBar 上的某个项时的事件。以下是如何运用 onTabItemTap 的详细说明: 使用场景 onTabItemTap 适用于需要在用户点击 TabBar 切换页面时执行特定逻辑的场景。例如,你…

痉挛性斜颈需要做手术吗?

痉挛性斜颈的治疗是一个涉及多种医学知识的话题,让我们从多方面分析这个问题,来谈谈是否需要进行手术。 首先,我们要明确痉挛性斜颈是一种什么疾病。痉挛性斜颈是一种颈部肌肉异常收缩的疾病,可能导致头部持续或间歇性地向一侧旋…

AOT是什么?

https://www.bilibili.com/video/BV1Es4y1q7Bf?spm_id_from333.788.player.switch&vd_source12d5954938d20d50645e227a6a728c76&p87常规的java代码是即时解释执行的,只有热点代码才会提前编译成二进制,并且将java代码放到别的电脑执行时得安装j…

【JavaWeb学习Day23】

Maven高级 分模块设计与开发 分模块设计:将一个大项目分成若干个子模块,方便项目的维护、扩展,也方便模块间的相互引用,资源共享。 策略: 1.策略一:按照功能模块拆分,比如:公共组…

图像的特征

图像的特征主要包括以下几类: 1. 颜色特征: 直方图:描述图像中颜色的分布。 颜色矩:通过颜色的均值、方差等统计量表示颜色分布。 主色调:图像中占主导地位的颜色。 2. 纹理特征: 灰度共生矩阵&#xff0…

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐ 示例 1: 输入:original [1,2,3,4], bounds [[1,2],[2,3],[3,4],[4,5]] 输出:2 解释: 可能的数组为: [1, 2, 3, 4] [2, 3, 4, 5] 示例 2: 输入&…

AF3 squeeze_features函数解读

AlphaFold3 data_transforms 模块的 squeeze_features 函数的作用去除 蛋白质特征张量中不必要的单维度(singleton dimensions)和重复维度,以使其适配 AlphaFold3 预期的输入格式。 源代码: def squeeze_features(protein):&qu…

【打卡d4】日期类--分组输入

第一题:根据一年中的第 n 天计算日期 📌 知识点 判断闰年: 闰年条件:能被 400 整除,或 能被 4 整除但不能被 100 整除。平年:2 月 28 天;闰年:2 月 29 天。 累加月份,找…

JAVA(5)-基础概念

*固定格式 一.注释和关键字 关键字:被赋予特定关系的词 字母全部小写,如class表示一个类 二.字面量 1.字面量类型 *字符串里面的类型是一句话,用双引号 字符里面的类型只有一个字或字母 null只能用字符串的方式打印 2.制表符 \t 至少补…

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome!它不仅让你随时随地畅享本地音乐…