CocoaPods(二) 私有库

CocoaPods库的种类

创建一个其他人用pod也能够搜索到的库。这种库分为两种:一种是公有的,所有人都能访问到;一种是私有需要Podfile中提供source才能使用。
下面是创建私有库的原理图

CocoaPods私有库原理图.png

想要创建私有库,首先要搞清楚CocoaPods的原理,其功能是让创建一个工程导入所有项目需要依赖的库,然后让项目依赖这个工程。这样项目只需要导入这一个工程,就能使用所有需要的第三方库。简化了项目的集成的复杂性。详细的原理可以参考这篇文章

创建私有库

首先要选择一个位置用来存放podspec文件,该文件的作用就是记录你的私有库的信息,包含版本、位置等。
另外还要有一个位置来存放私有库的内容,私有库存放位置信息就被保存在上面的podspec文件中。
所以一共会有两个仓库,一个用来保存podspec,另一个用来保存私有库。
提供仓库保存的平台有很多,github、gitlab、码云等等,由于github私有仓库收费,故用码云来创建私有库。但原理都是一样的。

1.创建版本记录仓库

码云创建版本描述仓库

创建成功之后,打开terminal把这个描述仓库clone到本地。安装了CocoaPods的电脑都会在用户根目录下创建一个.cocoapods文件夹,来存放github上面所有的公开库记录仓库。repos下本来只有master文件夹,另外两个是创建的记录仓库。

cocoapods本地目录

执行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git指令将记录仓库添加到本地电脑。

添加记录仓库后的repo目录

打开目录发现里面只有两个文件,.git隐藏文件夹和README.md文件。

2.创建代码库

创建用来测试的代码库

步骤同创建描述仓库相同,不过需要按照图中勾选几项。创建好之后将其clone到本地,添加仓库名.podspec.swift-version(针对swift)两个文件。

clone代码库

添加一个TestClass类测试私有库。使用下图的指令把内容上传到私有库。非常重要的一点是完成对TestClass的修改之后,千万不要忘记去修改.podspec文件中的s.version,要设置高于0.1.0这个版本。当然如果有想要描述的内容,也要在描述项目中去添加。

将添加的文件上传到私有库中

完成之后还有一步很重要的操作:添加tag.

给版本添加tag

tag值与上传的.podspec文件中s.version保持一致,tag值是用来区分同一个私有库不同的版本的。

2.2编辑.podspec文件

上面clone代码库的图片中,包含了一个指令创建的podspec文件注释内容非常多,可以复制下面的内容来创建。

Pod::Spec.new do |s|
s.name = "TestFramework" # 项目名称
s.version = "0.1.0" # 版本号 与 你仓库的tag值对应
s.license = "MIT" # 开源证书
s.summary = "私人pod代码" # 项目简介
s.homepage = "https://gitee.com/zhouzheren/TestFramework" # 仓库的主页
s.source = { :git => "https://gitee.com/zhouzheren/TestFramework.git", :tag => "#{0.1.0}" }#你的仓库地址,不能用SSH地址
s.source_files = "TestFramework/*/"
s.requires_arc = true # 是否启用ARC
s.platform = :ios, "7.0" #平台及支持的最低版本
s.author = { "蜗牛" => "a595429717@163.com" } # 作者信息
s.social_media_url = "http://www.jianshu.com/u/611e4882e4dc" # 个人主页
end

pod spec create TestFramework命令可以创建TestFramework.podspec文件,但注释比较的多,可以精简为上面的内容。

名称 作用
s.name 是私有库的名字,因为写的Demo是TestFramework,所以使用这个
s.version 当前私有库版本默认值是0.1.0,每次修改私有库都需要增加这个值
s.summary 总结,你的私有库的主要功能是什么
s.description 详细的描述,可以写当次修改的内容有哪些,增加了什么功能
s.source_files 私有库文件路径,会用到哪些文件
s.homepage 是主页的地址,私有库的主页地址
s.source 私有库内容clone地址

pod lib lint指令可以测试编辑的.podspec文件是否正确。使用这个命令先要cd到.podspec目录。提示了错误就要根据提示内容修改,当修改到没有error信息只有warning信息的时候就可以使用pod lib lint --allow-warnings指令。

测试.podspec文件是否合法

绿色文字表示.podspec文件是合法的,这就算编辑完成了。可以将.podspec文件上传到描述仓库。

上传podspec文件

testRepo是在.cocoapods文件夹里的目录,TestFramework.podspec版本描述库文件的名字。
.podspec文件上传完毕之后,可以使用pod search 私有库名字在终端搜索这个库。

3.使用私有库

首先要编辑Podfile的内容,使用了私有库的Podfile需要指定source,详情见下图。

使用了私有库的Podfile文件的内容

然后cd到对应的工程目录下,使用pod install,安装完成pod之后,可以去工程中调用对应的测试文件。如果使用#import不到对应的类,可以尝试先cmd+b编译一下对应的项目,然后再来#import。

4.如果更新维护私有库

第一步:修改私有库内容,修改.podspec文件;将这些修改push到私有库中。
第二步:打上tag,tag值保持和.podspec中的version相同,上传tag。
第三步:利用pod repo push 本地repo名 .podspec文件指令更新本地repo,同时上传.podspec文件到描述仓。
如果希望把别人更新的repo拉到本地,可以使用pod repo update repo名字命令。

tips

1.pod install 之后,测试私有库内容的时候,使用#import不到对应的类,可以先cmd +b 编译一下项目。

2.podspec文件上传了两次,一次是修改私有库的时候,修改.podspec,然后一起上传到私有库中;另一次是给私有库打上tag之后,将.podspec上传到描述仓库。

  1. 每次修改完.podspec文件之后,使用了私有库的项目需要执行pod update,这样才能拿到最新的私有库内容。当然如果Podfile文件中指定了引用私有库的版本,就不需要update了,除非修改Podfile文件然后updata。

4.多人协同维护私有库时,更新本地私有库的repo,pod repo update repo名字

如何删除一个私有库呢?
私有库如何包含图片等资源文件?
私有库包含其他私有库?

问题集合

帮同事上传.podspec的时候出现这个错误。

pod repo push 问题

我的步骤是先帮他打出framework,并把库放到一级目录下面,然后修改.podspec文件中的版本号到0.1.1,然后把所有的内容push到代码库中并贴上tag0.1.1。
之后忽然发现s.ios.vendored_frameworks = "ZLLBanner.framework"少了一个下划线,应该是s.ios.vendored_frameworks = "ZLL_Banner.framework"。重新修改了.podspec文件并push。

pod lib lint成功,但Push失败

怀疑是贴上tag之后,又传了代码导致的问题。于是撤销0.1.1的tag。在最新的一次提交上贴tag。最后就成功了。

.podspec文件push成功
常用命令集合
name function
git clone 私有库地址 将server上的仓库复制到本地电脑上
pod repo add repoName podspec地址 在.cocoapods目录下增加一个repo
echo "3.0" > .swifit-version 创建一个.swift-version文件,swift版本是3.0
pod spec create name.podspec 创建一个name.podspec文件
git add . 将当前目录下所有的修改都添加到git缓存
git commit -s -m "commit description " commit这次的修改,并添加描述
git push origin master 将修改的内容push到server的master分支上
git tag 查看当前目录的所有tag记录
git tag -m "description " "version" 给修改增加一个tag,包含描述信息,和tag的版本号
git push --tags 将tag push到server仓库里
pod lib lint (--allow-warnings) 编译name.podspec文件,检验内容是否合法
pod repo push repoName name.podspec 上传name.podspec文件到描述仓库里,并更新本地repo目录
pod search 私有库name 查询私有库信息
pod install 为项目安装cocoapods
pod outdated 查看本地项目中所有已安装的库的版本
pod repo update repoName 更新本地私有库的repo
参考资料

CocoaPods 私有仓库的创建(超详细)
实现CocoaPods的subspec分支功能
使用Cocoapods创建私有podspec
Cocoapods使用私有库中遇到的坑
使用私有库中遇到的坑
使用Cocoapods创建私有podspec

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容