CocoaPods使用

作者: acBool | 来源:发表于2018-11-28 10:37 被阅读37次

    原文链接

    CocoaPods简介

    CocoaPods是iOS开发、macOS开发中的包依赖管理工具,效果如Java中的Maven,nodejs的npm。

    CocoaPods是一个开源的项目,源码是用ruby写的,源码地址在GitHub上。

    无论是做iOS开发还是macOS开发,都不可避免的要使用到一些第三方库,优秀的第三方库能够提升我们的开发效率。如果不使用包依赖管理工具,我们需要手动管理第三方包,包括但不限于:

    1. 将这些第三方库的源码拷贝到项目中
    2. 第三方库代码有可能依赖一些系统framework,我们需要把第三方库依赖的framework导入到项目中
    3. 当第三方库有更新时,需要将更新过的代码拷贝到项目中

    以上工作虽然简单,但是如果项目中的第三方库较多,需要耗费大量的时间和精力。CocoaPods可以将我们从这些繁琐的工作中解放出来。

    安装CocoaPods

    安装CocoaPods比较方便。通常情况下,macOS都安装了ruby,直接使用ruby 的gem命令即可安装CocoaPods。

    使用如下命令可以查看有没有安装ruby:

    // 如果能正确的输出版本号,则说明ruby已经正确安装
    ruby --version
    

    使用如下命令可以查看gem的版本号:

    // 该命令会输出gem的版本号
    gem --version
    

    如果gem的版本号过低,安装CocoaPods可能会失败。所以在安装CocoaPods之前可以升级一下gem,使用如下命令:

    // 更新gem
    sudo gem update --system
    

    另外需要注意的是,ruby的软件源https://rubygems.org 使用的是亚马逊云的服务,国内普通网络是不能访问的。如果不能访问,可以将ruby的源换成国内淘宝的源,命令如下:

    gem sources --remove https://rubygems.org/
    gem sources -a https://ruby.taobao.org/
    

    操作完后,可以验证下更换源是否成功,命令如下:

    // 如果只有一个淘宝的源,说明更换源成功
    gem source -l
    

    以上所有工作都完成之后,现在可以安装CocoaPods了,命令如下:

    // 安装CocoaPods
    sudo gem install cocoapods
    

    安装成功后,在使用之前,还需要对CocoaPods初始化,命令如下:

    // 这一步花费的时间比较久,耐心等待即可
    pod setup
    

    测试一下CocoaPods有没有安装成功:

    // 如果能正确显示版本号,说明CocoaPods安装成功
    pod --version
    

    使用CocoaPods

    使用CocoaPods安装第三方框架

    CocoaPods主要是用于iOS项目、macOS项目管理第三方框架,因此在介绍如何使用CocoaPods时,需要结合iOS项目或者macOS项目。这里新建一个iOS项目TestCocoaPods。

    1. 进入项目中和.xcodeproj同级的文件夹,如图:
    image
    1. 在该目录下新建一个Podfile文件,可以使用命令:
    touch Podfile
    

    新建Podfile后如下图:

    image
    1. 编辑Podfile文件。Podfile文件有其固定的格式,可以从网上找一个,然后修改里面的内容即可。这里随便贴一个:
    # Uncomment this line to define a global platform for your project
    
    platform :ios, '8.0'
    
    target 'TestCocoaPods' do
      pod 'SDWebImage', '~> 4.3.2'
    end
    
    

    当然可以增加更多的第三方库,上述示例中只增加了1个,是SDWebImage。

    Podfile文件中需要写明平台,是iOS还是osx(macOS),以及第三方库所要支持的系统最低版本号。之后是target,一个Podfile中可以有多个target。比如说插件开发中,主项目和插件项目所依赖的包可能是不同的,就可以写两个target,分别设置依赖的第三方库。需要导入一个第三方库,只需要

    pod 'package name', 'version number'
    

    即可。版本号有多种表示方式,这里简单介绍几种:

    (1)'>=1.0' 最低版本号为1.0

    (2)'<=1.0' 最高版本号为1.0

    (3)'~>1.0' 兼容1.0的版本的最新版本

    通常情况下使用 ~> 的方式。

    1. 安装所依赖的第三方库。安装使用的方式是命令行,在该目录下执行下述命令即可:
    pod install
    

    安装之后会发现该目录下有较大的变化,如下图:

    image

    多了Pods目录,且Pods目录里面也是一个单独的工程。

    image

    多了TestCocoaPods.xcworkspace文件,以后打开TestCocoaPods项目时,需要打开TestCocoaPods.xcworkspace而不是TestCocoaPods.xcodeproj。

    打开TestCocoaPods.xcworkspace后,可以发现,里面包含两个工程,分别是TestCocoaPods和Pods。

    image

    在TestCocoaPods中使用第三方库,直接import即可。

    1. 当有需求增加或者删除依赖的第三方库时,直接修改Podfile文件即可,修改完毕之后,执行命令:
    pod install
    

    即可。

    如果有需求修改依赖的第三方库的版本号,修改完毕之后,执行命令:

    pod update
    

    即可。

    使用CocoaPods查找第三方框架

    在使用CocoaPods时,可以提前检查第三方框架是否在CocoaPods的管理之下,使用的命令是search:

    pod search 框架名
    

    这是我search YYWebImage的结果:

    image

    CocoaPods的大概工作原理

    CocoaPods的使用相对来说是比较简单的。那么CocoaPods是如何完成这些工作的?以及为何生成了一个Pods工程?

    实际上,CocoaPods是将所有依赖的第三方库都放到了Pods项目中

    image

    所有的源码管理工作从住项目转移到了Pods项目中。

    Pods项目最终会编译成一个libPods-项目名.a的文件,主项目只需要依赖这个.a文件即可。

    image

    对于libPods-TestCocoaPods.a这个文件,可以将其理解为各个第三方库的.a文件的集合。在本例中,libPods-TestCocoaPods.a就是libPureLayout.a和libSDWebImage.a的集合。

    image

    开源项目支持CocoaPods

    下面介绍一下如何让自己的开源项目支持CocoaPods。

    gitHub上新建仓库

    首先,需要在gitHub上新建仓库,新建仓库时记得选择开源协议,通常选择MIT,另外就是设置成项目为public。这里新建一个仓库ACMoreResponseButton。

    image

    记得选择开源协议为MIT:

    image

    各种开源协议

    开源协议有多种,如MIT、BSD等,常见的有6种,关于这6种开源协议的区别,网上有一张图描述的是非常清楚的,这里贴一下:

    image

    可以看到,MIT许可证是要求最不严格的许可证,可以给其他开发者更大的空间。这也是为何多数开源框架都使用MIT许可证的原因。

    将gitHub上的仓库克隆到本地

    使用git clone命令,将gitHub上的仓库克隆到本地:

    git clone https://github.com/acBool/ACMoreResponseButton.git
    

    克隆完之后,在本地仓库上新建项目,并完成对应的功能。之后,使用git add、git commit、git push命令,将本地的修改提交,并且推送到远程仓库,这些步骤不再详细介绍。

    新建podspec文件

    凡是支持CocoaPods的开源库,都需要具备podspec文件,podspec文件可以理解成是对该开源库的描述,包括作者信息,项目主页等。新建podspec文件使用下述命令:

    pod spec create ACMoreResponseButton
    

    新建podspec之后:

    image

    编辑podspec文件

    podspec文件新建之后,里面会有一些信息,可以看做是一个模板,我们只需要稍微对podspec的文件做改动即可。这里贴一下我修改之后的podspec文件:

    s.name         = "ACMoreResponseButton"
    s.version      = "1.1.0"
    s.summary      = "This is a moreResponseArea Button"
    s.homepage     = "https://github.com/acBool/ACMoreResponseButton"
    s.license      = "MIT"
    s.author       = { "wmn" => "acbool@163.com" }
    s.platform     = :ios, "9.0"
    s.source       = { :git => "https://github.com/acBool/ACMoreResponseButton.git", :tag => "1.1.0" }
    s.source_files  = "MoreResponseButtonExample/MoreResponseButtonExample/ACMoreResponseButton/*"
    s.exclude_files = "UIKit"
    s.requires_arc = true
    

    podspec文件中可以做更多的配置,如果想要了解更多,可以参考gitHub上一些比较好的开源库,看下podspec文件是怎么写的。

    分支新建tag,并推送到远程仓库

    在上面的podspec文件中注意到,tag值为1.1.0,因此我们需要在分支上新建一个tag,并且将该tag推送到远程仓库,命令如下:

    // 新建tag
    git tag 1.1.0
    // 将本地的tag推送到远程仓库
    git push --tags
    git push
    

    这里的tag值需要和podspec中写的保持一致。

    验证podspec文件

    在将开源库提交至CocoaPods之前,我们需要验证一下podspec文件,验证命令如下:

    pod spec lint ACMoreResponseButton.podspec
    

    如果验证不通过,会提示有几个警告,有几个error,且警告信息,error信息都会标识出来。需要注意的是,无论是警告还是error,都需要解决。

    如果验证通过,会提示如下图:

    image

    提交至CocoaPods

    注意,只有podspec文件验证通过后,才能将开源库提交至CocoaPods,否则即使提交了也不会成功。提交CocoaPods的命令如下:

    pod trunk push ACMoreResponseButton.podspec
    

    提交成功之后如下图:

    image

    注册CocoaPods

    注意,如果之前没有提交过开源库到CocoaPods,需要先注册一下。注册的命令为:

    // 注意将邮箱名和昵称替换
    pod trunk register test@163.com '昵称名' --description='描述'
    

    执行完毕后,CocoaPods会给对应的邮箱发送一封确认邮件,点击邮件中的确认链接即可。注册成功后,再执行上面的提交步骤。

    私有库支持CocoaPods

    在公司项目中,有时一些通用的功能会封装成框架,这些框架也是可以支持CocoaPods的。所不同的是,我们希望这些框架只为公司内部使用,并不是开源的,可以称之为私有库。

    私有库支持CocoaPods的步骤和公有库基本一致,区别就是不需要提交至CocoaPods,也就是验证podspec文件通过后就可以了。

    另外就是,使用私有库时,Podfile文件的写法也有细微区别。Podfile文件中引入私有库时的写法:

    // 注意替换私有git域名
    pod 'ProjectName',git=>"https://XXX.git"
    

    相关文章

      网友评论

        本文标题:CocoaPods使用

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