搭建CocoaPods远程私有库
1.创建自己的远程私有索引库,用来存放私有框架的.podspec文件,并将其添加到本地索引
我用的仓库是码云(https://gitee.com),用自己的账号新建一个私有仓库,我命名为PrivatePodRepo;
将PrivatePodRepo添加到本地索引.
执行命令查看本地索引库:
pod repo list
然后执行将PrivatePodRepo添加到本地索引命令:
pod repo add PrivatePodRepo https://gitee.com/alan12138/PrivatePodRepo.git
执行完成再次查看本地索引库:
pod repo list
可以看到已经添加成功.
2.再创建一个远程私有库用来存放私有组件,命名为PrivateComponents
3.用pod命令创建Xcode工程,也就是组件代码工程
切换到组件代码想要存放的本地目录,执行以下创建命令:
pod lib create ComponentsA
可以看到这条命令clone下一个模板工程,然后需要填写一些个人信息和选项,之后便创建成功,并自动为你打开这个模板工程,之后便可以在这个工程里写组件代码了.
4.编辑组件代码工程
可以查看模板工程的目录结构,主工程在Example目录里,通过查看Podfile文件
可以看到主工程引用了本地仓库ComponentsA文件夹,其中Classes所在文件夹,便是我们存放组件代码的地方
删除ReplaceMe.m文件,编写一个简单的分类文件用于测试.
//NSObject+AT.h @interface NSObject (AT) + (void)printName:(NSString *)name; @end // NSObject+AT.m #import "NSObject+AT.h" @implementation NSObject (AT) + (void)printName:(NSString *)name { NSLog(@"------- %@ -------",name); } @end
查看项目目录,发现并没有刷新代码文件:
需要执行
pod install
执行完再次打开项目文件可以发现修改已经生效,在ATViewController使用一下这个分类方法.
#import "NSObject+AT.h" @interface ATViewController () @end @implementation ATViewController - (void)viewDidLoad { [super viewDidLoad]; [NSObject printName:@"夏帆帆"]; }
运行项目可以看到打印执行.
5.编辑并验证ComponentsA.podspec文件
到Podfile文件中补上AFNetworking依赖库,(这里是为了演示组件库有其他依赖的情况)
执行
pod install
执行完毕打开项目,引用一下
运行项目,成功运行,引用成功.
接下来验证ComponentsA.podspec文件是否有问题,
pod lib lint --allow-warnings
执行结果,验证通过
一切处理完毕之后便可以将本地代码提交到之前新建的远程组件仓库了.
有闲心的可以试一下用命令把本地文件和远程仓库关联然后提交,我试了一下报乱七八糟的错,干脆我直接把远程仓库clone下来,把项目拖进去,我觉得这样比花时间去研究那些命令错误直接多了,而且简单方便,不会出错.
然后执行
git status git add . git commit -m "init" git push
本地组件代码提交到远程仓库.
然后需要为代码打tag,并且需要和.podspec文件中的版本号保持一致,并提交
git tag 0.1.0 git push --tags
远程验证.podspec文件
pod spec lint --allow-warnings
验证通过.
6.将ComponentsA.podspec文件提交到之前添加的本地私有索引库PrivatePodRepo
pod repo push PrivatePodRepo ComponentsA.podspec --verbose --allow-warnings
执行完毕如果成功可以在PrivatePodRepo仓库看到提交的索引文件.因为执行这条命令验证.podspec文件通过后会自动上传到在远程索引库.
7.使用组件
为了方便还是用之前的模板工程演示,也可以新创建一个工程使用试一下,道理都是一样的.
打开Podfile文件
这时候已经不需要再使用本地pod了,而是使用远程组件,做如下修改:
执行
pod install
可以看到安装成功,再次运行项目文件,可以看到执行效果和之前一样,至此整个流程完毕.
原文地址:https://www.cnblogs.com/alan12138/p/11454492.html
- AngularJS入门心得4——漫谈指令scope
- Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成[上]
- 苹果就“电池门”公开致歉;微信下拉任务栏新增小游戏;美团打车进入北京
- 新华三《中国城市数字经济指数白皮书》:深圳数字经济发展水平国内居首
- NodeMCU模块写入MicroPython固件
- 如何证明Application Domain的隔离性
- Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成[下]
- 我所理解的Remoting(1):Marshaling & Activation[上篇]
- oracle 12c 常见报告获取-AWR
- 人人公司收购美国卡车社区 Trucker Path,未来或探索无人驾驶
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[下篇]
- 《WCF的绑定模型》博文系列汇总[共6篇]
- 快来看看难民营里的高科技超市
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习与情绪交易(附代码)
- 社区前端游戏框架LollipopCreator v1.0.X正式开源
- 社区开源框架音效管理模块:AudioManager详解
- 社区开源框架音效管理模块:AvatarManager详解
- vue-element-admin实现一个可编辑的table
- vue+element实现一个excel表格下载的功能
- vue的select下拉框多选项-multiple属性
- HBase基准测试
- Shell数组的使用
- 查询MYSQL锁表情况
- 查看MYSQL表数据大小
- 解决Centos6.0下出现protocol not available错误
- MYSQL删除大数据表经验总结
- 推荐4款堪比Google的搜索网站
- 那些年你走过下划线的坑