通过构建Cocoapods私有库进行组件化开发探索

专题一

一、创建私有索引库

   选Github或者码云都可以,本例以Github为例。创建私有索引库用来作为自己组件库的索引:

二、本地添加私有索引库

添加:pod repo add 索引库名称 索引库地址

例:pod repo add ZYHModule https://github.com/zyhDeveloper/ZYHModule.git

查询:pod repo

三、创建组件库(同步骤一操作,在Github或者码云上创建)

四、创建组件工程

1、快速创建模版库

在命令行工具里cd进入桌面文件夹

执行:pod lib create 组件名

例:pod lib create XXModules

2、添加组件内容

我们把基础组件相关的东西丢到Classes文件夹中,并且把ReplaceMe.m文件删除

执行:

git rm XXModule/Classes/ReplaceMe.m

git add .

git commit -m 'firstCommit'

3、安装与测试本地库

在Example项目的Podfile文件中可以看到 “  pod 'LXFBase', :path => '../'  ”,模板库已经默认帮我们在Podfile中指定了LXFBase.podspec的位置,我们无需操作,直接在命令行工具里cd到Example文件夹,执行pod install

 

4、 修改Spec

五、上传组件代码

1、将代码提交到组件仓库

git add .
git commit -m 'firstCommit'
git remote add origin https://gitee.com/LinXunFeng/LXFBase.git
git push -f origin master

2、打标签

标签与spec中的s.version保持一致

git tag -a 0.1.0 -m "Release version 0.1.0"

git push origin --tags

六、提交podspec到私有索引库

先做个本地和远程验证

1、本地验证

pod lib lint --allow-warnings

2、远程验证

pod spec lint --allow-warnings

3、提交podspec

执行: pod repo push 私有索引库名称 spec名称.podspec
pod repo push ZYHModule XXModule.podspec --allow-warnings

七、使用私有库

测试下搜索我们的组件:pod search XXModules

1、添加Podfile文件

cd到开发的项目工程文件

执行:pod init

2、在Podfile的最顶部添加如下描述

// 第二行是为了保证公有库的正常使用

source 'https://github.com/zyhDeveloper/ZYHModule.git'

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

添加:pod 'XXModules'

3、安装组件

执行:pod install

专题二

一、私有库的更新迭代

更新远程私有仓库

1、代码变动更新

组件库当有新增文件或者发生修改或者删除时,更新迭代执行:

删除:git rm XXXX

git add .

git commit -m '更新描述'

git push origin master

2、版本更新

版本更新 这一步非常重要,为更新索引库做准备

git tag -a 0.2.0 -m "Release version 0.2.0"

git push origin --tags

修改描述文件并更新索引库

1、修改spec文件

打开你的xx.podspec文件,将原本的版本号改为0.2.0,与刚刚的tag保持一致

git add .

git commit -m '更新描述'

git push origin master

2、验证Spec

pod spec lint --allow-warnings

3、更新索引库

// pod repo push 索引库名称 xxx.podspec

pod repo push ZYHModule XXModule.podspec --allow-warnings

最终需更新使用

pod update 

二、子库Subspecs的使用

    如果我们只需要用到SDWebImage中的GIF功能,那么并不需要将整个SDWebImage都下载下来,在Podfile中将~~pod 'SDWebImage'~~ 改为 pod SDWebImage/GIF即可单独使用这一功能。

子库格式

s.subspec '子库名称' do |别名|

end

  使用说明:

s.source_files = 'XXModule/Classes/*'
# s.dependency 'SDWebImage', '~> 4.3.3'主库的依赖库
s.subspec 'Cache' do |c| 
c.source_files = '
XXModule/Classes/Manager/**/*'
c.dependency 'SDWebImage', '~> 4.3.3' 子库的依赖库
end
s.subspec 'Manager' do |m| 
m.source_files = '
XXModule/Classes/Category/**/*'
end

修改后再按之前的步骤更新索引库和组件库就可以了

pod spec lint --allow-warnings(如果文件路径没问题,出现The`source_files` pattern did not match any file可尝试新设置tag)

pod repo push ZYHModule XXModule.podspec --allow-warnings

pod update

如需在某个工程添加子库,可执行:

pod 'XXModule/Manager'

pod install

专题三

资源文件的使用

资源文件都放在Assets文件夹中

一、修改Spec

将关于资源加载的注释去掉

s.resource_bundles = {

      # 'LXFMain' => ['LXFMain/Assets/*.png']

      改为:'LXFMain' => ['LXFMain/Assets/*']

}

二、修改加载资源代码

使用[UIImage imageNamed:@"图片名称"]加载不出来图片

使用以下代码:

NSString *normalImgName = [NSString stringWithFormat:@"%@.png", normalImg];
NSBundle *curBundle = [NSBundle bundleForClass:self.class]; 
NSString *curBundleName = curBundle.infoDictionary[@"CFBundleName"];
NSString *curBundleDirectory = [NSString stringWithFormat:@"%@.bundle", curBundleName];
NSString *normalImgPath = [curBundle pathForResource:normalImgName ofType:nil inDirectory:curBundleDirectory];
UIImage *normalImage = [UIImage imageWithContentsOfFile:normalImgPath];
Xib的加载也是如此
NSBundle *curBundle = [NSBundle bundleForClass:self.class];
CustomView *customView = (CustomView *)[curBundle loadNibNamed:@"CustomView" owner:nil options:nil].firstObject;
centerView.frame = CGRectMake(30, 140, 200, 100);
[self.view addSubview:customView];

如果是直接在xib中拖入一个imageView控件来设置图片的加载,我们则需要在图片名字前加上当前bundle名称   XXXX.bundle/图片名字

专题四

本地私有索引库路径:/Users/Mr.z/.cocoapods/repos

 删除私有索引库:

pod repo remove [索引库名称] //移除本地索引库

 

转载于:https://www.cnblogs.com/Mr-zyh/p/11005086.html

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

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

相关文章

lodash 数组元素查找 findIndex

_.findIndex(array, [predicate_.identity])这个方法类似 _.find。除了它返回最先通过 predicate 判断为真值的元素的 index &#xff0c;而不是元素本身。<!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta …

layui 父页面弹框中获取子页面的内容

layer弹层组件开发文档 - Layuihttps://www.layui.site/doc/modules/layer.html#layer.getChildFrame 需求及代码分析 如上图&#xff0c;原来是点击一个按钮跳转到子页面&#xff0c;现在想改为&#xff1a;点击按钮&#xff0c;在当前页打开。因为不想要重写子页面的样式及内…

在JBoss Fuse / Fabric8 / Karaf中使用Byteman

您是否曾经尝试过了解一些非常简单的方法不起作用的过程&#xff1f; 您正在任何众所周知的上下文中编写代码&#xff0c;无论出于何种原因它都无法正常工作。 而且您信任您的平台&#xff0c;因此您认真阅读了所有日志。 而且&#xff0c;您仍然不知道为什么某些行为不符合预…

个人作业——Alpha项目测试

一、 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 团队名称 西柚皇家编程团队&#xff1a;https://www.cnblogs.com/TakeRa…

HttpURLConnection的警告

这段代码对您来说还不错吗&#xff1f; HttpURLConnection connection null; try {connection (HttpURLConnection) url.openConnection();try (InputStream in url.getInputStream()) {return streamToString(in);} } finally {if (connection ! null) connection.disconn…

LeapFTP 注册码

LeapFTP v2.7.6.613 汉化版II 特别版Name:crsky Code:214065-658136565http://www.crsky.com/soft/664.htmlLeapFTP v2.7.6.613 英文版http://www.crsky.com/soft/378.htmlName:crsky Code:214065-658136565------------LeapFTP 2.7.6.613 汉化版软件类别&#xff1a;汉化补丁/…

Windows7下Docker的安装

转自 https://blog.csdn.net/xiangxiezhuren/article/details/79698913 无法打开图3&#xff0c;打开属性。给其添加git路径 无法使用图2下载 https://www.cnblogs.com/huang-yc/p/10350408.html 转载于:https://www.cnblogs.com/shufeiyang/p/11016177.html

简而言之,JUnit:单元测试断言

简而言之&#xff0c;本章涵盖了各种单元测试断言技术。 它详细说明了内置机制&#xff0c; Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了该主题&#xff0c;并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里根&#xff08;R…

vue 安装使用mockjs

使用 mockjs 的案例过程&#xff1a; 1. 安装 npm install axios -S npm install mockjs --save-dev npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置_jwl_willon的博客-CSDN博客_npm save备注&#xff1a;<> 意为等价于&#xff1b;1、npm install …

vue 总结

1、尽量不操作dom 使用数据双向绑定 2、使用指令 如:title 不是title 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

OpenFileDialog 类的ShowDialog() 错误的解决

首先&#xff0c;一个类里&#xff0c;有个linkLabel1 private OpenFileDialog openFileDialog1;private DialogResult result; private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { openFileDialog1 new OpenFileDialog(); …

大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计

1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [rootmini3 kafka]# bin/kafka-console-producer.sh --broker-list mini1:9092 --topic cyf-test 程序代码 package org.apache.sparkimport java.net.InetSocketAddressimport org.apache.spark.HashParti…

日期/时间格式/解析,Java 8样式

自Java 几乎 开始以来&#xff0c;Java开发人员就通过java.util.Date类&#xff08;自JDK 1.0起&#xff09;和java.util.Calendar类&#xff08;自JDK 1.1起 &#xff09;来处理日期和时间。 在这段时间内&#xff0c;成千上万&#xff08;甚至可能数百万&#xff09;的Java开…

vue-router 响应路由参数的变化

提醒一下&#xff0c;当使用路由参数时&#xff0c;例如从 /user/foo 导航到 /user/bar&#xff0c;原来的组件实例会被复用。因为两个路由都渲染同个组件&#xff0c;比起销毁再创建&#xff0c;复用则显得更加高效。不过&#xff0c; 这也意味着组件的生命周期钩子不会再被…

无废话WPF系列5:控件派生图

1. WPF类控件的派生关系图&#xff0c;紫色的部分开始才算是进入WPF的框架里。 2. WPF控件图 WPF的UI控件主要有以下类型&#xff0c;ContentControl, HeaderedContentControl, ItemsControl, HeaderedItemsControl, Panel, Adorner(文字点缀元素), Flow Text(流式文本元素), T…

安装ipython和jupyter

本节内容&#xff1b; 安装ipython安装jupyterPycharm介绍 Python软件包管理一、安装ipython 1. python的交互式环境2. 安装ipython 可以使用pip命令安装。如果你是用pyenv安装的python的话&#xff0c;pip命令已经有了。 当需要安装包的时候&#xff0c;最好进入虚拟环境&…

vue 图片资源应该如何存放并引入(public、assets)?

全局cli配置&#xff1a;vue.config.js 之前写项目就想着怎么简单怎么来&#xff0c;图片要用了&#xff0c;就直接在要用图片的页面&#xff0c;新建一个跟页面同等级的 imgs 文件夹&#xff0c;然后在页面中直接 “./imgs/图片.png”&#xff0c;不得不说这样写很方便。 但是…

真正的动态声明性组件

在这篇简短的文章中&#xff0c;我将重点介绍ADF动态声明性组件。 我的意思是一个众所周知的ADF标签af&#xff1a;declarativeComponent 。 它可以用作将页面设计为页面片段和组件组成的一种非常便捷的方法。 例如&#xff0c;我们的页面可以包含以下代码片段&#xff1a; &l…

layui 树形组件下拉框

采用 layui 树形组件&#xff0c;版本&#xff1a;V2.6.8。只需要更新layui版本&#xff0c;不需要下载tableSelect。 原作者博客&#xff1a;https://blog.csdn.net/m0_67402588/article/details/123526860。 从 官网 更新日志可以看到&#xff0c;树形组件在2.5.7版本还在更新…

访问修饰符(C# 编程指南)

所有类型和类型成员都具有可访问性级别&#xff0c;用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性&#xff1a; public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型…