CocoaPods (三) 私有库与公共库

2018-05-08  本文已影响54人  LoseAnson洛施安森

这次我们想要创建一个自己的pod库:LAToolLib,使其他开发者也能像安装AFNetworking一样去安装,同时创建一个私有库,只能公司内部使用

公共库搭建

首先我们要现在本地创建一个pod库,在终端命令下执行pod lib create LAToolLib,期间有几个配置需要输入,我们按照下图去配置,具体的这里不进行翻译

命令创建本地库

命令执行完毕后xocde会自动打开工程,工程目录如下图所示


工程目录

可以看到系统已经为我们创建了很多东西,Podfile文件中有这么一行

`pod 'LAToolLib', :path => '../'`

这意思是我们从本地目录的../来进行安装LAToolLib库,这个../是以Podfile所在位置为基准的,我们看一下实际目录

image.png

可以看到Podfile上一级中有一个LAToolLib.podspec的配置文件
我们回到刚才Xocde打开的项目

上图中左上角的LAToolLib.podspec文件就是我们刚才的目录中看到的文件,里面有很配置项,这次我们只关注两个,就是我右下角用红色方框圈出来的两项,我们把s.public_header项前面的#注释掉之后保存。然后把我们已经写好的代码拖到Replace所在文件夹,即LAToolLib/Classes

拖到这里

最终是这样


最终的目录

然后我们测试一下:终端进入到Example目录中执行pod install

执行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服务器上

上传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文件,

项目目录
上一篇下一篇

猜你喜欢

热点阅读