iOS使用Cocoapods進行組件化操做手冊

前言

隨着工程體量的增大,開發人員增多,爲了更好的合做開發,經常咱們須要對大工程進行拆分紅一個個小工程,這樣作有幾點好處:ios

  1. 加快開發效率,若是咱們在一個大工程進行迭代開發,經常編譯時間就很長,若是你開發的是一個入口比較深的模塊,開發調試時,僅僅修改了一下UI界面位置等,從新編譯運行而後再點點點到對應界面,經常浪費不少時間。而將模塊拆成單獨一個可執行的工程後,編譯運行調試的時間大大縮減。
  2. 並行開發,因爲每一個子工程均可以進行單獨的版本控制,子工程在開發新功能中時,主工程可依賴低版本的子工程,不影響主工程的運行。
  3. 分工性提升,不一樣子工程可由不一樣人員甚至不一樣團隊負責。
  4. 代碼共享,不一樣app工程可方便快捷的複用組件。

下面咱們就經過pod來建立一個子工程並經過pod在主工程來引入git

操做步驟

1、建立子工程

  1. 使用Xcode新建一個工程例如叫HomeModule
  2. 經常咱們會再建立一個Demo項目來作示例,這裏咱們能夠在HomeModule目錄下建立一個名爲HomeModuleDemo的工程
  3. 爲了方便起見,在HomeModule目錄下建立一個名爲Classes的文件夾,將須要導出的代碼類都放在這個文件夾下,創建一個Resources文件夾,將須要導出的資源文件放在這個目錄下
  4. cd到HomeModule工程目錄,輸入命令pod spec create HomeModule,這段命令會在目錄下生成HomeModule.podspec文件,這個文件其實就是對這個工程的描述,例如工程名稱、託管地址、須要導出哪些文件等

下面是進行到這一步的目錄示例圖github

  1. 好了,如今能夠先將這個項目託管到線上git倉庫bash

  2. 打開HomeModule.podspec作一些編輯,下面是一些經常使用配置的編輯app

Pod::Spec.new do |s|

  s.name         = "HomeModule"
  s.version      = "0.0.1"
  s.summary      = "HomeModule is a ...."
  s.homepage     = "https://github.com/xxx"
  s.license      = "MIT"
  s.author       = {
                    "xxx" => "xxx@gmail.com",
                    }
  s.source        = { :git => "https://github.com/xxx/HomeModule.git", :tag => "#{s.version}" }
  s.source_files  = "Classes/*.{h,m}"
  s.resources = "Resources/*.png"
  s.requires_arc  = true

  s.ios.deployment_target = "7.0"
  s.osx.deployment_target = "10.9"
  s.watchos.deployment_target = "2.0"
  s.tvos.deployment_target = "9.0"
  s.frameworks    = 'UIKit'
  s.dependency 'Masonry', '~> 0.6.2'
end

複製代碼

值得關注的是下面幾個點工具

  • s.source 是項目託管地址
  • s.source_files 須要導出的文件,就是最終其它工程經過pod引入你這個項目時的文件,這裏就體現了pod的好處,咱們開發組件時能夠是個完整的iOS工程,可單獨開發運行調試,經過pod給別人用時就只須要導出核心的那些文件就好了
  • s.resources 須要導出的資源文件
  • 若是在Classes和Resources目錄下,你建了二級目錄的話,須要寫成這樣s.source_files = "Classes/**/*.{h.m}" s.resources做一樣的寫法
  • s.frameworks 你依賴的系統庫
  • s.dependency 你依賴的其它第三方pod庫
  1. 開發HomeModule模塊,添加新功能
  2. 將HomeModule新代碼push到git倉庫,並建立一個tag 0.0.1

2、建立私有Cocoapods Specs倉庫

這個倉庫主要用來託管咱們本身的podspec文件,就是本例中的HomeModule.podspec,例如之後的ShopCartModule.podspec等等...gitlab

Cocoapods的官方spec倉庫是https://github.com/CocoaPods/Specs,不少咱們經常使用的第三方庫例如AFNetworking的podspec文件就託管在這個倉庫裏面,在咱們第一次使用cocoapods的時候就會將這個倉庫克隆到本地的user/xxx/.cocoadpos/repos/master,你可進入這個目錄看看,就會發現每一個庫的每一個版本的podspec文件都在裏面,當咱們經過pod search搜索第三發庫的時候,實際就是在搜索這個目錄。有些時候一些第三方庫已經發布新版本了,但咱們搜索到的仍是老版本,就是由於這個庫沒有更新。ui

下圖爲克隆到本地的Cocoapods官方Specs倉庫: url

克隆到本地的Cocoapods官方Specs倉庫
經過命令 pod repo list咱們能夠看到本地有哪些spec倉庫,以及倉庫的url和本地地址信息等,以下圖中是Cocoapods官方Spec倉庫,名爲master

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/geforceyu/.cocoapods/repos/master

複製代碼

順便提一下,不少同窗會知道pod updatepod setup都很是慢,這兩個命令都會更新這個倉庫,你們能夠將master倉庫的url切換爲清華大學的cocoapods官方spec鏡像源,具體詳見清華大學軟件源spa

好了,瞭解完官方spec倉庫後,咱們能夠開始建立本身的spec倉庫了。

  1. 直接在gitlab或是github上建立一個空倉庫名爲xxxPodSpecs
  2. 將這個倉庫clone到本地的.cocoapod/repos/xxxPodSpecs,固然這裏使用pod命令行工具來執行,pod repo add xxxPodSpecs https://github/xxx/xxxPodSpecs.git,執行完成後再執行pod repo list就能夠看到咱們私有的spec倉庫在列了。
  3. 將咱們的HomeModule.podspecs託管到咱們才建立的私有spec倉庫,具體操做爲cd 到HomeModule.podspec目錄下,執行pod repo push xxxPodSpecs HomeModule.podspec,這裏pod會執行一次校驗,通常會報一些warn,你能夠去解決一下,若是不想解決直接忽略的話,執行pod repo push xxxPodSpecs HomeModule.podspec --allow-warnings,不過若是是error錯誤,是沒法忽略的。這裏順便提一下,在我使用1.5.3版本pod執行的時候,會報一個error是bug引發的,沒法解決,經過升級到最新版pod就行了,升級pod只須要執行sudo gem install cocoapods就好了。若是你想多個pod切換使用,請參考這篇文章多個版本的 CocoaPods 的切換

3、主工程集成

  1. 打開咱們的主工程的podfile文件,在頭部添加兩行
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/xxx/xxxPodSpecs.git'
複製代碼

在後面就能夠添加pod引用HomeMoudle了

pod 'HomeModule', '0.0.1'
複製代碼

能夠看到一個是官方specs倉庫,一個是咱們私有spec倉庫,由於咱們本身的HomeModule.podspec文件是託管到私有的xxxPodSpecs倉庫的,若是不添加咱們本身的私有spec倉庫源,那麼pod install的時候是在官方spec倉庫搜索HomeModule.podspec的。

4、新版本發佈

當咱們繼續爲子工程HomeModule開發新的功能後,咱們須要更新咱們的版本,具體操做以下

  1. 將HomeModule項目新代碼push到git倉庫,而且建立0.0.2的tag
  2. 修改HomeModule.podspec的s.version爲0.0.2
  3. cd到HomeModule.podspec目錄執行pod repo push xxxPodSpecs HomeModule.podspec --allow-warnings
  4. 主工程的podfile更新爲
pod 'HomeModule', '0.0.2'
複製代碼
  1. 主工程執行pod install

擴展

Demo工程配置

一般咱們會經過一個demo工程來給他人演示庫的一些用法,首先咱們須要將demo工程經過pod集成咱們的HomeMoudle

  1. cdHomeModuleDemo目錄,執行pod init建立一個podfile。編輯podfile文件添加HomeModuel引入
target 'HomeModuleDemo' do
  pod 'HomeModule', :path => '../'
end

複製代碼

這裏咱們經過:path => '../'直接指向本地的HomeModule.spec地址便可。

  1. pod install
  2. 打開HomeMoudleDemo.xcworkspace,開始編寫示例代碼。

謝謝

好了,大體的操做步驟就這些,文章中哪些地方不夠詳細或者錯誤的,歡迎各位看官指正出來,謝謝🙏

相關文章
相關標籤/搜索