CocoaPods:你想要的都在这

作者: 南楊 | 来源:发表于2016-07-29 20: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文件

    相关文章

      网友评论

        本文标题:CocoaPods:你想要的都在这

        本文链接:https://www.haomeiwen.com/subject/txvzjttx.html