iOS开发CocoaPods之入门指南

WHAT IS COCOAPODS
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 52 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.ios

CocoaPods 官网上的这段话翻译一下就是:CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器。他拥有超过52000个库,并在超过300万个应用程序中使用。CocoaPods能够帮助您优雅地扩展项目。c++

简单来讲,就是能够帮助你方便地导入三方库,并导入库的依赖,免去了手动完成三方库导入配置。除了导入,你还能够利用CocoaPods搭建你本身的私有库体系。由于这些功能,CocoaPods基本上全部iOS 开发者都在使用。git

CocoaPods环境搭建

CocoaPods是使用Ruby构建的,因此须要在本地准备好Ruby环境。不过Mac默认已经有了Ruby环境,能够免去搭建Ruby环境了。打开终端(Terminal),咱们开始操做。github

第一步. 更换RubyGems源

RubyGems在国内的访问速度极其感人,因此要进行更换,换成国内的镜像源。例子中我使用的是 Ruby China 的源。api

  1. 查看当前的源,这个时候咱们能看到当前的源是 https://rubygems.orgruby

    $ gem sources -l
  2. 移除当前源,并添加新的源bash

    # Ruby China有https和http两种源,我一开始添加的是https的源会报SSL错误,改为了http就没问题
    $ gem sources --add http://gems.ruby-china.com/ --remove https://rubygems.org/
  3. 再次查看当前源,这个时候就变成了 http://gems.ruby-china.comapp

    $ gem sources -l

第二步. 安装CocoaPods

  1. 安装,执行完下面的命令,等待一会就好ide

    $ sudo gem install cocoapods
    
    # Mac OS X EI Capitan 之后系统请用下面这个安装命令
    $ sudo gem install -n /usr/local/bin cocoapods
    
    # 卸载
    $ sudo gem uninstall cocoapods
  2. 查看pod版本,验证是否安装成功

    $ pod --version
  3. 在安装完成以后,进行设置。这一步的主要做用就是把官方的 Specs repo (The CocoaPods Master Repo) 拉到本地,本地仓库的存放目录是 ~/.cocoapods/repos/master

    $ pod setup

    友情提醒1,这一步很慢很慢,请耐心等待
    友情提醒2,若是你很没有耐心,你能够偷懒从其余安装好了CocoaPods的电脑上,拷贝一份repos到你的电脑上

CocoaPods管理依赖库

通过上面的折腾,CocoaPods已经安装成功了,咱们要用来管理依赖库了,下面以导入AFNetworking进行演示。

  1. 查看可用的三方库

    $ pod search AFNetworking
    
    # Ctrl+Z 退出

    从输出里,看到如今AFNetworking最新的版本是3.2.1。

  2. 终端进入工程目录,新建Podfile

    $ cd ~/Desktop/CocoaPodsDemo/
    $ pod init
  3. 编辑Podfile,vi 的相关操做自行了解

    $ vi Podfile
    
    # 编辑完成以后,:wq 保存退出

  4. 导入

    $ pod install

  5. Pod install 成功以后,目录结构就变成了下面这个样子,双击 CocoaPodsDemo.xcworkspace 打开项目

Podfile简单说明

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

这一段是指定工程所支持的最低系统版本

# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!

这一段是设置是否以动态库的形式编译Pods

  • # use_frameworks 是以静态库的形式编译,产出的库是 .a
  • use_frameworks 是以动态库的形式编译,产出的库是 .framework
pod 'AFNetworking', '~> 3.2.1'

这一句是设置三方库, '~> 3.2.1' 是指定了库的版本。

有的时候也这么写,这样子就是导入最新版本的:

pod 'AFNetworking'

CocoaPods建立私有库

利用CocoaPods导入三方库,是大多数状况下的使用场景,可是CocoaPods还有一个大杀器是建立私有库。

开源三方库能用CocoaPods导入工程,是由于CocoaPods官方维护了一个公开的索引仓库。那么若是咱们本身维护私有库和私有的索引仓库呢?

建立Pod项目工程

为何私有库能被正确地导入工程,自动完成配置?这主要依赖的是Pod项目工程中的podspec文件。这个文件的建立有两种方法:

  • 第一种自行编写测试工程,再用 pod spec creare <库名> 新建podspec。这个更适合于把已有项目转为Pod项目
  • 第二种利用 pod lib create <库名> ,自动建立Pod项目工程。下面的演示就在这种形式上进行。

pod lib create

Using Pod Lib Create

pod lib create 是Pod提供的一个自动化建立私有pod工程的命令,实质上是下载一个Pod工程模板到本地,再作修改。命令在运行过程当中,会弹出几个配置项进行配置,按需设置就行,很简单。

$ cd ~/Desktop
$ pod lib create MyUtils

看一下MyUtils的目录结构,Example目录是测试工程,MyUtils是私有库代码。咱们双击Example里的MyUtils.xcworkspace 打开这个工程。

编写库代码

我这里就简单写一个测试类 MUAppInfo,写完以后再 pod install 进行开发模式下的导入,我把这个测试项目放到了码云上面

MUAPPInfo.h

MUAPPInfo.m

MUViewController.m

编辑Podspec

Podspec是这个pod的配置文件,当咱们引用这个pod到工程的时候,就会按这个文件里的配置项进行配置。这边顺便提一下,podspec是Ruby文件,咱们能够用 Visual Studio Code 再装上Ruby插件来编辑,真的很好用。

那咱们来看一下 MyUtils.podspec 这个文件,通过配置以下(能够做为模板使用):

Pod::Spec.new do |s|
  s.name             = 'MyUtils'
  s.version          = '0.1.0'
  s.summary          = 'MyUtils'
  s.description      = <<-DESC
  CocoaPods私有库测试工程
                         DESC

  s.homepage         = 'https://gitee.com/vincedev/MyUtils'

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

  # 做者信息
  s.author           = { 'superman' => 'superman@gmail.com' }

  # 源地址
  s.source           = { :git => 'https://gitee.com/vincedev/MyUtils.git', :tag => s.version.to_s }

  # 支持最低系统版本
  s.ios.deployment_target = '8.0'

  # 源文件
  s.source_files = 'MyUtils/Classes/**/*'

  # 公开的头文件
  s.public_header_files = 'MyUtils/Classes/**/*.h'

  # 资源,多个用逗号隔开
  # s.resource = 'MyUtils/Assets/resource.bundle'

  # 是否arc
  s.requires_arc = true

  # 依赖的系统Frameworks,多个用逗号隔开
  s.frameworks = 'UIKit'

  # 依赖的系统Library,多个用逗号隔开
  # s.libraries = 'stdc++.6.0.9'

  # 依赖的三方库,有多个依赖就写多行
  # s.dependency 'AFNetworking', '~> 2.3'
  # s.dependency 'MJRefresh'
end

验证podspec

Podspec写好了,接下来须要验证是否正确,验证也有两个方法 pod spec lintpod lib lint

# 会去匹配 s.source 的配置
$ pod spec lint # 不指定,默认当前文件夹内的podspec
$ pod spec lint MyUtils.podspec # 指定podspec

# 忽略 s.source 的配置
$ pod lib lint # 不指定,默认当前文件夹内的podspec
$ pod lib lint MyUtils.podspec # 指定podspec

当看到终端打印 passed validation. ,就说明验证经过,不经过就根据提示进行修改。

当验证经过以后,打上tag,推送到远程仓库

$ git tag 0.1.0
$ git push origin --tags # 推送到远程

建立私有 Specs repo

其实私有 Specs repo 不是必须的,它的做用是让你在导入私有库的时候像导入官方开源库同样,可是我以为更大的做用是解决私有库间的互相依赖。

若是该私有库没有依赖其余私有库,能够直接这样导入:

pod 'MyUtils', :git => 'https://gitee.com/vincedev/MyUtils.git'

那接下来进行私有 Specs repo 的建立,打开 ~/.cocoapods/repos 目录,就看到里面只有 master 这个目录,该目录即存放着上面咱们提到的官方 Specs repo。咱们来添加本身的 Specs repo

  1. 先建立一个git仓库,我这里也仍是在码云上操做,新建了一个 VinceSpecs 项目
  2. 添加到本地 repos 目录

    pod repo add VinceSpecs https://gitee.com/vincedev/VinceSpecs

    添加完成以后,~/.cocoapods/repos 目录下就多了一个 VinceSpecs 目录。

把私有Pod添加到私有 Specs repo 中

$ cd ~/Desktop/MyUtils
$ pod repo push VinceSpecs MyUtils.podspec

添加成功以后,就能看到 ~/.cocoapods/repos/VinceSpecs 多了 MyUtilsVinceSpecs 的远程仓库同步更新了。

测试工程导入私有库

这里拿出上面的 CocoaPodsDemo 这个工程进行测试,编辑 Podfile ,编辑完成以后执行 install

这一步的重点在于指定私有 Specs repo 仓库,并且还要指定官方的 Specs repo 仓库。

结语

这篇文章算是我本身在使用CocoaPods过程当中的一个入门记录,私有库建立中还踩了不少坑,这里就不写了,请看下回分解吧。若是各位看管搜到了这篇文章并耐心看完了,本文如对你有所帮助,烦请点个赞,谢谢!!!保佑看官们代码无bug!!!

参考连接

做者资料

本人就任于甜橙金融信息技术部,负责翼支付iOS客户端开发,喜欢数码科技,喜欢研究技术,深度代码洁癖患者。

相关文章
相关标签/搜索