CocoaPods

CocoaPods

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

使用CocoaPods有如下幾點好處:react

  • 在引入第三方庫時它能夠自動爲咱們完成各類各樣的配置,包括配置編譯階段、鏈接器選項、甚至是ARC環境下的一些配置等。
  • 使用CocoaPods能夠很方便地管理的第三方SDK,大部分穩定好用的SDK都支持cocoapods導入。
  • 在項目模塊化的過程當中方便咱們模塊間解耦。

安裝

sudo gem install cocoapods

查看版本

pod --version

在開發中安裝使用cocoapods要注意版本,由於通常開發過程當中要你們一塊兒使用同一個工程,通常爲了指定版本咱們會在工程下建立Gemfile來指定使用cocoapods的版本。ios

指定使用Cocoapods的版本

除了指定Gemfile之外 , 咱們還能夠安裝指定版本的podsgit

sudo gem install cocoapods -v 1.3.1

再查看一下pod版本咱們就會發現已經安裝了1.3.1github

卸載掉不須要的版本

當咱們本地同時存在多個版本的pod的時候能夠把多餘的卸載掉swift

sudo gem uninstall cocoapods

會提示咱們選擇卸載的版本xcode

Select gem to uninstall:
 1. cocoapods-1.2.1
 2. cocoapods-1.3.1
 3. All versions
>

咱們選擇想要卸載的版本的序號就行了 。緩存

使用rvm管理ruby環境

有時咱們須要不一樣的ruby環境,並且不想更改系統自帶的時候能夠考慮使用rvm管理本地的ruby版本安全

\curl -sSL https://get.rvm.io | bash -s stable

查看可用的ruby版本ruby

rvm list known

使用某個制定版本做爲默認的ruby版本

rvm use 2.6.3 --default

安裝和使用bundle

gem install bundler

而後在工程目錄下建立Gemfile

source 'https://rubygems.org'
gem "cocoapods", "1.7.5"

再次使用的時候就可使用如下方式進行包更新操做了,這樣在咱們同一ruby環境下也可使用不一樣版本的pod

bundle exec pod install

查看某個SDK的詳細信息

cocoapods支持咱們去查找想要使用的倉庫 , 好比咱們想查找ReactoveObjC這個庫

pod spec cat ReactiveObjC

咱們能夠看到該倉庫的配置信息。

{
  "name": "ReactiveObjC",
  "version": "3.1.0",
  "summary": "The 2.x ReactiveCocoa Objective-C API: Streams of values over time",
  "description": "ReactiveObjC (formally ReactiveCocoa or RAC) is an Objective-C\nframework inspired by [Functional Reactive Programming](\nhttp://en.wikipedia.org/wiki/Functional_reactive_programming).\nIt provides APIs for composing and **transforming streams of values**.",
  "homepage": "https://reactivecocoa.io",
  "screenshots": "https://reactivecocoa.io/img/logo.png",
  "license": {
    "type": "MIT",
    "file": "LICENSE.md"
  },
  "documentation_url": "https://github.com/ReactiveCocoa/ReactiveObjC/tree/master/Documentation#readme",
  "authors": "ReactiveCocoa",
  "social_media_url": "https://twitter.com/ReactiveCocoa",
  "platforms": {
    "ios": "8.0",
    "osx": "10.9",
    "watchos": "2.0",
    "tvos": "9.0"
  },
  "source": {
    "git": "https://github.com/ReactiveCocoa/ReactiveObjC.git",
    "tag": "3.1.0"
  },
  "source_files": [
    "ReactiveObjC/*.{h,m,d}",
    "ReactiveObjC/extobjc/*.{h,m}"
  ],
  "private_header_files": [
    "**/*Private.h",
    "**/*EXTRuntimeExtensions.h",
    "**/RACEmpty*.h"
  ],
  "ios": {
    "exclude_files": "ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable}*"
  },
  "osx": {
    "exclude_files": "ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK}*"
  },
  "tvos": {
    "exclude_files": "ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable,UIActionSheet,UIAlertView,UIDatePicker,UIImagePicker,UIRefreshControl,UISlider,UIStepper,UISwitch,MK}*"
  },
  "watchos": {
    "exclude_files": "ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK,AppKit,NSControl,NSText,NSTable,NSURLConnection}*"

開始使用

首先 , 新建一個singlgViewApp ,而後在命令行進入該project目錄

pod init

咱們能夠看到cocoapods爲咱們生成了一個Podfile
platform表示這個工程安裝的設備,後面是系統最低版本
如今咱們能夠在裏面添加一下剛纔搜索的倉庫

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

target 'ocTest' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
  pod 'ReactiveObjC'
  # Pods for ocTest
end

這裏咱們添加了一個倉庫,接下來再命令行執行pod update來安裝所須要的倉庫,安裝完畢後咱們能夠看到當前路徑下有兩個工程文件

  • Test.xcodeproj
  • Test.xcworkspace

咱們在使用了cocoapods管理第三方庫的時候,每次install或者update的時候就會生成*.xcworkspace這個文件咱們須要使用這個工程進行開發調試。
如今打開工程,定位到viewController.m中就能夠import並使用ReactiveObjC啦 。

如何使用私有源

公司內部有本身搭建的gitlab服務時,有的公司搭建的gitlab服務爲了安全並無提供外網接口,咱們只能在內網訪問,這時候就要在podfile中添加私有源的地址

source 'http://xx.xxxx.com/ios/cocoapods-spec.git'
source 'https://github.com/CocoaPods/Specs.git'  # 官方庫

上面那個就是咱們要添加的私有源地址,下面的是官方源地址,若是都不寫的話那麼默認就會使用官方源 。

如何建立併發布倉庫到私有repo

  • 首先執行命令,後面替換爲你要發佈SDK的名字
pod lib create TDFCommonUtil


  • pod會給出一些選項讓咱們選擇
To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide:
 - https://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and click links to open in a browser. )


What platform do you want to use?? [ iOS / macOS ]
 >
ios
What language do you want to use?? [ Swift / ObjC ]
 >
swift
Would you like to include a demo application with your library? [ Yes / No ]
 >
yes
Which testing frameworks will you use? [ Quick / None ]
 > None

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

如今咱們須要添加一些信息

cd進入剛纔建立的目錄,執行命令 ls 能夠看到控制檯有如下輸出。

Example               README.md           TDFCommonUtil.podspec
LICENSE               TDFCommonUtil         _Pods.xcodeproj

解釋一下這裏都是啥

  • Example 這裏面就是示例工程
  • README.md 這裏面是咱們對改pod功能和使用等的介紹 , 使用markdown語法
  • TDFCommonUtil.podspec 這裏是改模塊的所有基本信息
  • LICENSE 這裏放的是改開源項目遵照的協議
  • TDFCommonUtil 這裏放着所有的類文件和資源文件
  • _Pods.xcodeproj 這是示例工程的快捷方式

咱們首先要爲咱們的pod建立一個實際的git倉庫 。

打開gitlab服務建立一個空的git倉庫 而後先把pod目錄提交到咱們的倉庫 blalblabla

打開TDFCommonUtil.podspec文件

Pod::Spec.new do |s|
  s.name             = 'TDFCommonUtil'
  s.version          = '0.1.0'
  s.summary          = 'A short description of TDFCommonUtil.'



  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/xxxxx@yeah.net/TDFCommonUtil'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'xxxxx' => 'xxxxx@2dfire.com' }
  s.source           = { :git => 'https://github.com/xxxxx@yeah.net/TDFCommonUtil.git', :tag => s.version.to_s }

  s.ios.deployment_target = '8.0'

  s.source_files = 'TDFCommonUtil/Classes/**/*'
  
  # s.resource_bundles = {
  #   'TDFCommonUtil' => ['TDFCommonUtil/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end

這裏的配置項就是生成pod須要配置的大部分選項了 ,簡單介紹一下

  • name pod名稱
  • version 版本號 ,特別注意下在更新時須要對git倉庫打tag
  • summary 簡介
  • description 描述
  • homepage 主頁
  • license 使用協議
  • author 做者
  • deployment_target 須要系統版本
  • source_files 源文件路徑
  • resource_bundles 資源文件路徑 注意這裏會把資源文件打包成bundle , 調用的時候要注意下
  • public_header_files 公開的頭文件 (有些頭文件咱們不想要外部看見能夠在這裏去掉)
  • frameworks 須要依賴的framework庫
  • dependency 須要依賴的其餘pod

如今把這些填好吧 。

如何添加依賴

有的時候咱們開發的pod倉庫須要依賴其餘倉庫,好比咱們須要依賴ReactiveObjC
這裏就能夠在TDFCommonUtil.podspec下面添加這一行

s.dependency 'ReactiveObjC'

ps ,這裏能夠指向特定的版本也能夠用 '~> 2.3' 的形式表示依賴此倉庫至少大於2.3版本可是不會超過3.0 。

使用lint命令檢測咱們的倉庫是否還有問題

一切就緒後你能夠在裏面建立你的文件,添加代碼了,別忘了再有文件的增長或刪除後在運行一遍 ‘pod install’。

先隨便建立幾個文件,而後咱們使用cocoapods檢測咱們的庫

pod lib lint --sources='git@git.xxx.com:ios/cocoapods-spec.git' --use-libraries --allow-warnings --verbose --no-clean

這裏的sources填寫你所使用的私有gitlab服務,而後咱們就能夠靜靜的看着命令行了。

最後若是出現

Test passed validation.

證實你的庫是可運行的,若是沒有出現passed就注意下輸出中的error信息,搜索一下error看是什麼致使的 。

向私有源推送

lint經過後咱們就能夠把本身的倉庫信息推送到私有源了,注意不是「倉庫」是「倉庫信息」,也就是x.podspec 。
cocoapod能夠自動幫咱們完成這件事情

pod repo push xxx-cocoapods-spec TDFOpenShopSDK.podspec --sources=git@git.xxx.com:ios/cocoapods-spec.git --allow-warnings --use-libraries --verbose

其餘

緩存

刪除指定Pod的緩存

pod cache clean [NAME]

刪除所有緩存

pod cache clean --all

卸載Pod

pod deintegrate

查看環境

pod env

能夠看到Git,ruby,Xcode版本等信息

### Stack

CocoaPods : 1.7.5

Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
RubyGems : 3.0.4
    Host : Mac OS X 10.14.6 (18G87)
   Xcode : 10.3 (10G8)
     Git : git version 2.20.1 (Apple Git-117)

Ruby lib dir : /Users/felix/.rvm/rubies/ruby-2.6.3/lib
Repositories : 2dfire-cocoapods-spec - git@git.2dfire.net:ios/cocoapods-spec.git @ cfd5c16d38593af16fdaa4bf1bebcf47f14b801d

2dfire-cocoapods-spec-binary - git@git.2dfire.net:ios/cocoapods-spec-binary.git @ d07163e6b83c0fbfc71fe43a68dd2fce5f51d2b9
           2dfire-ios-cocoapods-spec - http://git.2dfire.net/ios/cocoapods-spec @ cfd5c16d38593af16fdaa4bf1bebcf47f14b801d
           master - https://github.com/CocoaPods/Specs.git @ f21043d7a7fd59154e6cae2ef819d725de394cfa
### Installation Source

Executable Path: /Users/felix/.rvm/gems/ruby-2.6.3/bin/pod

### Plugins

cocoapods-deintegrate : 1.0.4
cocoapods-plugins : 1.0.0
cocoapods-search : 1.0.0
cocoapods-stats : 1.1.0
cocoapods-trunk : 1.3.1
cocoapods-try : 1.1.0

嘗試Pod

也就是預覽模式,在有多個實例工程可用的時候會讓用戶選擇預覽哪個

pod try YYModel

將你的工程打包爲framework

須要用到 cocoapods-packager

gem install cocoapods-packager
pod package XXX.podspec --force --dynamic --no-mangle --spec-sources=https://github.com/CocoaPods/Specs.git

具體參數解釋

Usage:

    $ pod package NAME [SOURCE]

      Package a podspec into a static library.

Options:

    --force                                                         Overwrite existing
                                                                    files.
    --no-mangle                                                     Do not mangle
                                                                    symbols of
                                                                    depedendant Pods.
    --embedded                                                      Generate embedded
                                                                    frameworks.
    --library                                                       Generate static
                                                                    libraries.
    --dynamic                                                       Generate dynamic
                                                                    framework.
    --bundle-identifier                                             Bundle identifier
                                                                    for dynamic
                                                                    framework
    --exclude-deps                                                  Exclude symbols
                                                                    from dependencies.
    --configuration                                                 Build the
                                                                    specified
                                                                    configuration
                                                                    (e.g. Debug).
                                                                    Defaults to
                                                                    Release
    --subspecs                                                      Only include the
                                                                    given subspecs
    --spec-sources=private,https://github.com/CocoaPods/Specs.git   The sources to
                                                                    pull dependant
                                                                    pods from
                                                                    (defaults to
                                                                    https://github.com/CocoaPods/Specs.git)
相關文章
相關標籤/搜索