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

iOS 搭建组件化私有库

一、创建私有库索引

步骤1是在没有索引库的情况下或者是新增索引的时候才需要用到(创建基础组件库)
首先在码云上建立一个私有库索引,起名为SYComponentSpec

在这里插入图片描述

二、本地添加私有库索引

添加私有库索引

pod repo add SYComponentSpec https://gitee.com/sun-shiyu/sycomponent-spec

在这里插入图片描述

在这里插入图片描述

三、创建基础组件库

当你需要新建组件的时候,就在这里开始,如果是想修改原有的库,就可以直接在之前的组件仓库里面修改即可

1.在码云上创建组件库
命名为SYBasicComponents,如图:

在这里插入图片描述
2.创建SYBasicComponents本地库
默认创建路径:/Users/sunshiyu/SYBasicComponents

pod lib create SYBasicComponents

在这里插入图片描述
最后,项目本地组件库创建完成后会自动打开项目。

3.在私有库导入自己的代码

Classes文件夹下面的ReplaceMe.m文件删除掉,替换成你要上传私有库的代码,这里导入简单的两个测试文件:

// SYLog.h
+ (void)logger;
// SYLog.m
+ (void)logger {NSLog(@"-------- Log --------");
}

在这里插入图片描述

4.更新这个工程的pod库

  1. cdExample文件下
  2. 执行 pod install
    在这里插入图片描述

5.修改.podspec文件
在这里插入图片描述
在这里插入图片描述
有两个属性需要注意改下:
s.homepage:私有代码仓库的地址 https://gitee.com/sun-shiyu/sybasic-components
s.source:私有代码仓库的源地址 https://gitee.com/sun-shiyu/sybasic-components.git

其他属性根据需要自行配置。

6.将私有库push到远程仓库

注意远端需要有个master分支,这里先创建一个master分支:

 cd /Users/sunshiyu/SYBasicComponents 
git branch master
git checkout master

在这里插入图片描述

commit代码到本地然后push到远端:

 git branch (检查当前所在分支)
git status (查看当前git存了什么文件)
git add . (将所有文件缓存到待提交文件区域)
git commit -m "上传组件"
git remote add origin https://gitee.com/sun-shiyu/sybasic-components.git  (私有库git仓库地址)
git push -f origin master (将代码推送到远程私有库git仓库的master分支上面已经创建了)
git tag 0.1.0 (这里的版本号必须和podspec里面写的版本号一致)
git push -- tags (提交tag)

在这里插入图片描述
7.本地和远程校验

1.本地校验,在当前私有库目录下,输入命令:

pod lib lint --private --allow-warnings

在这里插入图片描述
校验成功:SYBasicComponents passed validation.

2.远程验证,在当前私有库目录下,输入命令:

pod spec lint --private --allow-warnings

在这里插入图片描述
校验成功:SYBasicComponents.podspec passed validation.

8.提交索引文件到远程索引库

1.所有验证通过之后,要将spec文件推送到最开始创建的私有库索引库当中

cd 到私有库项目目录,
pod repo push <本地索引库名称> <索引文件名> --allow-warnings
<本地索引库名称>在 /Users/sunshiyu/.cocoapods/repos 下的私有库索引项目名称
<索引文件名>就是以 podspec 结尾的,注意不要弄错

例如输入命令:

pod repo push SYComponentSpec SYBasicComponents.podspec --allow-warnings

在这里插入图片描述
2.推送去之后,在本地索引库中查看如下图​​​​​​​​​​​​​​:
在这里插入图片描述

getee 远端查看如下图:

在这里插入图片描述

四、使用基础组件库

随便创建一个项目名为 SYSpecDemo ,初始化 pod

 cd /Users/sunshiyu/Desktop/SYSpecDemo
pod init
pod install

打开编辑 podfile 文件

open podfile

如下:

# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'# source 添加对应的索引库,否则会pod install失败
source 'https://gitee.com/sun-shiyu/sycomponent-spec.git'target 'SYSpecDemo' do# Comment the next line if you don't want to use dynamic frameworksuse_frameworks!# Pods for SYSpecDemo# pod 对应组件,可以对应版本pod 'SYBasicComponents'end

再次:

pod install

就可以看到这个库:
在这里插入图片描述

导入头文件使用该库:

#import <SYBasicComponents/SYLog.h>// 打印 log 
[SYLog logger];

五、组件库依赖第三方库

如果我们的组件库需要依赖第三方库,例如 AFNetWorkingYYModel 等,操作如下:

1.修改组件库的 SYBasicComponents.podspec 文件,添加依赖:
在这里插入图片描述

然后组件库执行 Example 项目 执行 pod install

2.同上面第6步,将组件库修改的代码提到远端。记住一定要记得打 tag,且要与索引库的 version 保持一致 。

在这里插入图片描述

git tag 0.2.0 (这里的版本号必须和podspec里面写的版本号一致)
git push -- tags (提交tag)

3.提交索引库远端,同上面的第8步:

pod repo push SYComponentSpec SYBasicComponents.podspec --allow-warnings

4.修改主项目的 podfile 文件,加入 github CocoaPods 索引库,用来加载github三方库的:

source 'https://github.com/CocoaPods/Specs.git'

在这里插入图片描述

然后执行 pod install

以上是使用 pod 'SYBasicComponents' 的方式使用组件库,也就是远程的方式,这种方式需要没更新组件库后都要打 tag 以及修改 specversion,然后修改主项目的 podfile 文件(根据情况也可能不需要要修改),最后主项目重新 pod install 。这样就能得到远程组件库最新的代码,缺点是主项目每次想更新组件库的最近代码都需要组件库打 tag 更新组件库的版本,如何实现只要组件库有代码更新,主项目直接拉最新的代码呢?答案是引用本地索引库的方式,我们只需要修改主项目的 podfile 文件如下:

# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'# source 添加对应的索引库,否则会 pod install 失败
# source 'https://gitee.com/sun-shiyu/sycomponent-spec.git'
source 'https://github.com/CocoaPods/Specs.git'target 'SYSpecDemo' do# Comment the next line if you don't want to use dynamic frameworksuse_frameworks!# Pods for SYSpecDemo# pod 对应组件,可以对应版本# 方式一、引用远端组件库# pod 'SYBasicComponents'# 方式二:引用本地组件库,不需要 source 'https://gitee.com/sun-shiyu/sycomponent-spec.git'pod 'SYBasicComponents', :path => '~/SYBasicComponents/'end

即使用 pod 'SYBasicComponents', :path => '~/SYBasicComponents/' 的方式来直接引用本地组件库的代码,这样拉代码每次都是最新的。我们 pod install 试试看,Pods 目录结构变如下图所示:

在这里插入图片描述
本地组件库 SYBasicComponents 里面就是最新的代码了。因为我们的组件库依赖了 AFNetworking YYModel,所以Pods中出现了这两个库。

结束!!!

参考:
iOS私有库搭建
iOS组件化搭建私有库

相关文章:

iOS 搭建组件化私有库

一、创建私有库索引 步骤1是在没有索引库的情况下或者是新增索引的时候才需要用到&#xff08;创建基础组件库&#xff09; 首先在码云上建立一个私有库索引&#xff0c;起名为SYComponentSpec 二、本地添加私有库索引 添加私有库索引 pod repo add SYComponentSpec https:/…...

迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统

iTOP-3A5000开发板采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch) 的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上&#xff0c;频率提升至2.5GHZ&#xff0c;功耗降…...

枫叶时代:打造中国特色的传统文化IP

近年来&#xff0c;取材于传统文化的影视作品在文化产业市场受到前所未有的关注。作为一种兼具辨识度、影响力和流量变现能力的文化符号&#xff0c;影视IP既是文化产业的一个重要环节&#xff0c;也是国家文化软实力的直接体现。优秀的影视IP可以超越文字、语言、民族的障碍&a…...

一条sql语句在mysql中如何执行(查询+更新)

文章目录 一 MySQL 基础架构1.1 MySQL 基本架构1.2 Server 层基本组件介绍1) 连接器2) 查询缓存(MySQL 8.0 版本后移除)3) 分析器4) 优化器5) 执行器 二 语句分析2.1 查询语句2.2 更新语句为什么要用两个日志模块&#xff0c;用一个日志模块不行吗?为什么必须有“两阶段提交”…...

漫画 | TCP/IP之大明邮差

后记&#xff1a; 1973年&#xff0c;卡恩与瑟夫开发出了网络中最核心的两个协议&#xff1a;TCP协议和IP协议&#xff0c;随后为了验证两个协议的可用性&#xff0c;他们做了一个实验&#xff0c;在多个异构网络中进行数据传输&#xff0c;数据包在经过近10万公里的旅程后到达…...

Zookeeper和Nacos的区别

Zookeeper和Nacos的区别 在分布式系统中&#xff0c;注册中心充当着重要角色&#xff0c;是服务发现、客户端负载均衡中不可缺少的一员。注册中心除了能够实现基本的功能外&#xff0c;他的稳定性、可用性和健壮性对整个分布式系统的流畅运行影响重大。zookeeper和nacos可能是…...

O3DE的Pass

Pass介绍 Pass是具有输入和输出的渲染过程。 在最终渲染帧中看到的每个细节都是通过一系列Pass&#xff08;前一个Pass的输出是下一个Pass的输入&#xff09;计算出来的。Pass可以生成图像&#xff08;作为纹理、缓冲区或渲染目标&#xff09;。每个图像都包含关于场景的特定…...

如何建立含有逻辑删除字段的唯一索引

业务场景 在实际工作当中&#xff0c;遇到一个场景&#xff0c;就是在用户注册时&#xff0c;名字要全局唯一&#xff0c;当然&#xff0c;我们是可以对用户进行删除的&#xff0c;你会怎么去做&#xff1f; 分析 一般来说&#xff0c;我们可以在用户注册请求时&#xff0c…...

C语言基础知识点一

C语言基础知识点一&#xff1a; 1.数据类型 2.bool类型&#xff1a; 使用bool时时&#xff0c;需要增加<stdbool.h>头文件。 说明&#xff1a;bool 类型只有非零&#xff08;true&#xff09;和零&#xff08;false&#xff09;两种值。 如: if&#xff08;-1&#xf…...

Python 潮流周刊#14:Lpython 高性能编译器、Python 与 JavaScript 实现互通

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;本期分享的全部是英文材料。&#xff08;标题取自其中两则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。…...

JVM深入 —— JVM的体系架构

前言 能否真正理解JVM的底层实现原理是进阶Java技术的必由之路&#xff0c;Java通过JVM虚拟机的设计使得Java的延拓性更好&#xff0c;平台无关性是其同时兼顾移动端和服务器端开发的重要特性。在本篇文章中&#xff0c;荔枝将会仔细梳理JVM的体系架构和理论知识&#xff0c;希…...

dialog => :before-close的属性应用

在element-ui里面关闭弹窗的时候before-close会触发。 也就是点击X的时候回触发before-close这个属性, 代码实例: <el-dialogtitle"新增用户":visible.sync"dialogVisible"width"50%":before-close"handleClose"> handleClose…...

<van-empty description=““ /> 滚动条bug

使用 <van-empty description"" /> 时&#xff0c;图片出现了个滚动条&#xff0c;图片可以上下滑动。 代码如下&#xff1a; <block wx:if"{{courseList.length < 0}}"><van-empty description"" /> </block> <…...

使用swiper实现图片轮播功能

swiper中文官网地址:在这里 官网介绍:Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。 按照使用方法下载指定版本的swiper文件; 需要用到的文件有swiper-bundle.js和swiper-bundle.css文件,还需要引入map文件,不然会有警告提示; 准备工作:…...

Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

一、前言 时间类QDateTime、QDate、QTime、QTimeZone保存了Qt的时间、日期、时区信息&#xff0c;常用的时间类部件都会用到这些数据结构&#xff0c;常用概念有年、月、日、时、分、秒、毫秒和时区&#xff0c;时间和时区就关系到时间戳和UTC的概念。 UTC时间&#xff0c;又称…...

Modbus TCP转Profinet网关modbus tcp转以太网

大家好&#xff0c;今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先&#xff0c;我们需要安装捷米特JM-TCP-PN的GSD文件&#xff0c;并根据现场设备情况配置modbusTCP地址。然后&#xff0c;在博图中添加该GSD文件&#x…...

笔记 | P4387 【深基15.习9】验证栈序列 题解

题解 问题描述 给出两个序列 pushed 和 poped&#xff0c;分别表示入栈和出栈操作的顺序。我们需要判断给定的出栈序列是否可能对应于给定的入栈序列。如果可能&#xff0c;则输出 “Yes”&#xff1b;否则&#xff0c;输出 “No”。 解题思路 读取输入&#xff1a;读取询问…...

PyTorch中nn-XXX与F-XXX的区别

nn.XXX与F.XXX PyTorch中torch.nn**&#xff08;以下简写为nn&#xff09;中的模块和torch.nn.functional&#xff08;以下简写为F&#xff09;**中的模块都提供了常用的神经网络操作&#xff0c;包括激活函数、损失函数、池化操作等。它们的主要区别如下&#xff1a; nn中的…...

zookeeper集群和kafka的相关概念就部署

目录 一、Zookeeper概述 1、Zookeeper 定义 2、Zookeeper 工作机制 3、Zookeeper 特点 4、Zookeeper 数据结构 5、Zookeeper 应用场景 &#xff08;1&#xff09;统一命名服务 &#xff08;2&#xff09;统一配置管理 &#xff08;3&#xff09;统一集群管理 &#xff08;4&a…...

第4集丨Vue 江湖 —— 计算属性

目录 一、基本使用1.1 在computed中定义1.1.1 案例1.1.2 控制台调用getter1.1.3 控制台中的data和computed 1.2 缓存效果1.3 完整写法1.3.1 案例1.3.2 效果图 1.4 简写形式 二、案例的其他实现2.1 methods实现2.2 插值语法实现 三、体会计算属性的好处3.1 复杂任务时3.2 使用计…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...