一、CocoaPods简介
CocoaPods对于每一名iOS开发者来说再熟悉不过了,是一个可以轻松解决第三方依赖库的工具,安装方法和基本指令在此不赘述了,本文简介的是CocoaPods管理基本原理及设计打造项目组件私有仓库。简单说就是在GitHub上面有个Spec Repo,它里面包括成千上万的podspec文件索引目录。然后我们在项目集成的时候可以通过它去找到我们需要的开源代码和自动进行相关配置。
第一次安装的时候会下载CocoaPods到本地。
Setting up CocoaPods master repo
$ /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress
Cloning into 'master'...
remote: Counting objects: 1301071, done.
remote: Compressing objects: 100% (169/169), done.
Receiving objects: 98% (1275050/1301071), 396.42 MiB | 559.00 KiB/s
安装过程中其中一步就是Clone这个标准仓库,我们简称master repo。存放在这个repo中的项目是均开源的,任何根据模块地址寻找到项目都是可下载的。我们把podspec文件上传给CocoaPods的master上,当别人配置好CocoaPods就会把我们的podspec.json下载到~/.cocoapods/repos/master/下,用户要使用Alamofire查找本地~/.cocoapods/repos/master/ 找到这个Alamofire.podspec.json文件根据内容下载配置。
二、模块说明书(.podspec文件)
本文以Alamofire开源库为事例介绍 CocoaPods管理项目所需文件。CocoaPods根据模块说明书管理来定位项目地址。
为项目创建一个spec文件,在终端执行👇命令会生成一个test.podspec文件,实际创建该文件要保持模块说明书名称和库名称一致。
$ pod spec create test
podspec文件其中最为重要的项为tag和source,因为podspec文件中根据Git版本控制的项目需要tag。模块说明书详细配置请移步官方说明查看,里面写的很清楚,还有更多进阶配置方法,也不作为本文重点。CocoaPods同时提供另外一条指令,通过创建一个Xcode的workspace来将Demo工程和我们的Pods工程连接起来,供我们开发使用。👇
$ pod lib create TestLib
当库开发完成准备发布之前,需要检查.podspec是否符合规范的,pod lib lint 和 pod spec lint 均可验证,不同之处是前者无需网络,而后者将验证其他库和库tag值相关问题。当存在任意error或者warning均不能通过验证,--allow-warnings允许忽略警告,--verbose展示验证过程详细信息,当通过Pass Validate,表面库配置成功可以发布。
$ pod lib lint --allow-warnings --verbose
三、Trunk服务
但是我们如果是第一次在这台电脑发布代码库,需要为当前电脑注册trunk,为后面发布Pod做准备。
官网示例 :$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
$pod trunk register lirui050716@163.com 'Serena_R'
之后你注册的邮箱将会收到一封注册邮件,根据提示注册。在pod spec lint 过程通过之后就可以发布啦。如果是开源库发布,会将配置文件提交到CocoaPods Master Repo。
$ pod trunk push NAME.podspec
也可以提交到指定私有仓库。
$ pod repo push REPO [NAME.podspec]
三、创建私有 Spec Repo
# The CocoaPods Master Repo
This repository contains the public [CocoaPods](https://github.com/CocoaPods/CocoaPods) specifications.
言归正传,进入本文正题 ~
CocoaPods提供为私有Repo集成库的功能,按照上面的理解,我们如果能自己创建一个类似CocoaPods的Specs Repo,把仓库地址部署到你想允许访问成员均可访问的地址(有点拗口),一般为公司内网地址,或者Private地址,既能保持外界绝对隔离访问,又使内部人员可以访问。然后把我们公共组件的podspec文件通过pod trunk服务更新到私有repo上,就能达到利用CocoaPods管理pod组件的目的。为演示过程,远端地址部署为github地址,实际设计过程应该为公司私有git服务器地址。
上传到自己的Repo的好处之一就是由于github访问速度十分不稳定(泪目),更新速度会比较慢,如果迁移到国内代码托管服务器上速度会大大提升,推荐开源中国码云。
首先在远端git服务器创建仓库并和本地关联,然后添加私有Repo:
$ pod repo add REPO_NAME SOURCE_URL
$ pod trunk push NAME.podspecpod repo push myPrivateRepo TestLib.podspec
使用时在项目的Podfile中加上下面两句就可以了。
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Serena1993/myPrivateRepo'
参考资料: