当前位置: 首页 > 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 使用计…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...