当前位置: 首页 > news >正文

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)")
        }
    }
}

相关文章:

  • Java中的 异常
  • DP 问题 -- LQR中的DP问题
  • π0及π0_fast的源码剖析——核心模块src的全面分析与解读:如何实现PaLI-Gemma、如何去噪生成动作
  • 【鸿蒙开发】OpenHarmony调测工具hdc使用教程(设备开发者)
  • Spring(七)AOP-代理模式
  • 【大模型安全】安全解决方案
  • VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势
  • C++Primer学习(函数基础6.1)
  • Day6 DFS
  • 17.用户态与内核态
  • 手脑革命:拆解Manus AI如何用“执行智能体”重构生产力——中国团队突破硅谷未竟的技术深水区
  • 《AI浪潮下的创新枢纽:火山引擎大模型应用实验室平台》
  • 登录固定账号和密码:
  • JavaScript基础-比较运算符
  • JavaWeek1-方法构造继承,字符串和可变数组
  • 量子纠缠到处存在--双鱼青铜镜投影--互相包含
  • Roo-Code 核心实现分析
  • 蓝桥-反倍数-oj152
  • 模型的原始输出为什么叫 logits
  • Vue Router:构建单页应用的核心利器
  • 做企业网站排名/网络推广怎么做好
  • 郑州网站公司排名/品牌推广运营策划方案
  • 电子商务网站建设首要问题是/百度地图疫情实时动态
  • 网站ip过万/网络营销的种类有哪些
  • 丰润区建设局网站/app开发成本预算表
  • 永州商城网站建设/制作一个网站的费用是多少