这次我们想要创建一个自己的pod库:
LAToolLib
,使其他开发者也能像安装AFNetworking
一样去安装,同时创建一个私有库,只能公司内部使用
- 本次使用Github作为我们的仓库源实现公共库
- 本次使用内网SVN做为我们的仓库源实现私有库
- 本次不关注LAToolLib的功能,
公共库搭建
首先我们要现在本地创建一个pod库,在终端命令下执行pod lib create LAToolLib
,期间有几个配置需要输入,我们按照下图去配置,具体的这里不进行翻译
命令执行完毕后xocde会自动打开工程,工程目录如下图所示
工程目录
可以看到系统已经为我们创建了很多东西,Podfile
文件中有这么一行
`pod 'LAToolLib', :path => '../'`
这意思是我们从本地目录的../
来进行安装LAToolLib
库,这个../
是以Podfile
所在位置为基准的,我们看一下实际目录
可以看到Podfile上一级中有一个LAToolLib.podspec
的配置文件
我们回到刚才Xocde打开的项目
上图中左上角的LAToolLib.podspec
文件就是我们刚才的目录中看到的文件,里面有很配置项,这次我们只关注两个,就是我右下角用红色方框圈出来的两项,我们把s.public_header
项前面的#
注释掉之后保存。然后把我们已经写好的代码拖到Replace
所在文件夹,即LAToolLib/Classes
下
最终是这样
最终的目录
然后我们测试一下:终端进入到Example
目录中执行pod install
再看一下刚才的工程,会发现多了我们刚才加入的两个文件
刚才的文件出来了
上传私有库到Github
我们先用pod lint
命令对我们的库进行测试
PS:进行本次试验执行,系统已经使用GitHub的校验,绑定了账号
PS:红色圈出来的地址和我们上面在
LAToolLib.podspec
文件中的s.source
是对应的提示库地址不可连接,其实原因是我github账号下面没有
LAToolLib
这个库
于是需要去github中创建这个库
image.png
接下来就需要把自己的工程推送到Github:
git remote add origin https://github.com/pengka/LAToolLib.git
git add .
git commit -m "Initial Commit"
git push -u origin master
再次用`pod lint命令对我们的库进行测试
测试成功
选择还没有把我们的库加入到cocoapod
的远程索引库,其实这是时候想要用LAToolLib库的话可以再Podfile文件中加入
`pod 'LAToolLib', git: 'https://github.com/pengka/LAToolLib'`
再pod install
就可以了
同步到cocoapod远程索引库
要想我们的库能用pod search
搜索到,必须将我们的库加入到cocoapod
的远程索引库中
在这之前我们要调用pod spec lint
命令去验证一下我们的库
发现一个错误,两个警告。警告这里我们暂时先不处理。
找到配置文件中的s.source
,顺便把s.homepage
一起改对
然后把podspec
文件提交到github
(过程略)
再验证一下
再次验证
貌似是说我们的库没有分支,好吧 。创建之
创建分支并上传
再试一次验证 ,这次带上--allow-warings
忽略警告
接下来要去cocoapod
注册我们的信息,调用pod trunk register
命令,第一个命令完成后要去我们的邮箱点击链接进行验证,验证过后终端调用pod trunk me
会显示我们的注册信息
最后调用pod trunk push LAToolLib.podspec --allow-warings
(不加--allow-warings
会失败)把我们的库同步到远程的索引库,这样才能调用pod search
指令搜索到我们的库
这时进行pod search
其实还是搜索不到我们的库
删除本地索引文件
rm ~/Library/Caches/CocoaPods/search_index.json
再进行pod setup
最后搜索我们的库pod search LAToolLib
┭┮﹏┭┮ 天啊终于成功了!
发布新版库
我们维护自己的代码库的时候,肯定也是有一个版本迭代的过程,比如我们给这个库加了一个功能,那么我们就要再发布一个版本。
现在比如我们的LAToolLib
要发0.2.0版本了,那么怎么操作呢?
首先,要修改LAToolLib.podspec
文件中的版本信息
然后创建分支0.2.0,并上传到
github
上传分支
pod spec lint
验证(略)再用
pod trunk push
上传配置到远程索引库中上传配置
然后
pod search
就能找到我们库的新版本搜索新版
私有库
公共库弄完后,我们再说私有库。
一般在我们开发过程中,有些东西可能不想开源,只能公司内部使用,那么前面的公共库就不符合我们的需求了。
在说私有库之前先让我们了解一下Pod库的下载原理
pod库下载原理
其实说白了,pod库安装就是一个找podspec文件,解析文件下载源码的过程
从本地安装
我们上面的LAToolLib
刚创建的时候Example
里面的podfile
是通过这种方式安装的
`pod 'LAToolLib', :path => '../'`
再执行pod install即可,这种pod库的下载原理是这样的
1. 如果pod本地的库索引还未创建,那么会先执行pod setup同步远程索引
2. pod install执行执行时找到`LAToolLib`指向的路径,这里是在podfile文件的向上两级
3. 从路径指向的目录中找到`LAToolLib.podspec`
4. 解析`LAToolLib.podspec`,创建**.xcworkspace文件,把引用到的源码文件引用到我们的工程中
注意,这里的源码没有复制到项目的pods文件夹下
从cocoapod索引安装
在上面的LAToolLib
上传到自己的GitHub
后,又将LAToolLib.podspec
上传到cocoapod
的远程索引库。之后我们要使用LAToolLib的话,只用在我们项目的Podfile中加入
pod 'LAToolLib', '~> 0.2.0'
再执行pod install即可,这种pod库的下载原理是这样的
1. 如果pod本地的库索引还未创建,那么会先执行pod setup同步远程索引
2. pod install执行执行时找到Podfile中要下载的库和对应版本,这里是`LAToolLib`,版本是0.2.0
3. 从本地索引中寻找`LAToolLib`且版本为0.2.0的`podspec`,如果找不到则提示错误
4. 分析`podspec`,找到其中的`source`配置的地址,从改地址中下载需要的源码到项目的`pods`文件夹里面
这种方式需要将我们的podspec上传到cocoapod
的远程索引库,且所有人都能搜索到并且使用
公共库安装
或者你如果用这种方式安装的话
`pod 'LAToolLib', git: 'https://github.com/pengka/LAToolLib'`
这时的pod库下载原理是这样的
1. 如果pod本地的库索引还未创建,那么会先执行pod setup同步远程索引
2. pod install执行执行时找到Podfile中要下载的库和对应地址,这里是`LAToolLib`,地址是`'https://github.com/pengka/LAToolLib'`
3. 从`https://github.com/pengka/LAToolLib`库中找到`LAToolLib.podspec`
4. 分析`podspec`的配置把需要的文件代码下到项目的`pods`文件夹里面,并创建**.xcworkspace文件
很明显,这种方式下载pod库不用去本地库中去搜索。也就是说我们不用将我们的库同步到cocoapod的远程索引库中。
这种方式没有将我们的podspec上传到cocoapod
的远程索引库,别人搜索不到,但是别人如果知道我们的github地址,还是可以使用我们的源码
用这种方式再加上我们内网的git或svn版本控制器就可以使用创建我们自己的私有库。
PS:其实外网的第三方的git或者svn也是可以的,不过应该没有哪个公司愿意把自己的闭源代码放到别人的网站上托管吧。
本地SVN搭建私有库
这里我们仅在本地SVN上搭建私有库
我们把上面LAToolLib
整个目录上传到我们自己的SVN
服务器上
这里注意podspec的文件在
svn://192.168.0.120/LAToolLib
下,我们记下这个路径在我们自己项目的podfile文件中加入这句
pod 'LAToolLib',:svn =>'svn://192.168.0.120/LAToolLib'
然后再执行pod install
,然而失败
pengkadeMac:PodTest pengka$ pod install
Analyzing dependencies
Pre-downloading: `LAToolLib` from `svn://192.168.0.120/LAToolLib`
[!] Error installing LAToolLib
[!] Failed to download 'LAToolLib'.
其实原因是SVN都带有权限验证的,我们第一次执行pod install
去SVN去下源码,连验证信息都没有,这怎么可能,于是在终端尝试了一下用svn log
命令先把用户名密码带进去
svn log svn://192.168.0.120/LAToolLib --username anson --password 123456
然后再pod install
,这次妥妥的成功了。
pengkadeMac:PodTest pengka$ pod install
Analyzing dependencies
Pre-downloading: `LAToolLib` from `svn://192.168.0.120/LAToolLib`
Downloading dependencies
Installing LAToolLib (0.2.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `PodTest.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
安装好的目录是这样的,可以看到Pods下已经有了我们的LAToolLib
库
pengkadeMac:PodTest pengka$ tree ./Pods -L 2
./Pods
├── Headers
│ ├── Private
│ └── Public
├── LAToolLib
│ ├── LAToolLib
│ ├── LICENSE
│ └── README.md
├── Local\ Podspecs
│ └── LAToolLib.podspec.json
├── Manifest.lock
├── Pods.xcodeproj
│ ├── project.pbxproj
│ └── xcuserdata
└── Target\ Support\ Files
├── LAToolLib
├── Pods-PodTest
├── Pods-PodTestTests
└── Pods-PodTestUITests
13 directories, 5 files
然后打开xcworkspace
文件,
网友评论