认识公有库和私有库

  • 公有库:开源自己封装的库供别人使用,且往cocoaPods的官方Repo仓库(即CocoaPods Master Repo)中新增自己库的索引,该库索引是以*.podspec.json文件形式存在。
  • 私有库:私有库不在cocoaPods的官方Repo仓库中,而是在自建的spec repo中,库索引是以*.podspec文件形式存在,自建的spec repo放在路径~/.cocoapods/repos下,与master同级,其链接的远程仓库可以是公开的,也可以是私有的。

私有库链接私有仓库的例子:公司项目放在公司内网搭建的git服务器中,有些功能在多个项目中都会用到,这就需要抽成库。为了便于维护和升级,使用cocoaPods来管理。由于置于内网git服务器中,这些库只有在公司内网才能安装。

私有库链接公开仓库的例子:阿里巴巴有一个叫阿里百川的开放平台,提供了淘宝联盟SDK,将SDK制作成了私有库,整合在自建的阿里云Repo仓库中,这样既能提供给其他开发者使用,又能避免混乱地发布在cocoaPods的官方Repo仓库中。

  • Spec Repo表示Repo仓库,是集合所有公开库的.podspec.json文件(索引文件)的git仓库。
    当使用Cocoapods时它会被clone到本地的~/.cocoapods/repos目录下,进入目录后可以看到master文件夹,它就是官方的Spec Repo本地仓库。
    因此创建CocoaPods私有库就需要有类似master的私有Spec Repo,让它关联远程git仓库。

搭建私有库和公有库

  • 私有库和公有库前面搭建步骤是相同的,只在发布时操作不同。
相同步骤
  • 1.github上新建空白项目pod_test。仓库网址为https://github.com/xxx/pod_test,该仓库链接我们的自定义库pod_test。
  • 2.创建Pods工程。
    命令pod lib create pod_test,依次回答终端问题。

设置完成后终端会输出

成功后会创建出一个pod_test工程,目录结构如下:

  • 3.添加库文件。
    将编写好的库文件拉入pod_test/classes中,删掉ReplaceMe.m文件。

Example是创建Pods工程时生成的一个工程,用于验证添加的库文件是否能正常使用。Example目录下Podfile文件中自动设置了pod_test依赖,如下:

target 'pod_test_Example' dopod 'pod_test', :path => '../'    #自动添加了

cd Example文件夹下,终端执行pod install或pod update,安装pod_test依赖,目录结构如下:

打开pod_test.xcworkspace,其Pod目录的虚拟目录Development Pods/pod_test下就有库文件了。
在控制器中编写测试代码验证库的接口,若经过验证,库的接口能正常使用,则可进入下一步。

  • 4.提交pods库到github上。
    由于pod lib创建pod_test工程时默认已经准备了LICENSE、README.md、.gitignore三个文件,若在github上创建新建空白项目pod_test时勾选了这三个文件,则git pull时会产生冲突。解决方式:将pod_test工程目录下与github项目冲突的文件删除。
    此外,pod_test目录下默认准备了.git仓库,会影响与github仓库的同步,删除掉。
    cd到pod_test目录下
git init
git remote add origin https://github.com/xxx/pod_test
git pull origin main
git add .
git commit -m "第一次提交项目"
git push origin master:main
  • 5.配置Pods工程的.podspec文件。主要是s.version、s.summary、s.source的编辑。
    pod_test.podspec的内容如下:

关于字段的含义:

s.name :pod search 搜索的关键词,注意这里一定要和.podspec的名称一样
s.version :版本号,每一个版本对应一个tag
s.summary : 简介
s.homepage : 项目主页地址
s.license : 许可证
s.author : 作者
s.social_media_url : 社交网址
s.source : 项目的地址
s.source_files : 需要包含的源文件
s.resources: 资源文件
s.requires_arc : 是否支持ARC
s.dependency :依赖库
s.ios.deployment_target = '8.0' : 支持的pod最低版本

s.source_files = ‘pod_test/Classes/**/*’,这里**表示匹配所有子目录,*表示匹配所有文件。

  • 6.打标签,推送到远程。重点:tag打的版本号必须和podspec中的s.version值相同
git add .
git commit -m '设置podspec文件'
git push origin master:main     #提交到远端仓库
git tag 0.0.1    #这里的版本号必须和podspec中的s.version值相同
git push --tags

tag必须要打上,CocoaPods进行仓库版本管理时,就是通过.podspec文件中s.version的值到git远程仓库上找与之相同的tag标签的版本。
补充:

打tag时加注释的写法:git tag 0.0.1 -m '写注释'
查看所有tag内容:git tag -l -n
  • 7.验证.podspec文件的格式是否正确,必须打完tag才能验证,且必须验证,否则后面执行pod repo push或pod trunk push一定失败
    cd到pod_test目录,执行命令
//--allow-warnings:加上该选项,验证时如果有警告会忽略警告,否则无法验证通过
//--use-libraries:如果依赖了静态库就需要加上该选项
pod spec lint --allow-warnings --use-libraries
或
pod lib lint pod_test.podspec --allow-warnings --use-libraries

pod spec相对于pod lib会更为精确,pod lib相当于只验证一个本地仓库,pod spec会同时验证本地仓库和远程仓库。
终端打印"pod_test passed validation"即为验证成功。
至此,算是搭建了本地的自定义库,接下来发布阶段的操作决定了最后是私有库还是公有库。

后续操作产生私有库

  • 8.创建私有的Spec Repo。
    github上新建空白项目mySpecs,网址https://github.com/xxx/mySpecs.git,作为Repo仓库,本地生成私有的Spec Repo工作目录:
pod repo add mySpecs https://github.com/xxx/mySpecs.git

那么在路径~/.cocoapods/repos下就会有mySpecs本地仓库。

  • 9.把pod_test.podspec提交到自建的Spec Repo仓库:
pod repo push mySpecs pod_test.podspec --allow-warnings --use-libraries

push成功会打印"Adding the spec to the `mySpecs’ repo"。
之后mySpecs本地仓库里面多了pod_test库的索引(也就是pod_test.podspec),同时会push同步到https://github.com/xxx/mySpecs.git。
至此,私有库pod_test完成。

后续操作产生公有库

  • 8.把pod_test.podspec提交到官方Spec Repo仓库:
pod trunk push pod_test.podspec --allow-warnings --use-libraries

若显示"pod_test successfully published"就表示成功发布到官方Spec Repo仓库了。
若报错没有注册CocoaPods账号,则注册一个,命令(github_email填邮箱地址,'user_name’填作者名称):

pod trunk register github_email 'user_name' --verbose

然后到邮箱中收取邮件来点击验证注册,之后再执行一次pod trunk push pod_test.podspec --allow-warnings即可。(提醒:换台电脑,修改源码,提交到仓库时一样需要注册)
至此,公有库pod_test完成。
提交之后cocoaPods官网更新会延迟,耐心等待5-10分钟,然后将其更新到本地master spec repo:

pod repo update
rm ~/Library/Caches/CocoaPods/search_index.json
pod search pod_test    #重新下载search_index.json

CocoaPods公有库和私有库制作相关推荐

  1. iOS架构-cocoapods打包静态库(依赖私有库、开源库、私有库又包含静态库)(14)

    前言: iOS工程架构少不了cocoapods 对第三方库的管理,它有着很好的操作性和集中管理的特性.之前的写了不少Xcode 建静态库工程打包.a 和 .framework 的文章,但是我们要先建静 ...

  2. 组件库(私有库)维护

    上一篇(私有库搭建):https://blog.csdn.net/BUG_delete/article/details/100670099 在上一篇的基础上, 本篇进行远程私有仓库的版本升级: 1.我 ...

  3. mysql公有库和私有库_带有公有和私有子网的 VPC (NAT) - Amazon Virtual Private Cloud

    带有公有和私有子网的 VPC (NAT) 这个场景的配置包括一个有公有子网和私有子网的 Virtual Private Cloud (VPC).如果您希望运行面向公众的 Web 应用程序,并同时保留不 ...

  4. 模块化日常:开源库与私有库重名

    主角:LPDNetworkingKit 起因:LPDNetworkingKit 本身是我们组在 GitHub 上开源的一个库,然后,哎嘿,不知道啥原因,我们内网 GitLab 上还有一个私有的 LPD ...

  5. iOS架构-cocoaPods之自制私有库及管理(17)

    CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便. 个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像开 ...

  6. CocoaPods私有库搭建的记录

    前言 随着项目的业务增加以及马甲包进度的跟进,一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了,本文主要记录自己搭建私有库时的整个流程,以防后面再次搭建时忘记,方便自己 ...

  7. 关于CocoaPods私有库的那点事情

    关于CocoaPods私有库的那点事情 私有库 组件化的基本操作 首先得安装好CocoaPods,不懂的童鞋出门右拐找百度 终端命令都是在podspec所在目录,除了pod lib create和po ...

  8. CocoaPods私有库创建

    CocoaPods私有库创建 参考链接 为什么要使用私有库和私有库索引 对于个人来说,可以进行代码积累.我们在创建新项目,很多基础代码会进行复用,都会引入自己常用的代码.还有一些自定义代码,快速代码, ...

  9. Git 技术篇-GitHub免费私有库设置方法实例演示,GitHub私有库时代来临

    之前我们存放都 GitHub 的代码都是被公开的,如果想设置私有库是需要交保管费的. 终于,2019年1月7日,GitHub 官网宣布了 GitHub 可以免费设置为私有了. 来看看我们应该怎么设置! ...

最新文章

  1. 网络工程师应掌握的50个路由器知识要点
  2. 判断一个点是否在三角形内部
  3. 第二周 第七节 列表的使用
  4. JAVA POI 应用系列(2)--读取Excel
  5. php底层运行机制与原理
  6. centos 7 局域网丢包排查_宽带发生故障怎么办?教你几招轻松排查
  7. 使用iOS手势UIGestureRecognizer
  8. 日期/时间格式/解析,Java 8样式
  9. 电脑怎么彻底删除软件_电脑在使用的过程中如何彻底删除今日热点广告弹窗的方法...
  10. layui根据name获取对象_layui表格行合并;解决侧边固定栏合并
  11. Sublime Text 3 注册码
  12. springboot事物注解不生效_springboot事务不生效的几种解决方案
  13. 后置递增运算符(JS)
  14. 人工智能机器学习深度学习TensorFlow最新学习视频资料
  15. 线性代数-向量空间-基向量定义
  16. tuts4you 注册_设计和开发完整的网站(Tuts + Mini系列,第3页)
  17. IDEA新建项目需要新建好文件夹
  18. JAVA图形界面设计
  19. C语言实现http服务器(Linux)
  20. 【重要】条形码原理39码和EAN-13码

热门文章

  1. 浪潮信息做pc服务器,浪潮信息:高性能AI服务器将成为智算中心生产算
  2. 修复:“ Windows进程激活服务(WAS)由于遇到错误而正在停止。”
  3. Jmeter 性能测试之阶梯式场景、波浪式场景
  4. Linux的上传和下载文件到Window_scp指令
  5. std::list的pop_front()及front()
  6. 文本文件和二进制文件
  7. 《计算机应用基础》在线作业一
  8. Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
  9. BlackHat2017热点之数据取证与事件响应
  10. ZEGO:如何从零搭建H5直播平台