CocoaPods公有库、远程私有库、本地私有库的使用整理

1.CocoaPods 的安装

<已经了解CocoaPods的同学请直接跳到第3步或第4步>

1.1 作用:

帮助管理和维护第三方框架,快速的搜索到第三方框架, 然后自动集成到工程里面来, 并编译成一个libPod.a的静态库给我们项目用.

1.2 理解:

1.2.1 什么是gem

        Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。

1.2.2 常用命令

        $ gem --version (查看gem版本)

        $ gem update --system(更新gem)

        $ gem sources(查看数据源)

        $ gem sources --remove https://rubygems.org/(删除数据源)

        $ gem sources -a https://ruby.taobao.org/(添加数据源)

        $ gem search 软件包关键字(搜索软件包)

        $ gem install 软件包名称(安装软件包)

        $ gem install cocoapods --pre(安装上一个版本软件包)

        $ gem uninstall 软件包名称(卸载安装包)

        注意: 以上命令最好在使用之前, 都添加sudo,代表以管理员身份运行该命令,因为有可能安装软件包的过程当中, 需要创建文件等等, 必须有管理员权限才能操作。

1.3 安装:

$ sudo gem install cocoapods

执行完这句如果报告以下错误: 

        ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why: Unable to download         data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out connect(2) (https://rubygems.org/latest_specs.4.8.gz)

        ERROR: Possible alternatives: cocoapods 

则需要更新一下ruby的源: 

        $ gem sources  (查看当前ruby的源)

        $ gem sources --remove https://rubygems.org/ (删除数据源)

        $ gem source -a https://gems.ruby-china.com/    //最新

如果gem太老,可以尝试用如下命令升级gem: 

        $ sudo gem update --system(注解: sudo 是以超级管理员的身份操作)

        升级成功后会提示: RubyGems system software updated 

然后重新执行安装下载命令 

        $ sudo gem install cocoapods

可能会报错,出现以下问题:ERROR:  While executing gem ... (Gem::FilePermissionError)

    You don't have write permissions for the /usr/bin directory.

建议使用下面的方法进行安装:

        $ sudo gem install -n /usr/local/bin cocoapods --pre //最新版本

        或着 sudo gem install -n /usr/local/bin cocoapods -v (版本号) //指定安装 cocoapods的版本

        验证成功:$ pod --version

        接下来进行安装,执行: 

        $ pod setup

升级到10.11, CocoaPods报错: command not found, 解决方案:

        $ sudo gem update --system

        $ sudo gem uninstall cocoapods

        $ sudo gem install -n /usr/local/bin cocoapods

        随后如果出现下列错误

        [!] An error occurred while performing `Git pull` on repo `master`.

        [!] /usr/bin/git pull --ff-only

        原因: Cocoapods的分支不支持当前最新的Xcode版本

        解决办法: 删除master分支 重新建立新的分支

        $ sudo rm -fr ~/.cocoapods/repos/master

        $ pod setup




2.CocoaPods 的简单使用

2.1 步骤

    1> Xcode新建一个项目,名字Test

    2> 终端中,cd到项目总目录(注意:包含Test.xcodeproj的那个目录)

    3> 执行命令 $ pod init 或者 $ vim Podfile 建立Podfile配置文件

    4> 打开podfile文件,不要选择文本编辑打开方式,选择Xcode打开,编辑文件如下

   5> 执行 $ pod install 现在打开项目不是点击 Test.xcodeproj了,而是点击 Test.xcworkspace

2.2 说明

        生成的重要文件Podfile.lock 用来记录着上一次下载的框架版本

2.3 pod install 和 pod update 区别

        install  如果Podfile.lock文件存在, 直接从此文件中读取框架信息下载安装,如果不存在, 依然会读取Podfile文件内的框架信息。

        update 不管Podfile.lock是否存在, 都会读取Podfile文件的的框架信息去下载。主要区别在于, Podfile文件内的框架信息, 版本描述没有指定具体版本。




3.创建CocoaPods远程公有库

3.1 注册CocoaPods账户信息

        想要创建一个开源pod库, 首先我们需要注册CocoaPods, 这里使用trunk方式, 作为一个iOS开发人员你一定安装了CocoaPods, 那么只需要在终端执行:

$ pod trunk register 邮箱地址 '用户名' --verbose

        这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功, 成功之后可以终端执行:    

$ pod trunk me

        查看自己的注册信息, 以后当你有了自己的开源Pod库, 也可以用此方式随时查看自己发布过的Pods。

3.2 创建共享库文件并上传到公有仓库

共享库需要三个必不可少的部分:

A. 共享文件夹 (文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);

B. LICENSE文件 (开源许可证,默认一般选择MIT);

C. 库描述文件.podspec (本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库)。

这一步分两种情况:

A.如果你已经有了现成的想要共享的文件,你只需要满足上面三个部分,即可上传到公有仓库即可继续其他的步骤;

B.你想要创建一个全新的工程去做自己的共享, 可以先从远端clone一个新项目,使用终端命令:

$ pod lib create 库名

然后根据需要选择各项配置后创建一个标准的工程,将代码上传到公有仓库。

3.3 创建并编辑.podspec文件

.podspec 是用 Ruby 的配置文件,描述你项目的信息。

在你的仓库目录下,使用终端命令创建:  

$ pod spec create 文件名称

修改podspec文件内容:

Pod::Spec.new do |s|

  s.name            = 'JFPhoneNumTFLib'

  s.version          = '0.1.1'

  s.summary          = 'JFPhoneNumTFLib.'

  s.homepage        = 'https://github.com/MichealFan/JFPhoneNumTFLib'

  s.license          = { :type => 'MIT', :file => 'LICENSE' }

  s.author          = { 'lannikeng' => 'lannikeng@163.com' }

  s.source          = { :git => 'https://github.com/MichealFan/JFPhoneNumTFLib.git', :tag => s.version.to_s }

  s.ios.deployment_target = '8.0'

  s.source_files = 'JFPhoneNumTFLib/Classes/**/*'

  # s.resource_bundles = {

  #  'JFPhoneNumTFLib' => ['JFPhoneNumTFLib/Assets/*.png']

  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'

  s.frameworks = 'UIKit', 'Foundation'

  # s.dependency 'AFNetworking', '~> 2.3'

end

           值得注意的是:podspec文件中的homepage和source不支持ssh协议地址,所以我们得放入http/https地址。

           编写完成后, 我们需要验证.podspec文件的合法性, 这里需要终端cd到.podspec文件所在文件夹, 执行:

$ pod lib lint JFPhoneNumTFLib.podspec

        如果遇到警告的话,我们需要加上在后面 --allow-warnings

        如有其他错误请重新检查你的编写正确性, 如果没有问题会出现:

-> JFPhoneNumTFLib (0.1.1)

JFPhoneNumTFLib passed validation.

3.4 给仓库打tag标签, 发布一个release版本

        验证成功后,将仓库提交到远程,然后给仓库打上标签并将标签也推送到远程。

        标签相当于将你的仓库的一个压缩包,用于稳定存储当前版本。标签号与你在.podspec文件中 s.version = "0.1.1"的版本号一致。这里你可以在你的git仓库中的releases一项去手动发布, 也可以在当前文件夹下使用终端命令:

$ git tag -m 'first release' '0.1.1'

$ git push --tag #推送tag到远端仓库

3.5 发布自己的库描述文件podspec给cocoapods

        发布项目的描述的文件 JFPhoneNumTF.podspec

        同样在这个文件夹下, 终端执行:

$ pod trunk push JFPhoneNumTF.podspec

将你的.podspec发布到公有的specs上,这一步其实做了很多操作,包括

        1> 更新本地 pods 库~/.cocoaPods.repo/master

        2> 验证.podspec格式是否正确

        3> 将.podspec文件转成 JSON 格式

        4> 对master仓库 进行合并、提交.master仓库地址

成功后将会出现下列信息:

Updating spec repo`master`

Validating podspec -> JFPhoneNumTF (0.1.1)

Updating spec repo`master` 

3.6 使用仓库

发布到Cocoapods后,在终端更新本地pods仓库信息

$ pod setup

查询仓库

$ pod search JFPhoneNumTF

若出现仓库信息说明已经成功了,这时候你就可以在 Podfile 添加、使用自己的仓库了 pod 'JFPhoneNumTF', '~> 0.1.1'

3.7 更新维护

当你的代码更新维护后,就需要重写发布,流程是:

1> 更新JFPhoneNumTF.podspec中的版本号

2> 打上tag标签推送远程

3> pod trunk push JFPhoneNumTF.podspec 推送到pods仓库




4.创建CocoaPods远程私有库

4.1 创建添加版本库(repo),远程索引库

        首先,创建一个像 master 一样的存放版本描述文件的git仓库,因为是私人git仓库,我们选择 oschina 创建远程私有仓库(因为是免费的)或者也可以在GitHub上创建($7/month)

        创建版本描述仓库后,回到终端,将这个远程的私有版本仓库添加到本地,repo 就是 repository 储存库的缩写。

$ pod repo add MySpecRepo https://git.oschina.net/JMicheal/MySpecRepo.git

        查看在 Finder 目录 ~/.cocoapods/repos, 可以发现增加了一个 MySpecRepo 的储存库。

4.2 创建代码库

        回到 oschina 创建私人代码库,创建时添加 MIT License 和 README。

        将仓库克隆到本地,添加你的代码文件、仓库名.podspec 描述文件,还有.swift-version。

        .swift-version文件用来知道swift版本,用命令行创建:

        $ echo "3.0" > .swift-version```

        这里我要说一下一个坑,用 oschina 创建私人仓库时, 在验证时可能会找不到 MIT LICENSE证书,将其中的

        s.license = "MIT"

修改为,指定文件

        s.license      = { :type => "MIT", :file => "LICENSE" }       

        验证podspec文件

        $ pod lib lint 验证本地连接

        $ pod spec lint 验证远程连接

        与公有库的创建方式一样, 验证成功之后push到仓库, 然后打tag发布release版本。一般出现错误警告,需要添加 --private 或者 --allow-warnings,就可以通过验证。

4.3 将描述文件podspec推送到私有Sepc repo版本库中

        公有库使用trunk方式将.podspec文件发布到CocoaPods/Specs, 内部的pod组件库则是添加到我们第一步创建的私有Spec repo中去, 在终端执行:

$ pod repo push MySpecRepo xxxx.podspec

        这时会对远程仓库进行验证,成功的话就会在 ~/.cocoapods/repos/MySpecRepo 中发现新增的仓库描述信息了。过程为以下几步:

        1> 验证 xxxx.podspec 文件

        2> 拉取远程版本库 MySpecRepo

        3> 添加 xxxx.podspec 到版本库中

        4> push 到远程

若是出现错误信息:

[!] The repo `MySpecRepo` at `../.cocoapods/repos/MySpecRepo` is not clean

更新下我们的版本库,

$ pod repo update MySpecRepo

再继续上传即可。

添加完成后我们就可以在pod中搜索 $ pod search xxxx

4.4 私人pod库的使用

使用私人pod库的需要在Podflie中添加这句话,指明你的版本库地址。

source ‘https://git.oschina.net/JMicheal/MySpecRepo.git’

**注意**是版本库的地址,而不是代码库的地址

若有还使用了公有的pod库,需要把公有库地址也带上

source ‘https://github.com/CocoaPods/Specs.git’

执行 $ pod install 可以看到代码已经整合到我们的项目中了。



5 创建CocoaPods本地私有库

5.1 创建本地库

5.2 创建podSpec文件

podspec文件其余都与前两种情况类似,仅仅是把本地库的source链接地址可以去掉,改为:

s.source = { :git => "", :tag => "#{s.version}" }

5.3 验证podspec文件

5.4 创建测试工程,并创建Podfile文件,进行安装本地库

path指向本地文件的相对路径即可:

pod 'xxxx',:path => '../Lib/xxxx'

执行 $ pod install 安装。

这篇文章讲的也很简洁全面-->

其他相关文章:

Cocoapods私有库可能遇到的坑-->

推荐阅读更多精彩内容