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组件化搭建私有库

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

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

相关文章

Transformer 论文学习笔记

重新学习了一下&#xff0c;整理了一下笔记 论文&#xff1a;《Attention Is All You Need》 代码&#xff1a;http://nlp.seas.harvard.edu/annotated-transformer/ 地址&#xff1a;https://arxiv.org/abs/1706.03762v5 翻译&#xff1a;Transformer论文翻译 特点&#xff1…

ElasticSearch基础篇-Java API操作

ElasticSearch基础-Java API操作 演示代码 创建连接 POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…

33.利用abs 解决绝对值问题(matlab程序 )

1.简述 abs函数的功能是绝对值和复数的模 语法 Y abs(X) 说明 Y abs(X) 返回数组 X 中每个元素的绝对值。如果 X 是复数&#xff0c;则 abs(X) 返回复数的模。 示例 标量的绝对值 y abs(-5) y 5 向量的绝对值 创建实值的数值向量。 x [1.3 -3.56 8.23 -5 -0.01…

二十三种设计模式第二十二篇--中介者模式

说到这个模式就有趣了&#xff0c;不知道大家在生活中喷到过中介没&#xff1f;其实中介这个词吧&#xff0c;我也说不上好还是坏&#xff0c;有时候他可以帮助人们更快的达到某个目的&#xff0c;但有的时候吧&#xff0c;这个有贼坑人&#xff0c;相信网络上有各种被中介坑的…

【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题

目录 前言 安装 pip安装 安装包安装 柱状图 主要方法 参数说明 示例代码 效果图 解决中文显示问题 修改后的图片 饼状图 主要方法 示例代码 效果图 动态图 主要方法 动态图官方使用介绍 示例代码 颜色设置 内建颜色 字体设置 资料获取方法 前言 众所周…

【Golang 接口自动化04】 解析接口返回JSON串

目录 前言 解析到结构体 json数据与struct字段是如何相匹配的呢&#xff1f; 解析到interface Go类型和JSON类型 实例代码 simpleJson 总结 资料获取方法 前言 上一次我们一起学习了如何解析接口返回的XML数据&#xff0c;这一次我们一起来学习JSON的解析方法。 JSO…

想做上位机,学C#还是QT?

学习C#还是Qt&#xff0c;取决于你的具体需求和偏好。 如果你计划开发跨平台的桌面应用程序&#xff0c;并且希望使用一种更轻量级、直观的界面框架&#xff0c;那么Qt可能是一个不错的选择。Qt是一个功能丰富且成熟的跨平台框架&#xff0c;支持多种开发语言&#xff08;包括…

flask用DBUtils实现数据库连接池

flask用DBUtils实现数据库连接池 在 Flask 中&#xff0c;DBUtils 是一种实现数据库连接池的方案。DBUtils 提供了持久性&#xff08;persistent&#xff09;和透明的&#xff08;transient&#xff09;两种连接池类型。 首先你需要安装 DBUtils 和你需要的数据库驱动。例如&…

springboot 入门

前提是已安装java环境&#xff0c;分为三部分 一、项目构建 二、项目组成 三、常用注解 Demo源码 spring-demo: springboot 入门项目 一、springboot-stater 使用IDEA快速构建springboot项目 1、新建项目 2、选择maven&#xff0c;在选择next 3、填写好项目信息 4、pom…

分布式应用:ELK企业级日志分析系统

目录 一、理论 1.ELK 2.ELK场景 3.完整日志系统基本特征 4.ELK 的工作原理 5.ELK集群准备 6.Elasticsearch部署&#xff08;在Node1、Node2节点上操作&#xff09; 7.Logstash 部署&#xff08;在 Apache 节点上操作&#xff09; 8.Kiabana 部署&#xff08;在 Node1 节点…

maven安装(windows)

环境 maven&#xff1a;Apache Maven 3.5.2 jdk环境&#xff1a;jdk 1.8.0_192 系统版本&#xff1a;win10 一、安装 apache官网下载需要的版本&#xff0c;然后解压缩&#xff0c;解压路径尽量不要有空格和中文 官网下载地址 https://maven.apache.org/download.cgihttps:…

k8s概念-DaemonSet

回到目录 参考链接https://v1-23.docs.kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/ DaemonSet 确保全部&#xff08;或者某些&#xff09;节点上运行一个 Pod 的副本 当节点加入到K8S集群中&#xff0c;pod会被&#xff08;DaemonSet&#xff09;调度到…

【开源源码学习】

C 迷你高尔夫 一款打高尔夫的游戏。亮点是碰撞反应和关卡设计。 GitHub - mgerdes/Open-Golf: A cross-platform minigolf game written in C. TypeScript 俄罗斯方块 复刻经典的俄罗斯方块&#xff0c;项目采用ReactReduxImmutable的技术栈。 GitHub - chvin/react-tetr…

使用Canvas制作画板

使用Canvas制作画板 在本篇技术博客中&#xff0c;我们将使用JavaScript和Canvas技术来创建一个简单的画板应用程序。这个画板将允许用户在一个画布上绘制线条&#xff0c;使用橡皮擦擦除绘制的内容&#xff0c;更改线条的颜色和宽度&#xff0c;并支持撤销和重做功能。 准备…

检查 CPU 的上下文切换

一.什么是cpu上下文切换 CPU 上下文切换是操作系统在多任务环境下管理进程的一项关键任务。在现代计算机系统中&#xff0c;有多个进程同时运行&#xff0c;每个进程都需要一定的 CPU 时间来执行其任务。由于 CPU 在某一时刻只能执行一个进程的指令&#xff0c;因此操作系统需…

MySQL内置函数使用说明

MySQL函数使用说明 MySQL 是一个流行的关系型数据库管理系统&#xff0c;它提供了许多内置函数来处理和操作数据。这些函数可以简化数据库查询和操作的过程&#xff0c;提高代码的可读性和效率。以下是一些常见的 MySQL 内置函数及其使用说明和示例。 数值函数 ABS() 函数原…

静态资源导入探究

静态资源可以在哪里找呢&#xff1f;我们看看源码 从这个类进去 里面有个静态类 WebMvcAutoConfigurationAdapter 有个配置类&#xff0c;将这个类的对象创建并导入IOC容器里 这个静态类下有个方法 addResourceHandlers(ResourceHandlerRegistry registry)静态资源处理器 若自…

从零实现深度学习框架——Transformer从菜鸟到高手(一)

引言 &#x1f4a1;本文为&#x1f517;[从零实现深度学习框架]系列文章内部限免文章&#xff0c;更多限免文章见 &#x1f517;专栏目录。 本着“凡我不能创造的&#xff0c;我就不能理解”的思想&#xff0c;系列文章会基于纯Python和NumPy从零创建自己的类PyTorch深度学习框…

【环境配置】Windows下WSL将ubuntu挪位置-系统盘清理

问题–垃圾太多&#xff0c;系统盘空间占用太大 最近 C 盘空间暴涨&#xff0c;用工具 WinDirStat-强烈推荐的工具 查看发现 WSL 子系统占用了6个多 G 的空间&#xff0c;遂想办法挪个位置&#xff1b; 【关键字】将 Windows 里的子系统挪到非系统盘 D 盘&#xff1b; 解决 打…

生产服务器突然本机无法访问本机IP的端口

生产服务器突然本机无法访问本机IP的端口 一、现象描述 生产服务器突然无法访问自己本机IP地址的端口&#xff0c;通过localhost或者127.0.0.1都可以正常访问 二、问题分析 服务器是搭建在虚拟机上面&#xff0c;起初由于服务器内存不足的原因&#xff0c;导致了服务器故障无…