认识公有库和私有库

  • 公有库:开源自己封装的库供别人使用,且往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文件。

    然后cd Example文件夹下,终端执行pod install或pod update,目录结构如下:

打开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.打标签,推送到远程。
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才能验证。

    cd到pod_test目录,执行命令
pod spec lint --allow-warnings 或
pod lib lint pod_test.podspec --allow-warnings

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

之后mySpecs本地仓库里面多了pod_test库的索引,同时会push同步到https://github.com/xxx/mySpecs.git。

至此,私有库pod_test完成。

后续操作产生公有库

8.把pod_test.podspec提交到官方Spec Repo仓库:

pod trunk push pod_test.podspec

若显示"pod_test successfully published"就表示成功发布到官方Spec Repo仓库了。

若报错没有注册CocoaPods账号,则注册一个,命令:

pod trunk register gitHub_email 'user_name' --verbose

然后到邮箱中收取邮件来点击验证注册,之后再发布一次pod trunk push pod_test.podspec即可。

至此,公有库pod_test完成。

提交之后cocoaPods官网更新会延迟,耐心等待半小时,然后将其更新到本地master spec repo:

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

制作CocoaPods公有库和私有库的更多相关文章

  1. 利用Cocoapods、SVN 创建私有库实现方案(yoowei)

    由于项目年后要进行组件化,考虑到如果公司内部实现一些私有的组件,不对外公开,而又想在不同项目中使用,该怎么办呢? 使用Cocoapods制作私有库就完美的解决了这个问题.下图就是使用私有库带给我们的好 ...

  2. Cocoapods 创建自己的公开库、私有库

    如何创建自己的共有库 1.注册Trunk trunk需要CocoaPods 0.33版本以上,用pod --version 命令查看版本 CocoaPods版本 如果版本低,需要升级: sudo ge ...

  3. CocoaPods - 发布自己的模块(公有库、私有库)

    CocoaPods发布框架到远程公有库 1.编写代码~上传远程仓库 git init git add . git commit -m '提交到本地分支' //关联远程仓库 git remote add ...

  4. Mac终端的Cocoapods创建自己的私有库和公有库

    一,前言 为什么要用Cocopods 通常在开发的过程中,大多时候,我们会处理一类相同的操作,比如对于字符串String的邮箱验证,是否为空,手机号验证,或者一些UIView的动画操作,我们为了避免写 ...

  5. Cocoapods 应用第二部分-私有库相关

    我们在这里,使用的是 第一部分使用pod lib create YohunlUtilsPod 创建的framework工程来说明.其创建过程在此就不重复了,当然你也可以下载我已经创建好的demo ht ...

  6. 使用CocoaPods创建自己的私有库-iOS组件化第一步

    目前iOS组件化常用的解决方案是Pod+路由+持续集成,通常架构设计完成后第一步就是将原来工程里的模块按照架构图分解为一个个独立的pod工程(组件),今天我们就来看看如何创建一个Pod私有库. 新建: ...

  7. CocoaPods创建自己的公开库、私有库

    http://www.cocoachina.com/ios/20180308/22509.html

  8. 利用Cocoapods创建基于SVN的私有库podspec

    由于项目年后要进行组件化,考虑到公司内部实现的一些私有组件,不对外公开,而又想在不同项目中使用,该怎么办呢?由于cocoapods有了强大的功能,可以自己创建podspec,更可以设置私有的库.那么利 ...

  9. 基于 svn 服务器及 cocoapods-repo-svn 插件进行组件化私有库的创建

    一.准备 组件化 随着业务需求的增长,在单工程 MVC 模式下,app 代码逐渐变得庞大,面对的高耦合的代码和复杂的功能模块,我们或许就需要进行重构了,以组件化的形式,将需要的组件以 pod 私有库的 ...

随机推荐

  1. 计算机网络-5-9-TCP拥塞控制

    TCP拥塞控制 拥塞控制的一般原理 在计算机网络中的链路容量(带宽),交换节点中的缓存和处理机等,都是网络的资源,在某段时间,若对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就会变坏,这 ...

  2. SpringMVC 解析(二)DispatcherServlet

    在我的关于Tomcat容器介绍的文章中,介绍了Tomcat容器的工作原理,我们知道Tomcat容器在收到请求之后,会把请求处理为Request/Response对象,交给Servlet实例处理.对于S ...

  3. Gitee 自已提交的代码提交人头像为他人、码云上独自开发的项目显示为 2 个开发者

    简介 自己写的代码提交到码云(Gitee)上却变成了两个人,一个被正确的代码提交统计了,另一个却没有,并且确信自己输入的Gitee账号是自己绑定的邮箱,具体如下: 解决办法 查看自己的用户名 git ...

  4. Python属性描述符

    实现了__get__.set.__delete__中任意一个方法的类,称之为属性描述符. 属性描述符可以控制属性操作时的一些行为. 只要具有__get__方法的类就是描述符类. 如果一个类中具有__g ...

  5. 扩展NSDate类实现快捷使用 —— 昉

    获取当前日期和时间: +(NSDate *)getCurrentDate{ NSDate *now = [NSDate date]; return now; } 将日期转换为字符串: +(NSStri ...

  6. Solution -「LOCAL」Burning Flowers

      灼之花好评,条条生日快乐(假装现在 8.15)! \(\mathcal{Description}\)   给定一棵以 \(1\) 为根的树,第 \(i\) 个结点有颜色 \(c_i\) 和光亮值 ...

  7. BigDecimalAvoidDoubleConstructorRule:不要直接用double变量作为构造BigDecimal的参数

    先上结论: 不要直接用double变量作为构造BigDecimal的参数. 线上有这么一段Java代码逻辑: 1,接口传来一个JSON串,里面有个数字:57.3. 2,解析JSON并把这个数字保存在一 ...

  8. 北大博士生提出CAE,下游任务泛化能力优于何恺明MAE

    大家好,我是对白. 何恺明时隔两年发一作论文,提出了一种视觉自监督学习新范式-- 用掩蔽自编码器MAE,为视觉大模型开路. 这一次,北大博士生提出一个新方法CAE,在其下游任务中展现的泛化能力超过了M ...

  9. IDEA maven项目中引入ojdbc依赖报红色波浪线问题的解决办法

    1.pom.xml配置文件中删除ojdbc的依赖配置后更新maven项目,然后再到本地仓库中将ojdbc这个文件夹删除 2.在网上下载ojdbc14.jar,然后改名为ojdbc14-10.2.0.2 ...

  10. Javers 比较两个类的差异

    Javers 在开发过程中遇到需求,比较数据库中的原数据与新修改要写入库中的数据.这个实体类是比较复杂的.例如有基本类型,BigDecimal类型,自定义类型,Date类型,List集合,Set集合, ...