Cocoapods使用小記

不識廬山真面目,只緣身在此山中html

原文連接ios

1、概述

一、CocoaPods是什麼?
  • CocoaPods是OS X和iOS下的一個第三類庫管理工具,經過CocoaPods工具咱們能夠爲項目添加被稱爲「Pods」的依賴庫(這些類庫必須是CocoaPods自己所支持的),而且能夠輕鬆管理其版本。c++

  • iOS程序依賴管理工具還有Carthage(Carthage 是由 Swift 語言寫的,只支持動態框架,只支持 iOS8+),工程中能夠Carthage和CocoaPods一塊兒存在使用,可是建議使用一種,我的推薦CocoaPods。git

  • CocoaPods項目源碼github

二、下載和安裝CocoaPods
  • CocoaPods須要Ruby環境,安裝Ruby和修改ruby鏡像命令以下:(Mac自帶 Rubyjson

    #安裝ruby 
    gem install ruby 
    
    #升級ruby 
    sudo gem update --system
    
    #檢查版本
    ruby -v
    
    # 更新ruby鏡像
    gem sources --remove https://rubygems.org/
    gem sources -a https://ruby.taobao.org/
    #檢查鏡像是否更新成功
    gem sources -l
    複製代碼
  • 下載和卸載命令緩存

    #下載最新版本
    sudo gem install cocoapods (sudo gem install -n /usr/local/bin cocoapods)
    
    #下載指定版本
    sudo gem install cocoapods -v 1.6.1
    
    #卸載
    sudo gem uninstall cocoapods 
    
    #卸載指定版本
    sudo gem uninstall cocoapods -v 1.6.1
    
    #檢查pod版本
    pod --version
    複製代碼
  • 還能夠在工程目錄下,使用Gemfile來指定使用cocoapods的版本。ruby

    gem "cocoapods", '~> 1.6.1'
    複製代碼
三、CocoaPods應用
  • 爲項目引入優秀的第三方庫,如SDWebImage、AFNetworking、YYCache
  • 建立私有pods,將項目中子模塊拆分、沉庫(內部使用)
  • 建立公有pods,將好的功能模塊分享出去

2、Podfile基礎使用

一、基礎
  • 建立Podfile文件bash

    #進入項目根路徑中執行,生成Podfile文件(若是有Podfile文件不用執行pod init)
    pod init
    複製代碼

    說明:Podfile文件詳細描述了一個或多個工程中targets的依賴關係服務器

  • Podfile添加第三方庫依賴

    target 'QSAppDemo' do
      pod 'AFNetworking'
      pod 'YYModel', '~> 1.0.4'
    	pod 'OOMDetector', '1.3'
      # Debug模式下生效
      pod 'FLEX', '~> 2.0', :configurations => ['Debug']
      pod 'WebViewJavascriptBridge', :git => 'https://github.com/marcuswestin/WebViewJavascriptBridge.git'
    end
    複製代碼
  • 下載和安裝第三方庫

    pod install
    複製代碼

    說明1:下載成功後,使用CocoaPods 生成的 .xcworkspace 文件來打開工程;每次更改了 Podfile 文件,要從新執行一次pod update命令;

    說明2:發生執行pod installpod update都卡在Analyzing dependencies的狀況,是由於要升級CocoaPods的spec倉庫,命令後添加--verbose --no-repo-update 參數能夠省略此步。

二、pod指定依賴項版本範圍
  • 若是依賴項後不指定版本,默認取最新版本

    pod 'OOMDetector'
    複製代碼
  • 若是依賴項後跟上特定版本,就是使用指定版本

    pod 'OOMDetector'
    複製代碼
  • > 0.1 高於0.1版本(不包含0.1版本)的任意一個版本

  • >= 0.1 高於0.1版本(包含0.1版本)的任意一個版本

  • < 0.1 低於0.1版本(不包含0.1版本)的任意一個

  • <= 0.1低於0.1版本(包含0.1版本)的任意一個

  • ~> 0.1.2 版本 0.1.2的版本到0.2 ,不包括0.2。這個基於你指定的版本號的最後一個部分。這個例子等效於>= 0.1.2而且 <0.2.0,而且始終是你指定範圍內的最新版本。

三、pod制定依賴庫的分支或節點
  • 引入master分支(默認)

    pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git'
    複製代碼
  • 引入指定的分支

    pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :branch => 'develop'
    複製代碼
  • 引入某個節點的代碼

    pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => '2.7.0'
    複製代碼
  • 引入某個特殊的提交節點

    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '685e31a31bb1ebce3fdb5a752e392dfd8263e169'
    複製代碼
四、關於Podfile中一些配置說明
  • Source:指定pod的來源。若是不指定source,默認是使用CocoaPods官方的source

    # 使用官方默認地址(默認)
    source 'https://github.com/CocoaPods/Specs.git'
    複製代碼
  • use_frameworks!:使用此命令會在Pods工程下的Frameworks目錄下生成依賴庫的framework,若是不使用,會在Pods工程下的Products目錄下生成.a的靜態庫。

    target 'QSAppDemo' do
      use_frameworks!
    end
    複製代碼

關於Pofile的詳細語法能夠參考: Podfile Syntax ReferencePodfile文件用法詳解

3、Cocoapods創建私有Pod庫

一、概述
  • 因爲業務須要,須要開發某業務SDK,方便公司內業務接入,選擇使用建立私有Pod庫;

  • 本質上,建立公有Pod庫或者私有Pod庫原理是同樣的,不同的是:二者的版本索引查詢方式不同, 公有庫的podspec由CocoaPods/Specs管理, 而內部私有使用的pod庫須要公司內部創建一個倉庫來管理podspec。

  • 私有spec repo的構建形式有兩種, 一種是私有git服務器上面建立,一種是本機建立;通常是在公司內部搭建的git服務器上面建立私有spec repo

    #將遠程的私有版本倉庫添加到本地
    pod repo add qs_private_pods_specs https://github.com/buaa0300/qs_private_pods_specs.git
    
    #添加成功後,打開~/.cocoapods/repos能夠看到新增的qs_private_pods_specs
    複製代碼
二、建立私有Pod庫
pod lib create QSBizSDK      # QSBizSDK是SDK的名字

What platform do you want to use?? [ iOS / macOS ]
 > iOS

What language do you want to use?? [ Swift / ObjC ]
 > ObjC

Would you like to include a demo application with your library? [ Yes / No ]
 > YES

Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None

Would you like to do view based testing? [ Yes / No ]
 > No

What is your class prefix?
 > QS

......
複製代碼

說明1pod lib create QSBizSDK實際上是下載了一個pod模板,而後在內部經過更改.podspec文件的配置定製化本身的pod,podspec是描述pod的說明信息的。 說明2pod lib create ProjectName其實使用了默認參數,補全的話pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git

說明3: 將項目託管到Git,私有庫通常上傳到內部的倉庫中。

三、podspec編輯
Pod::Spec.new do |s|
  s.name             = 'QSBizSDK'
  s.version          = '1.0.0'
  s.summary          = 'A short description of QSBizSDK.'
  s.description      = <<-DESC Add long description of the pod here. DESC
  s.homepage         = 'https://github.com/buaa0300/QSBizSDK'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = {'南華coder' => 'buaa0300@qq.com'}
  s.source           = { :git => 'https://github.com/buaa0300/QSBizSDK.git', :tag => s.version.to_s }
  
  s.ios.deployment_target = '8.0'
  s.default_subspec = 'QSCore'

  # 各個子模塊的個自的源碼路徑
  s.subspec 'QSCore' do |qscore|
    qscore.source_files = 'Classes/QSCore/**/*'
  end

  # A a 必定要不同,是別名,添加好暴露的頭文件
  s.subspec 'A' do |a|
    a.source_files = 'Classes/QSCore/A/**/*'
    a.public_header_files='Classes/QSCore/A/*.h'
  end
  
  # 能夠添加內部本身模塊,或者外部的依賴
  s.subspec 'B' do |b|
    a.source_files = 'Classes/QSCore/B/**/*'
    a.public_header_files='Classes/QSCore/B/*.h'
    b.dependency 'Classes/QSCore/A'
    b.dependency 'AFNetworking', '~> 3.0'   
    b.frameworks = 'SystemConfiguration', 'CFNetwork', 'PassKit'
    b.libraries = 'c++', 'z'
  end

  s.subspec 'C' do |c|
    c.source_files = 'Classes/QSCore/C/**/*'
    c.dependency 'Classes/QSCore/B'
  end
end
複製代碼

說明:對於一個功能比較多的SDK,podspec中須要作的事情比較多,如利用subspec將代碼模塊化,方便使用時按需導入;不一樣的模塊可能依賴framework、靜態庫、內部其餘模塊,也須要處理好;

說明2:可使用pod spec lint xxx.podspec 來檢查podspec的配置有效性

四、podspec加入私有Sepc repo
  • 公有庫使用trunk方式將.podspec文件發佈到CocoaPods/Specs, 內部的pod組件庫則是添加到私有的Spec repo中去, 在終端執行:
pod repo push qs_private_pods_specs QSBizSDK.podspec
複製代碼

說明:添加成功以後qs_private_pods_specs中會包含QSBizSDK庫的podspec信息, 能夠前往~/.cocoapods/repos下的qs_private_pods_specs文件夾中查看, 同時git服務器中的遠端也更新了.

五、更多參考

4、其餘

一、pod setup原理
  • 本質就是將 github.com/CocoaPods/S… 上的項目克隆到/Users/用戶名/.cocoapods/repos目錄下,若此目錄下已經有這個項目,使用pod setup命令則會將項目更新到最新的狀態。
二、pod instal和pod update的區別
  • 執行pod install時,若是Podfile.lock文件存在, 則下載Podfile.lock文件中指定的版本安裝,對於不在Podfile.lock文件中的pod庫,pod install命令會搜索這個pod庫在Podfile文件中指定的版原本安裝;
  • 當你想要更新pod庫的版本時才使用pod update;它無論Podfile.lock是否存在, 都會讀取Podfile文件的的框架信息去下載安裝,下載好以後, 再根據下載好的框架信息, 生成Podfile.lock文件
三、第三方庫禁止BITCODE
post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
           config.build_setting["ENABLE_BITCODE"] = 'NO'
        end
    end
end
複製代碼
四、清除相關命令
#查看本地pod緩存
pod cache list

#清除某個庫緩存
pod cache clean xxxx

# 清除全部pod緩存
pod cache clean -all

#刪除緩存方法
rm ~/Library/Caches/Cocoapods/Pods/Pods/Release
複製代碼
五、其餘
# 更新庫命令
pod repo update

# 刪除 search_index.json 文件
rm  ~/Library/Caches/CocoaPods/search_index.json
複製代碼
相關文章
相關標籤/搜索