iOS计算机技术一锅炖iOS备忘录

CocoaPods:你想要的都在这

2016-07-29  本文已影响945人  南楊

CocoaPods 入门

什么是 CocoaPods

CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。

Cocoapods意义体现在两个方面。第一,在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc配置等。第二,使用CocoaPods可以很方便地查找新的第三方库, 更新类库也是支持一键更新,免除更新时的繁琐操作。

英语能力较好者传送门:CocoaPods官方文档

CocoaPods 的核心组件

CocoaPods是用Ruby写的,并划分成了若干个Gem包。
CocoaPods在解析执行过程中最重要的几个包。
其路径分别是:CocoaPods/CocoaPods、 CocoaPods/Core和 CocoaPods/Xcodeproj。 
CocoaPods/CocoaPod

这是面向用户的组件,每当执行一个pod命令时,这个组件将被激活。它包括了所有实用CocoaPods的功能,并且还能调用其他gem包来执行任务。

CocoaPods/Core

Core gem提供了与CocoaPods相关的文件(主要是podfile和podspecs)的处理。

CocoaPods/Xcodeproj

这个包负责处理工程文件,它能创建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作为一个独立的包使用,当你要编写修改项目文件的脚本时,可以考虑使用CocoaPods/Xcodeproj。

Podfile

该文件用于配置项目所需要的第三方库,它可以被高度定制。

Podfile.lock

当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,Podfile.lock应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致

Podspec

该文件描述了一个库将怎样被添加进工程中。.podspec文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。

CocoaPods 安装(以下步骤都是终端操作)

1、升级Ruby环境

输入:gem update --system

如果出现:

ERROR:  While executing gem ... (Gem::FilePermissionError)
 
You don‘t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

则输入:sudo gem update —system

2、替换镜像路径
原镜像路径是https://rubygems.org/,由于被墙了下载安装会炒鸡慢,所以替换成淘宝的Ruby镜像会快很多。

步骤(1):gem sources --remove https://rubygems.org/

步骤(2):gem sources -a https://ruby.taobao.org/

今年的淘宝Ruby镜像路径用了Https,如果使用原来的http路径则要替换,不然会出现如下错误:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
      Unable to download data from http://ruby.taobao.org/ 
      - bad response Not Found 404 (http://ruby.taobao.org/latest_specs.4.8.gz)

可以输入gem sources -l查看是否替换成功

3、安装

步骤(1):sudo gem install cocoapods

步骤(2):pod setup

CocoaPods 使用

步骤(1):cd 项目路径,只到项目的一级路径即可,如cd /Document/Work/Demo

步骤(2):pod init

步骤(3):编辑Podfile文件,可用文本编辑器打开也可用vim,添加需要的第三方类库。

格式一般为`pod 'AFNetworking', '~> 2.6.0'`,放在`target 'Demo' do`与对应的end之间。
如果只是用`pod 'AFNetworking'`则会使用最新的版本。

参考格式:

# platform :ios, ‘7.0’

target 'Look' do
    pod 'MJRefresh'
    pod 'SDWebImage', '~> 3.7.3'
    pod 'AFNetworking', '~> 2.6.0'
    pod 'SVProgressHUD', '~> 1.1.3'

    # Pods for Look

    target 'LookTests' do
        inherit! :search_paths
        # Pods for testing
    end

    target 'LookUITests' do
        inherit! :search_paths
        # Pods for testing
    end
end

步骤(4):pod install,执行这一步会比较久,因为需要下载相应的类库

安装完成后应该打开Demo.xcworkspace而不是Demo.xcodeproj了。

其他技巧或问题解答

Tip1、 pod search AFNetworking:如果CocoaPods支持,将会输出搜索到的所有类库版本和信息,以及在Podfile中配置的写法,终端返回信息如下:

-> AFNetworking (2.3.1)

   A delightful iOS and OS X networking framework.

  pod ‘AFNetworking‘, ‘~> 2.3.1’(这个语句是需要在编辑Podfile的时候输入的命令,即是如何安装下载相关类库的指令)

   - Homepage: https://github.com/AFNetworking/AFNetworking

   - Source:   https://github.com/AFNetworking/AFNetworking.git

   - Versions: 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0,

   2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3,

Tip2、 所有的项目的 Podspec 文件都托管在https://github.com/CocoaPods/Specs。第一次执行pod setup时,CocoaPods 会将这些 podspec 索引文件更新到本地的~/.cocoapods/目录下,这个索引文件比较大,有 80M 左右。所以第一次更新时非常慢.

一个叫 akinliu 的朋友在 gitcafe 和 oschina 上建立了 CocoaPods 索引库的镜像,因为 gitcafe 和 oschina 都是国内的服务器,所以在执行索引更新操作时,会快很多。如下操作可以将 CocoaPods 设置成使用 gitcafe 镜像:

pod repo remove master
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update

将以上代码中的https://gitcafe.com/akuandev/Specs.git替换成http://git.oschina.net/akuandev/Specs.git即可使用 oschina 上的镜像。


Q2、当在pod updatepod install时遇到:

Unable to find a specification for `xxxxx (~> 1.x.x)` depended upon by Podfile.  

OR :pod setup时遇到:

[!] /usr/bin/git fetch --unshallow

fatal: error in object: unshallow f4cf991d7db93e387c25a637876d473fe7093a6d

A2:只需要把当前Pod的目录清理一下就O了

步骤(1):pod repo remove master

步骤(2):pod setup


Q3、当把CocoaPods生成的workspace移动到上层目录时,需要改下Pods.xcconfig和工程里的一些设置, 故当遇到:

Could not automatically select an Xcode project. Specify one in your Podfile like so:  
  
xcodeproj 'path/to/Project.xcodeproj'  

A3:在Podfile文件里指定下工程目录就O了,比如:

......  
xcodeproj 'Portfolio/Portfolio.xcodeproj'   
......  

Q4、当在pod updatepod install时卡在Analyzing dependencies

A4:当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个--verbose --no-repo-update可以省略这一步,然后速度就会提升不少。命令如下:

pod install --verbose --no-repo-update
pod update --verbose --no-repo-update

CocoaPods 进阶

对自己的开源项目引入CocoaPods支持

讲了那么多怎么用别人的,那这一节可以来看看怎么自己做给别人用了,如果你有一个开源项目,想让别人也能使用 CocoaPods 直接导入,那么可以这样做。

英文好的大哥大姐们 => 传送门:CocoaPods官方文档说明

1、在github上创建一个仓库,比如CNTestDemo,重要:记得选择开源协议(MIT)

2、将项目clone到自己的工作目录,至于Git的使用这里就不说了,如果不了解的可以先看看这里:
廖雪峰--Git教程

3、创建 podspec 文件:

cd /Document/Work/iOS/CNTestDemo
pod spec create CNTestDemo

4、编辑 podspec 文件: vim CNTestDemo.podspec

5、创建之后会自动生成一个模板,里面会有详细的注释(可以参考别的开源项目的podspec文件),这里给出一个示例文件:

Pod::Spec.new do |s|
  s.name     = 'CNTestDemo' 
  s.version  = '1.0' 
  s.license  = "MIT"  //开源协议
  s.summary  = 'This is a test demo' //简单的描述 
  s.homepage = 'https://github.com/neilchan/CNTestDemo' //主页
  s.author   = { 'Neil Chan' => '***@yeah.net' } //作者
  s.source   = { :git => 'https://github.com/neilchan/CNTestDemo.git', :tag => "1.0" } //git路径、指定tag号
  s.platform = :ios 
  s.source_files = 'CNTestDemo/*'  //库的源代码文件
  s.framework = 'UIKit'  //依赖的framework
  s.requires_arc = true
end

6、创建tag,同步到github:

git add .
git commit -m "1.0"
git tag 1.0
git push --tags
git push origin master

7、验证podspec文件

pod spec lint CNTestDemo.podspec

如果不通过根据提示解决错误之后,返回步骤6。在这之前要删除github跟本地的tag,输入:

git tag -d 1.0                   //删除本地tag
git push origin :refs/tags/1.0  // 删除github仓库tag

8、注册 CocoaPods 信息(第一次提交的话,不是的话跳过)

pod trunk register 这里写邮箱 '这里起个名字' --description=' 这里写描述'

去邮箱点击验证链接之后,再执行第9步骤

9、提交到 CocoaPods

pod trunk push CNTestDemo.podspec

到这里提交完成之后就可以通过 CocoaPods导入或者查找你的开源项目了。

建立企业内部私有库

看到标题莫慌,其实不是什么大事儿。只是你只需要执行完上述说到的第7步骤,就不推到 CocoaPods 的公共资源列表去了就行。而在使用的时候你需要在 Podfile 中这样写:

pod 'ProjectName',:git=>"http://xxx.git"(把xxx替换为库的git地址)

这里感谢:

CocoaPods 官方文档

用 CocoaPods 做iOS程序的依赖管理

如何编写一个CocoaPods的spec文件

上一篇下一篇

猜你喜欢

热点阅读