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客戶端開發,喜歡數碼科技,喜歡研究技術,深度代碼潔癖患者。

相關文章
相關標籤/搜索