【iOS】使用cocoapods创建私有库/公有库 2020年5月
本文源自weicy,转载请注明出处
一般来说一个公司不只有一个产品,当项目很多后,我们就要考虑代码的共用,我们需要把一些通用的功能抽离成一个公共类,或者把一些功能做成组件,方便不同产品的使用或者分离。这也就是组件化的一些功能。iOS组件化实现基本基于cocoapods,如何使用cocoapods创建自己的组件库,是实现组件化的第一要素。下面我们就来创建下自己的仓库吧。
创建私有库的索引库
准备一个私有库地址,内部有权限限制的仓库即可。意思就是我们把抽离出的代码放到github、gitlab、coding等代码托管平台上
![]()
如图我是在github上创建的。
将创建的索引库添加到本地的cocoapods仓库
查看本地索引库
pod repo用上面的命令就能查出你当前电脑的本地索引库了
添加本地索引库
pod repo add 索引库名称 远程索引库地址例子:
pod repo add CommonToolRepo https://github.com/xxx/CommonToolRepo.git注意点: DFSpecs 是一个索引库,用来管理你的所有的私有pod 仓库的podspec文件的,执行完上面第2步,会在~/.cocoapods/repos 目录下自动生成DFSpecs 本地仓库
创建模板
- 创建模板这一步很简单,就是在某个位置创建一下我们代码。
$ cd ~/Desktop/
//这个命令的作用是创建一个pod项目,它会自动给你生成spec文件
$ pod lib create DYCategoryKit
//pod lib create NAME使用默认模版,如果想使用其他模版,可以添加--template-url=URL参数。
//pod lib create NAME:创建标准目录结构、模板文件。pod lib create NAME不是创建pod的唯一方法,但它是最简洁的方法
- 我是在桌面创建的这个文件。如果这一步成功的话会有下面的图
![]()
What platform do you want to use?? [ iOS / macOS ]
选择iOS,直接回车默认选择第一个
What language do you want to use?? [ Swift / ObjC ]
选择Swift。CocoaPods会把你的库设置为framework
Would you like to include a demo application with your library? [ Yes / No ]
选择Yes。如果你想要包含一个示例工程,或计划在app中测试你的库,这里需要选择Yes,以便模板文件为你的库创建Xcode工程。也就是如果你计划为pod添加截图,这里需要选择Yes。
Which testing frameworks will you use? [ Quick / None ]
选择Quick。提交库到CocoaPods前应当进行测试。CocoaPods推荐使用其附带的测试framework,而非Apple的XCTest。在Objective-C中,可以选择Specta/Expecta或Kiwi,其区别如下:
Specta/Expecta:通过不同podspecs的模块化方法。
Kiwi:是对Stubs/Mocks/Expections的一种一体化方法。
CocoaPods已经在MyLib-Tests.pch文件中添加了所有必要的包含和设置,因此不必将它们包含在每个文件中。
但是由于现在的cdn问题有时候会不成功,我这边使用的是
None
Would you like to do view based testing? [ Yes / No ]
选择Yes。根据你建立的仓库,你可能会发现基于快照的测试是验证视图不同部分不同操作的最佳方法,这里建议使用FBSnapShotTestCase。如果你使用的是Specta/Expecta,那么其会包含一个pod来改进语法。 What is your class prefix?
如果你选择的语言是ObjC,其最后会要求提供类前缀。你只要输入一个前缀即可
- 选项填完之后回车,会自动创建一个项目,名称就是CommonTool
将我们代码放入指定目录
打开桌面上的CommonTool,我们可以发现里面有一些文件,但是关键的文件夹就是CommonTool。这个文件夹中有两个文件夹(Assets和Classses)。
Assets:存放图片资源等等
Classes:存放源码,默认会有一个ReplaceMe.m文件 (比如SDWebImage pod里的类文件)可以删除这个文件
我们只要把需要上传的代码放入Classes文件夹中即可。然后进入Example文件夹,首次使用pod install进行安装,然后可以正常的引用和写测试代码。把你的demo修改的更完美,当然更重要的一点是保证没有错误。
在github或gitlab上创建新的pod项目
这里你会发现,我又重新创建了一个项目,和我之前创建的索引库项目是不一样的,这个就是真正放置我们封装的代码的地方
我的地址为
https://github.com/***/CommomTool.git修改模板文件相关信息
进入CommonTool项目,使用xcode打开。找到.podspec文件,这里可以用Sublime Text或者Xcode (文本编辑器不推荐,因为可能会改变"的格式,造成lint不通过),我这里直接在xcode中进行更改,根据你的需要进行相应更改。
s.summary,这个是显示在pod search的简短描述,
s.version是版本号,第一次默认是0.1.0不用修改,如果不是请修改为对应版本,
s.homepage和s.source中的地址为我们创建组件仓库的地址即可!
#
# Be sure to run `pod lib lint CommonTool.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
# Pod::Spec.new do |s|
s.name = 'CommonTool'
s.version = '1.1.2'
s.summary = 'A fairly complete class of common tools and extensions tool' s.description = <<-DESC
'my daily development.'
DESC s.homepage = '``` https://github.com/***/CommomTool.git```'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '***' => '**@163.com' }
s.source = { :git => ' https://github.com/***/CommomTool.git', :tag => s.version }
s.social_media_url = '你的地址' s.ios.deployment_target = '9.0' s.source_files = 'CommonTool/Classes/**/*' # s.resource_bundles = {
# 'CommonTool' => ['CommmonTool/Assets/*.png']
# } # s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end验证spec文件
终端进入CommonTool文件夹中进行
pod lib lint来进行验证。一般来说会有warn。这时我们就需要输入````pod lib lint --allow-warnings ```来允许警告 这时一般来说就成功了。
上面的警告一般都是因为我们没有在新的代码库中上传代码的原因。
备注上面的这些命令可以加上--verbose来显示详情。
显示下面这样就是成功的意思
-> CommonTool (1.1.2)
CommonTool passed validation.
上面是建立本地测试,我们还需要进行仓库有效性验证
pod spec lint使用方法和本地的一致
当然在使用上面的方法过程中可能会出现下面的bug。
使用命令 pod lib lint 时,出现警告: The URL () is not reachable。这是我们就加上后面的--allow-warnings
将制作好的组件上传到自己的git仓库
cd /Users/yourMacName/Desktop/CommonTool
git remote add origin https://github.com/xxx/CommonTool.git
git add .
git commit -m "注释描述"
git push origin master
//注意:如果你创建项目的时候生成了README或者license文件,那么这里你push的时候可能会push不了,如是你可用
git push origin master -f 强制提交,会覆盖之前的文件
给版本打一个分支
为仓库打tag,这个tag需要和spec文件中的版本保持一致
git tag -m "你的描述" 1.1.2
git push --tags
建立关联
将你项目中的spec文件push到第一步创建的私有库进行管理,可以用pod repo 命令查看你的私有库
在终端执行
pod repo push <本地索引库> <索引文件名>, 提交索引文件到远程索引。例如pod repo push CommonToolRepo CommonTool.podspec通过这一步我们就同步好了远程和本地索引库,到此,私有库已经制作完毕!
使用自己的私有库
到了这一步我们就可以使用自己的私有库了,
创建成功之后可能会出现search不到的情况,此时可删除本地搜索索引,然后再进行搜索
rm ~/Library/Caches/CocoaPods/search_index.json
pod search DYCategoryKit
如果还是不行那就全清
pod cache clean --all
rm -rf ~/Library/Caches/CocoaPods/search_index.json
pod repo remove trunk
pod repo update
这样基本上就出来了
私有仓库的使用你应该懂的,需要在Podfile添加source源
//如果还要添加公有pod,还需要加上这行
source 'https://github.com/CocoaPods/Specs.git'
//私有pod仓库索引
source 'https://github.com/***/CommonToolSpecs.git'
platform :ios, "9.0"
target "XXX" do
pod 'CommonTool'
end
发布到cocoapods,成为公开库
如果要添加到
Cocoapods的官方库了,可以使用trunk工具,具体可以查看官方文档上面我们已经将代码源用podspec文件管理起来了。要让其他人能下载使用你的代码,就要让他找到podspec文件,所以我们要讲podspec文件放在网络上托管起来。
- 公有库:将podspec放在cocoPods官方提供的仓库https://github.com/CocoaPods/Specs.git上托管
- 私有库: 将podspec放在个人或者公司git仓库托管。
私有库只能放在公司或个人的git仓库,如果没有权限就不能使用,那么我们如果想要多人使用怎么办。就需要将podspec文件放到cocoapods公有库中
第一步注册cocoapods
pod trunk register 邮箱地址 '用户名' --verbose
加上--verbose可以输出详细debug信息,方便出错时查看。也可以不加
这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功
验证cocoaPods
确保打开了邮件中的链接之后(正常加载出来就行),继续执行命令
pod trunk me
这是你会看到一下信息,如果没错就成功了。
发布
发布时会验证 Pod 的有效性,如果你在上面步骤中手动验证 Pod 时使用了 --use-libraries 或 --allow-warnings 等修饰符,那么发布的时候也应该使用相同的字段修饰,否则出现相同的报错。
pod trunk push ***.podspec
![]()
图是网上的 我的忘了截图。
这时候在pod trunk me就会看到你的详细信息了,里面包含这个库
删除私有库
删除一个私有
Spec Repo,只需要执行一条命令即可pod repo remove CommonToolSpec
这样这个
Spec Repo就在本地删除了,我们还可以通过$ pod repo add WTSpecs git@coding.net:wtlucky/WTSpecs.git
再把它给加回来。
如果我们要删除私有
Spec Repo下的某一个podspec怎么操作呢,此时无需借助Cocoapods,只需要cd到`~/.cocoapods/repos/CommonToolSpec目录下,删掉库目录~/.cocoapods/repos/WTSpecs$ rm -Rf PodTestLibrary
然后在将
Git的变动push到远端仓库即可git add --all .
git ci -m "remove unuseful pods"
git push origin master
git添加远程库的时候有可能出现如下的错误。
git报错:'fatal:remote origin already exists'怎么处理。这个的解决方法也很简单git remote rm origin 我们先把之前的删除就行
更新库
在我们想升级私有库新版本的时候,我们就需要重新发布一个版本
这时我们首先需要都上面的第六步,修改版本号,然后第七步校验。然后第八步第九步上传到github。最后第十二步直接上传到cocopods。由于我们注册了账号,十二步的前几个操作就不需要做了,直接上传即可
参考:组件化探究值私有库的创建
git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明
### 遇到的一些问题 补充 2020.06
1、Could not find remote branch 1.1.3 to clone. fatal: Remote branch 1.1.3 not found in upstream origin

这个问题很简单,就是你创建tag的时候没有上传到master分支,它在新建的时候找不到这个分支或者tag就会报这个错误。
2.Unable to accept duplicate entry for: WCYKit (1.1.3)

这个是因为之前已经push过1.1.3版本了,所以你再次重新push会报错
解决方法:
方法一:重新添加标签。如1.1.4
方法二:移除本版本,然后重新push,在终端执行下面指令:
pod trunk delete WCYKit 1.1.4 (即:pod trunk delete 库名 版本号)
这条指令可以帮助移除某个版本,完成之后,可以pod setup一下,然后pod search,可以发现,该版本以及不存在了,这个时候就可以重新push版本

【iOS】使用cocoapods创建私有库/公有库 2020年5月的更多相关文章
- iOS代码组件化--利用cocoaPods创建私有库
如果项目模块多,模块间逻辑复杂,我们发现多个人同时维护一个代码仓库需要十分小心,一不小心,造成冲突,解决起来很烦,相信很多人都遇到手工删除合并的冲突的文件的经历. 如果利用组件化思想,每个人维护自己的 ...
- Cocoapods 创建自己的公开库、私有库
如何创建自己的共有库 1.注册Trunk trunk需要CocoaPods 0.33版本以上,用pod --version 命令查看版本 CocoaPods版本 如果版本低,需要升级: sudo ge ...
- CocoaPods创建私有pods
由于项目需求,需要把项目的不同模块拆分出来即 组件化 ,一开始想做成多target模式,后来换成私有pods CocoaPods的安装和使用,网上很多,自行搜索即可. 听说可以基于svn创建pod私有 ...
- 【转】使用Cocoapods创建私有podspec
Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...
- 使用Cocoapods创建私有podspec
Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...
- CocoaPods 创建私有仓库
这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...
- iOS开发 - CocoaPods远程私有库从0到1
1. 创建主工程 路径:/Users/Funky/Desktop/CocoaPodRemoteLib/MyMainProject/MyMainProject.xcodeproj 2. 在码云(htt ...
- CocoaPods创建自己的公开库、私有库
http://www.cocoachina.com/ios/20180308/22509.html
- cocoaPods 创建自己的依赖库
1.先在github上创建一个仓库 和一般创建一样,就是证书一定要选,我选的是MIT,不要问我因为啥, 我也不知道, 哈哈 2.check到本地或者本地创建,反正最后都要上传到这个仓库,以个人习惯吧 ...
- 如何创建私有pod三方库
1.先登录github或者开源中国码云,创建远程仓库,用来存放库文件代码 仓库创建完成,得到远程仓库地址,并保存备用 2.创建本地代码库 打开终端,cd到你想创建的文件夹下,使用命令:pod lib ...
随机推荐
- HarmonyOS NEXT仓颉开发语言实战案例:健身App
各位好,今日分享一个健身app的首页: 这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分.重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来 ...
- QQ号码价值评估系统html代码-丢塔网
由于前面刷视频经常刷到有人直播QQ号码价值评估,想着也搞一个玩玩,找了一圈接口好像很多都用不来,下面提供一个自己随便搞得页面,有兴趣的大佬可以完善下 ` QQ号码价值评估系统-在线工具-丢塔网(www ...
- Elastic学习之旅 (3) ES必备基本概念
大家好,我是Edison. 上一篇:快速安装ELK ES都有哪些基本概念 在学习ES时,需要掌握一些必备概念,有了这些基本概念,后续的学习才会轻松.我们可以从下图中了解,ES都有哪些基本概念. 从上图 ...
- git 在C# 中常用的忽略文件配置
.gitignore文件 .vs *.vssscc obj bin /packages *.vspscc */Properties/PublishProfiles *.log 简易的命令行入门教程: ...
- C# 读取类Class注释
https://www.cnblogs.com/shanfeng1000/p/14972515.html 友好的注释能提高代码的可读性,几乎所有的编程语言都支持注释. 在C#中,注释不是可执行代码的一 ...
- 设置div 内容不会换行 显示滚动条
overflow-x: scroll; display: inline-block; white-space: nowrap; 内容不能脱离文档流否则还是会把div 撑开
- android多活动练习--人品计算器
效果图如下: 第二个页面: 显示结果和姓名.性别有关,代码如下: activity_main.xml: 1 <?xml version="1.0" encoding=&quo ...
- 解决Dify的Ollama插件添加模型时保存成功但模型为空的问题
最近组里安排了点调研Dify任务.我跟着基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程一步一步走,前面都挺顺利,但在Dify的Ollama中引入大模型这一步卡住了 ...
- JS兼容性复制剪切板
前言 有时候,navigator.clipboard对象可能会不存在. 因为我们要做一套降级处理! 封装 copy.js function fallbackCopyText(text) { const ...
- Vue 开源项目低代码表单设计器 FcDesigner v3.3 版本发布!兼容Element Plus/Ant Design/Vant,支持PC/移动端
FcDesigner 是一款基于 Vue 的低代码可视化表单设计器工具,通过数据驱动表单渲染.可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间.并广泛应用于在政务系统.OA ...


