Bo2SS

Bo2SS

(5)iOS入門完結:CocoaPods的介紹和使用

好看的海來自好看的天

好看的海來自好看的天

終於迎來了我們《蝦票票》入門 iOS 系列的最後一節——CocoaPods 的介紹和使用。

image

話不多說,我將按照上述大綱的四個步驟開始講解。

是什麼、為什麼、怎麼用?#

CocoaPods 是什麼❓

官方解釋,它是一個開發 iOS 應用程序的第三方庫依賴管理工具


為什麼要使用它呢❓

因為它能自動化地、集中地、直觀地管理第三方開源庫,這裡可以類比 gradle、npm 等等。

PS:iOS 常用框架集成方式對比如下,參考《極客時間》。

引自《極客時間》


怎麼使用呢❓

  1. 首先要安裝~
    1. 前提 -- 安裝 Ruby: brew install ruby ,CocoaPods 是基於 Ruby 來構建的;
    2. 安裝 CocoaPods: sudo gem install -n /usr/local/bin cocoapodsgem 是 Ruby 模塊的包管理器;
    3. 安裝spec 倉庫❗️到本地: pod setup ,spec 倉庫體積較大,喝一杯☕️等待~
  2. 使用步驟如下:
    1. cd [項目根目錄]
    2. 初始化 pod: pod init ,即可生成 Podfile 文件;
    3. 編輯 Podfile❗️
    4. 在項目中集成對應的代碼庫❗️: pod install
    5. 使用時, #import <頭文件> 即可。

細心的你可能會發現上面的 3 個❗️,這是今天的重點🎺🎺🎺,讓我們帶著下面兩個問題繼續往下看:

  1. 如何編輯 Podfile 呢?
  2. spec 倉庫和代碼庫是什麼,它們有什麼區別?可以暫時理解為說明書和實物。

首先看第一個問題:如何編輯 Podfile 呢?

編輯 Podfile#

Podfile 的基本模版如下:

platform :ios, '9.0'   # 指定設備平台「iOS」和最低支持版本號「9.0」
inhibit_all_warnings!  # 禁止所有警告
use_frameworks!        # 使用動態庫,否則使用靜態庫

target 'MyApp' do                   # target指定針對的target名稱
  pod 'Masonry',                    # 導入Mansonry的最新版本
  pod 'YYModel', '1.0.4'            # 導入YYModel的1.0.4版本
  pod 'ObjectiveSugar', '>= 0.5.2'  # 導入ObjectiveSugar>=0.5.2的最新版本

  target 'MyAppTests' do           # 嵌套測試的target
    inherit! :search_paths         # 繼承上者的搜索路徑(至少包含上述第三方庫)
    pod 'OCMock', '~> 2.0.4'       # 導入OCMock>=2.0.4且<2.1的最新版本
  end
end
  • 注意版本號的匹配規則、嵌套寫 target 以減少重複寫 pod 的技巧,更多細節見註釋。

學會了簡單的 Podfile 編寫方法,那麼我們現在看看《蝦票票》用到了哪些第三方庫呢?👇

你是否可以想出 Podfile 的模樣呢?👇

source 'https://github.com/CocoaPods/Specs.git'  # 可以手動指定spec庫的地址
platform :ios, '9.0'
use_frameworks!

target 'ShoPiaoPiao_Example' do
  pod 'ShoPiaoPiao', :path => '../'              # 通過設置:path=>拉取本地庫

  pod 'Masonry'                                  # 上面提到的6個第三方庫
  pod 'AFNetworking'
  pod 'SDWebImage'
  pod 'YYModel'
  pod 'MJRefresh'
  pod 'MBProgressHUD'
end
  • 手動指定的 spec 庫可以是公司或者個人私有的 Git 倉庫。⚠️:如果手動指定了其他庫,則必須指定所有要用到的 spec 庫,即默認的 spec 庫(首次安裝的)也要指定,見上碼。
  • 可以通過設置=> 拉取本地庫,多用於開發該庫。
  • 這裡的第三方庫都默認使用最新的版本。

溫馨補充🎺:這裡你可能會想 ShoPiaoPiao 是什麼第三方庫呢?它是屬於《蝦票票》的第三方庫。那它為什麼是以本地導入的方式 pod 呢?其實我是以開發第三方庫的方式,來開發《蝦票票》這個項目,公司裡多以這種方式開發,類似 SDK 開發。在下面的常用命令一節還會提到如何製作基於 CocoaPods 的第三方庫

圖解原理#

借鑒網上三張圖來說明白 CocoaPods 的基本原理。

先解答前面提到的第二個問題:spec 倉庫和代碼庫是什麼,它們有什麼區別?

看圖:

找一找 Spec 庫和代碼庫

1)通過 pod setup 安裝 spec 倉庫到本地,其實就是把遠程的 CocoaPods 官方索引庫拉取到本地,而這個索引庫裡存放了各個第三方庫的描述信息,分別用一個spec 文件存放,裡面包含了第三方庫的這些信息:

  • 庫名
  • 版本號
  • 描述信息
  • 源碼地址❗️
  • ...

2)在我們編寫好 Podfile 並運行 pod install 時,CocoaPods 就會根據每個庫的源碼地址去拉取源碼集成到項目裡。(當然這個源碼是會有緩存的)

這樣看完是不是能夠理解 spec 庫和代碼庫的區別了呢?


再看兩張關於 pod install 過程的圖解:

pod install 過程 - 1

pod install 過程 - 2

跟著序號和箭頭試著理解 pod install 的過程,如果能夠理解上面的講解,理解這兩張圖就不成問題了~🤔

常用命令#

整理了一張常用命令圖,可保存當作工具圖使用。

CocoaPods 常用命令


🥩加加加餐pod install VS. pod update

它倆的區別是什麼呢?這應該是初次使用 CocoaPods 時最常見的一個疑惑。

相同點

  • 目的都是拉取項目依賴的代碼庫
  • 更新 Podfile.lock

不同點

  • 前者受 Podfile.lock 約束,後者不受
  • 後者會更新本地的 spec 庫

過程詳解

pod install

檢查Podfile.lock是否已經包含 Podfile 中的庫;

(一)如果包含,則繼續判斷 Podfile 裡是否指定版本:1)如果指定版本就去檢查 Podfile.lock 中保存的版本是否與 Podfile 裡指定的相同,相同則跳過,不相同則更新為 Podfile 裡指定的;2)如果沒有指定版本,則不檢查更新直接跳過;

(二)如果不包含該庫,則去下載該庫並將版本保存在 Podfile.lock 文件中。

PS:Podfile.lock 一般作用於 Podfile 沒有指定版本的工程。


pod update

忽略 Podfile.lock 中的記錄,先更新 spec 庫,然後直接去找符合 Podfile 文件中該依賴庫的指定版本,如果沒有指定,就會找最新版本。

PS:pod update [PODNAME] 指定某個 Pod 庫去更新。

參考#

是什麼、為什麼、怎麼用?

How do I install CocoaPods?——stackOverflow

CocoaPods Guides—— 官方

從文檔開始了解 cocoapods 之 Podspec—— 簡書


編輯 Podfile

你真的會寫 Podfile 嗎—— 掘金

inherit!—— 官方


常用命令

pod install 與 pod update 的區別—— 簡書

尾聲#

差不多一個月的時間把《蝦票票入門 iOS》系列寫完了,希望看到這裡的你有一些收穫,或者可以自行實現《蝦票票》了,歡迎交流你的成果~

後續我還會整理一個傳送門,放上《蝦票票》的源碼,並做個總結✅。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。