利用CocoaPods创建基于SVN的私有库

CocoaPods简介

CocoaPods是专门为iOS工程提供第三方依赖库的管理工具,通过CocoaPods,我们可以更方便的管理每个第三方库的版本,而且不需要我们做太多的配置,就可以直观、集成和自动化的管理我们项目中使用的第三方库。

CocoaPods将所有依赖的库都放在一个名为Pod的项目下,然后让住工程依赖Pods项目。Pods项目最终会编译为一个libPod-项目名.a的静态库,主项目依赖于这个静态库。

对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次主工程编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。

CocoaPods是用Ruby写的,并由若干个Ruby包(gems)构成的。在解析整个过程中最重要的几个gems分别是:CocoaPods/CocoaPodsCocoaPods/CoreCocoaPods/Xcodeproj

CocoaPods的核心组件

  • CocoaPods/CocoaPods

    这是一个面向用户的组件,每当执行一个pod命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods涉及到的功能,并且还能通过调用所有其他的gems来执行任务。

  • CocoaPods/Core

    Core组件提供支持与CocoaPods相关文件的处理,主要是Podfile和PodSpecs。

  • Podfile

    用于定义项目中所需要使用的第三方库。该文件支持高度定制,你可以根据个人喜好对其做出定制。更多相关信息,请查阅Podfile指南。

  • Podspec

    .podspec描述了一个库怎样被添加到工程中。它支持的功能有:库的名字、描述、源文件、framework、编译选项和所需的依赖库等。

  • CocoaPods/Xcodeproj

    这个gem组件负责所有工程文件的整合。它能够对创建并修改.xcodeproj和.xcworkspace文件。它也可以作为单独的一个gem包来使用。如果你想要写一个脚本来方便的修改工程文件,那么可以使用这个gem。

安装CocoaPods

安装需要用到Ruby,虽然Mac自带了Ruby,不过版本有些老了,最好更新一下

sudo gem update --system

接下来输入系统密码就可以安装了。

因为Ruby的软件源rubygems.org被屏蔽了,所以要更换淘宝源,淘宝源最近也刚刚更换了域名

gem sources --remove https://rubygems.org/
gem sources --add https://gems.ruby-china.com/ 

接下来查看下源路径是否更换了

gem sources -l

image

然后按照命令来更新Ruby就好了

sudo gem update --system

更新完毕,就可以安装CocoaPods了。

sudo gem install cocoapods

安装CocoaPods的svn插件

如果想要创建基于svn的私有库,那么还需要下载一个svn的插件cocoapods-repo-svn。可以通过gem来安装该插件

gem install cocoapods-repo-svn 

该插件的使用也是非常简单,由于是基于cocoapods的插件,所以如果要使用的话,通过pod repo-svn COMMAND即可。

image

创建基于SVN的私有库

首先,在SVN的某一目录中创建一个ComponentLibraries目录,里面包含ComponentProjectsComponentSpecs两个子目录。

ComponentProjects目录存放所有私有库的源代码,而ComponentSpecs存放所有私有库各个版本的.podspec文件文件。

由于所在项目正在准备做组件化,于是这样命名。可根据具体时机情况进行命名。

image

然后我们在ComponentProjects目录中,创建一个文件夹,该文件夹就是一个私有库的工程,例如AlbumTool,如果用Cornerstone创建文件夹,记得勾选上Create"trunk","branchse" and "tags" subfolders。如果不用的话,需要手动创建trunktags目录。

image

创建好之后,目录结构是这样的。

image

这个trunk就是主干路径,也就是我们要把代码放到的地方。接下来,我们checkout目录,然后将我们的第三方库以及测试工程上传即可(没有测试工程也没有问题)。注意一下下图的目录结构,.podspec在trunk的子目录上。

image

接下来,我们通过命令行来创建.podspec文件

#首先要切换到本地工程的trunk目录下
pod spec create AlbumTool

执行命令结束后,该目录会多一个AlbumTool.podspec的文件,打开文件,可以按照提示去编辑,也可以去github上搜一下现有的第三方库,参考一下他们的.podspec是如何写的。

image

.podspec中常用的信息

name:框架名
version:当前版本(注意,是当前版本,假如你后续更新了新版本,需要修改此处)
summary:简要描述,在pod search ZCPKit的时候会显示该信息。
description:详细描述
homepage:页面链接
license:开源协议
author:作者
source:源码git地址
platform:支持最低ios版本
source_files:源文件(可以包含.h和.m)
public_header_files:头文件(.h文件)
resources:资源文件(配置的文件都会被放到mainBundle中)
resource_bundles:资源文件(配置的文件会放到你自己指定的bundle中)
frameworks:依赖的系统框架
vendored_frameworks:依赖的非系统框架
libraries:依赖的系统库
vendored_libraries:依赖的非系统的静态库
dependency:依赖的三方库

最重要的是填写好s.source,可参考下图来设置。

image

填写完毕之后,我们将该库,在svn上创建一个tag,tag值对应.podspec中的tag值。

image

这样我们就可以本地来验证一下.podspec了。

#首先要切换到本地工程的trunk目录下
pod lib lint --allow-warnings

验证通过之后,我们就可以把这个.podspec上传了。

首先呢,先要创建一个私有库

#pod repo-svn add NAME URL
pod repo-svn add ComponentSpecs http://svn/path/ComponentSpces

期间会让输入svn的用户名和密码。添加完毕之后,我们把这个.podspec上传到这个私有库中

pod repo-svn push ComponentSpces

执行完毕,我们会发现SVN多了一条log,同时在ComponentSpecs目录下,多了AlbumTool目录以及其子目录。

image

image

我们也可以打开~/.cocoapods/目录,来查看一下当前本地中存放的所有.podspec文件

image

这样,我们的私有库就制作好了,接下来,我们就需要在需要使用的地方,编辑Podfile文件了。

## 这里是共有第三方库
source 'https://github.com/CocoaPods/Specs.git'
#这里是私有库的地址,需要使用下载的cocoapods-repo-svn插件,
#当其他人需要使用的时候,也需要安装此插件,并且加入这行代码,
#如果仍无法使用,请使用命令行方式添加私有库地址 
#pod repo-svn add ComponentSpecs http://svn/path/ComponentSpces

plugin 'cocoapods-repo-svn', :sources => [
    'http://svn/path/ComponentLibraries/ComponentSpecs'
]

target 'Example' do

  pod 'AlbumTool'

end

编辑完成之后,进入该工程目录,执行

pod install

image

打开工程根目录下的.xcworkspace文件即可。之后就可以#import头文件,使用即可。

如果在这个地方提示无法找到AlbumTool的pod,那么需要重置一下cocoapods的索引即可。

rm ~/Library/Caches/CocoaPods/search_index.json

这样我们的私有库就做好了。同样的原理,我们可以添加其他的私有库。

image

别人也可以添加私有库。当同组其他人添加私有库后,我们需要更新一下源,然后就可以通过pod install命令来集成私有库了。

pod repo-svn update ComponentSpecs

私有库更新

我们需要修复bug,或者对私有库新增一些功能的时候,我们可以像往常一样,去把代码commit到svn上,之后为了能让使用我们私有库的地方都更新,我们需要做一些额外的事情。

  1. 更新.podspec中的s.tag值,假设修改为0.0.2
  2. 将更新commit到svn上
  3. 在SVN上新建一个0.0.2的tag
  4. 执行pod repo-svn push ComponentSpecs命令

当别人再使用的时候,如果他在Podfile中没有指定版本,那么就会pod出最新版本来,当然他也可以选择版本来pod。如果已经集成的我们旧版本的代码,可以通过一下命令来更新到最新的代码

#pod setup
pod update

删除私有仓库

删除私有仓库,需要在SVN上删除ComponentLibraries目录,并且执行命令

pod repo remove ComponentSpecs

总结一下

如果想要创建基于svn的私有库,那么需要先安装cocoa-repo-svn插件。

新建repo

  1. 在SVN上选择好路径,一个文件夹下
  2. 命令行执行pod repo-svn add NAME URL

新建pod

  1. 在svn上新建一个工程的根目录,带上trunktags子目录
  2. 在trunk目录上编写私有库代码,上传
  3. 创建.podspec文件,其中s.source路径为svn上工程的根目录,s.tag自行命名
  4. 修改后的代码commit到svn中
  5. 创建一个tag,名称与.podspec中的一致
  6. pod lib lint来验证本地源
  7. pod repo-svn push RepoName

pod发新版本

  1. 修改.podspec文件中s.tag为新的名称
  2. 修改后的代码commit到svn中
  3. 创建新的tag,名称与.podspec中的一致
  4. 执行pod repo-svn push RepoName命令,来上传新版本的.podspec文件

更新repo

  1. pod repo-svn update RepoName

集成pod

  1. 编写Podfile文件,其中加入
source 'https://github.com/CocoaPods/Specs.git'
plugin 'cocoapods-repo-svn', :sources => [
    'http://svn/path/ComponentLibraries/ComponentSpecs'
]
  1. 在需要的target上写上pod XXX及版本(如果需要版本)。
  2. 命令行执行pod install

更新pod

  1. 命令行执行pod repo update RepoName

删除repo

  1. 删除svn上repo的目录
  2. 执行pod repo remove RepoName命令
发布了71 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/TuGeLe/article/details/83151636