CocoaPods的安装使用以及应该注意的点

作者: SuperMario_Nil | 来源:发表于2017-01-12 00:59 被阅读176次

    前言:好久没写点什么,17年要多“提笔”了,无论是记录自己学习的点滴,还是分享一些技术感悟~给自己定个小目标,今年至少要完成50篇文章。也就是说基本每周出一篇。💪 最近项目中在用CocoaPods,这篇文章再温习一下吧~🤓

    night.jpg

    What ?

    CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具,类似PHP的Composer,Java的Maven,NodeJs的npm。


    Why ?

    使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方库
    在工程中引入第三方库会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。在配置 build phases 和 linker flags 过程中,会引起许多人为因素的错误。CocoaPods 简化了这一切,它能够自动配置编译选项。而且方便管理第三方库的版本,方便升级与控制。
    例如实际开发中需要导入一些第三方库,在没有使用 CocoaPods 以前,我们需要:
    1.把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
    2.对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 分别增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
    3.对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc等编译参数
    4.管理这些依赖包的更新。
    5.检测重复是否添加,是否有多个版本

    这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我们只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install。CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。【片段摘自巧神博客😉】


    How ?

    CocoaPods安装:

    CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境,我们的MacOS都自带了Ruby环境。请尽可能用比较新的 RubyGems 版本,建议 2.6.x 以上,打开你的终端

    gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
    gem sources -l https://gems.ruby-china.org
    # 确保只有 gems.ruby-china.org
    sudo gem update --system # 这里可能要翻墙一下
    gem -v
    

    注意,如果遇到 SSL 证书问题,你又无法解决,请直接用 http://gems.ruby-china.org避免 SSL 的问题。
    接下来执行安装CocoaPods命令:

    sudo gem install cocoapods
    pod setup
    

    这步等待时间可能有点长,因为要下载大概几百M的文件,下载到 ~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用du -sh *来查看下载进度。

    当然我们也可以使用CocoaPods国内的镜像索引来加速下载速度

    pod repo remove master
    pod repo add master https://git.coding.net/CocoaPods/Specs.git
    pod repo update
    

    使用CocoaPods:

    首先在你的项目目录下执行如下代码:

    pod init
    

    然后你会发现刚才的命令创建了一个Podfile 文件
    Podfile 文件可以很简单:

    target 'MyApp' 
      do pod 'ObjectiveSugar'
    end
    

    Podfile文件也可以很复杂:

    platform :ios, '9.0'
    inhibit_all_warnings!
    target 'MyApp' do
      pod 'ObjectiveSugar', '~> 0.5'
    
      target "MyAppTests" do
        inherit! :search_paths
        pod 'OCMock', '~> 2.0.1'
      end
    end
    post_install do |installer|
      installer.pods_project.targets.each do |target|
        puts "#{target.name}"
      end
    end
    

    具体语法可以参考Podfile指南

    这里简单说明一下常用的写法

    • 保持使用最新版:
    pod 'MBProgressHUD',
    
    • 使用固定版本:
    pod 'MBProgressHUD', '0.9.2'
    
    • 指定最小版本:(实际中在0.92跟1.0.0之间,不包含1.0.0)
    pod 'MBProgressHUD', '~>0.9.2'
    

    对于版本号的个人理解:比如说0.9.2,0.x.x到1.x.x几这样跨度的应该是一个改动很大的版本,有可能会废弃一些老的API,可能会造成一些兼容性需适配问题。0.8.x到0.9.x这样的是增加了一些新功能,同时可能修复了一些bug。0.9.1到0.9.2这样增加版本号的,只是修复了一些bug没太多影响。


    写好了Podfile文件之后执行命令:

    pod install --verbose
    #--verbose参数代表查看这个命令执行的详细过程
    

    然后会生成xxx.xcworkspace,和Podfile.lock以及Pods文件夹。以后打开工程用xxx.xcworkspace

    关于Podfile 与 Podfile.lock需注意:

    Podfile文件以及Podfile.lock文件应该加入到版本控制中(SVN or Git...),这一点也是官方文档中强调的。Podfile.lock文件记录了当前所依赖的第三方库版本。当团队合作时,务必要保证大家版本一致性,不然可能会造成各种奇奇怪怪的bug以及隐患。


    什么时候用pod install 什么时候用pod update ?

    当你使用pod install它只解决了Podfile里面,但不在Podfile.lock文件里面的那些库之间的依赖。对于在Podfile.lock里面所列出的那些库,会下载在Podfile.lock里面明确的版本,并不会去检查是否该库有新的版本。

    比如说:Podfile文件如下

    target 'testCocoaPods' do
      pod 'MBProgressHUD', '~>0.9.1'
    end
    

    你当前 Podfile.lock里面已经是0.9.1版本,你再执行pod install的时候,Podfile.lock里面的版本符合Podfile要求就等于没什么操作,即使有0.9.2版本更新也不会下载

    当你运行 pod update PODNAME 命令时,CocoaPods会帮你更新到这个库的新版本,而不需要考虑Podfile.lock里面的限制,它会更新到这个库尽可能的新版本,只要符合Podfile里面的版本限制。

    如果你运行pod update,后面没有跟库的名字,CocoaPods就会更新每一个Podfile里面的库到尽可能的最新版本。
    比如:上面的例子运行 pod update时候,如果有0.9.2版本,CocoaPods会按照你Podfile文件的配置去更新,然后更改Podfile.lock

    需要注意的事项:

    运行 pod update 有时候你会感觉到特别慢,是因为它首先会去更新podspec,使用--no-repo-update参数可以禁止其做索引更新操作


    EOF:文中难免会有一些错误的之处,欢迎大家拍砖~

    相关文章

      网友评论

        本文标题:CocoaPods的安装使用以及应该注意的点

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