iOS開発——CocoaPods

9442 ワード

CocoaPods
CocoaPodsとは
CocoaPodsはRubyに基づいて作成されたアプリケーション・レベルの依存マネージャで、4.5万個のライブラリが含まれています.https://cocoapods.org/
CocoaPods組成
  • CocoaPods/CocoaPodこれは、podコマンドが実行されるたびにアクティブになるユーザー向けのコンポーネントです.このコンポーネントは、CocoaPodsを使用するすべての機能を含み、他のすべてのgemsを呼び出すことによってタスクを実行することもできる.
  • CocoaPods/Core Coreコンポーネントは、主にPodfileおよびpodspecsのCocoaPods関連ファイルの処理をサポートします.
  • Podfile Podfileは、プロジェクトに必要なサードパーティ製ライブラリを定義するファイルです.
  • Podspec .podspecも、ライブラリがどのようにエンジニアリングに追加されたかを記述するファイルです.サポートされる機能は、ソースファイル、framework、コンパイルオプション、ライブラリに必要な依存性などです.
  • CocoaPods/Xcodeprojというgemコンポーネントは、すべてのエンジニアリングファイルの統合を担当します.作成および変更できます.xcodeprojと.xcworkspaceファイル.単独のgemパッケージとしても使用できます.足の本来便利な修正工事ファイルを書きたい場合は、このgemを使用します.

  • ルビーって何?
    Rubyはオープンソースのオブジェクト向けプログラム設計のサーバ側スクリプト言語であり、OS XにRuby Podfileが付属しているのはRubyスクリプトによって解析されている.
    CocoaPodsのインストール
    sudo gem install cocoapods
    

    GemはRubyモジュール(Gemsという)のパッケージマネージャです.パッケージ情報と、インストール用のファイルが含まれます.
    インストールの問題
  • 国内ネットワーク環境接続不能ソース
    ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ECONNRESET: Connection reset by peer - SSL_connect
    
    解決方法:国内ミラーソース
    gem sources --remove https://rubygems.org/
    gem sources -a https://gems.ruby-china.com/
    
  • を置き換える.
  • Ruby環境バージョンが低すぎる
    Unable to resolve dependencies: cocoapods requires cocoapods-core (=0.35.0),
    claide (~> 0.7.0), xcodeproj (~> 0.20.2), cocoapods-downloader (~> 0.8.0)
    
    解決方法:Ruby
    sudo gem update  --system
    
    のアップグレード入力後に
    ERROR:  While executing gem ... (Gem::FilePermissionError)  
    You don't have write permissions for the /usr/bin directory.
    
    が表示される権限がないためインストールディレクトリ
    sudo gem install cocoapods -n /usr/local/bin
    
  • を交換する必要がある.
    CocoaPodsの使用
    pod常用コマンド
    #         
    pod search  
    #   、                           
    pod setup
    #           
    pod repo update
    #     Podfile       
    pod init
    #  Podfile      
    pod install
    #  Podfile      
    pod update
    #  Podfile  /      ,         
    pod install --verbose --no-repo-update
    pod update --verbose --no-repo-update
    
    

    Podライブラリを検索しても公式サイトから直接検索できます
    集積CocoaPods
  • 作成Podfile端末は工程目録入力
    pod init
    
    に入るとPodfileを作成することができ、Swiftプロジェクト
        # use_frameworks!
    
    であればこの文は自動的に注釈を取り消し、依存するライブラリコンパイル生成を示す.frameworkdsではなくaプロジェクトに複数のTargetがある場合、1つのPodfileに複数セグメントテンプレート
      # Uncomment the next line to define a       global platform for your project
      # platform :ios, '9.0'
    
      target 'TargetName' do
      # Uncomment the next line if you're using Swift or would like to    use dynamic frameworks
      # use_frameworks!
    
      # Pods for TargetName
    
       end
    
    が生成するサードパーティライブラリ警告
    platform :ios, '9.0'
    #       
    inhibit_all_warnings!
    
    target 'TargetName' do
       #     ReactiveObjC   ,            pod  。
       pod 'xxx', '~> 1.0.0', :inhibit_warnings => false
    
    end
    
  • が消去される.
  • 編集Podfile
    pod 'xxx' :            。
    pod 'xxx', '1.0' :   1.0  。
    pod 'xxx', '~>1.0':             1.0 <=    < 2.0
       ~>1.0.0,               1.0.0 <=    < 1.1.0
    pod 'xxx', '>1.0':     1.0   
    pod 'xxx', '>=1.0':   1.0      
    pod 'xxx', '<1.0':     1.0   
    pod 'xxx', '<=1.0':       1.0   
    pod 'xxx', :path => '         /xxx.podspec' #                  (podspec         )。
    pod 'xxx', :git => 'git    ' #    git           。
    pod 'xxx', :git => '         ', :tag => '2.2.2' :#     :tag        tag 。         :branch => '   '          ,  :commit => 'commit '       。
    
    複数のプライベートライブラリを使用する場合は、Podfileで直接sourceの追加を開始できますが、必要なすべてのsourceを追加する必要があります.そうしないと、ターゲットライブラリCocoaPods共通ライブラリインデックスアドレス
    source 'https://github.com/CocoaPods/Specs.git'
    
  • が見つかりません.
  • サードパーティ製ライブラリ
    pod install
    pod update
    
    のインストール/更新インストールが完了するとPodsディレクトリ、Podfileが作成する.lockファイル、および.xcworkspaceファイル以降のプロジェクトはすべて.xcworkspaceはPodsディレクトリを開いて第三者ライブラリをダウンロードし、このディレクトリに参加する必要がある.gitignoreファイルでは、gitが/Podsを発行してinstallコマンドを実行するときにPodfileがチェックされないようにします.ロックファイルは、ない場合はPodfileを作成します.ロックは作成時にインストールされた依存ライブラリのバージョンを記録し、ディレクトリの下にPodfileがある場合.ロックファイルの場合podはPodfileに従う.ロックに記録されたバージョンのインストール.そうでない場合、Podfileで指定されたバージョンまたは最新バージョンupdateコマンドをインストールすると、指定されていないバージョンのライブラリが更新され、Podfileが更新されます.lockだから、共同開発の時、一人が依存ライブラリのバージョンを更新するたびにPodfileを提出しなければならない.lockは、他の人が引き出した後、updateではなくinstallコマンドを使用してPod依存ライブラリを更新し、統一バージョンが最新バージョンライブラリに更新できないことを発見した場合、pod setupを実行してローカル倉庫インデックス
  • を更新します.
    CocoaPodsの削除
  • Target->Build Phases,[CP]Check Pods Manifestを削除する.lockおよび[CP]Copy Pods Resources
  • 削除項目Pod関連参照
  • プロジェクトディレクトリの下のPodファイル
  • を削除
    CocoaPods倉庫を作る
  • フレームワークエンジニアリングを作成しgit倉庫
  • を構築する
  • 編集工事打tag
  • プライベートRepo gitウェアハウス
  • の作成
  • Podプロファイル
    pod spec create XXX
    
    を作成する生成する.podspecファイル、内容は以下の
     name:   
     version:    ,        ,      ,     git tag
     summary:    , pod search       。
     description:    
     homepage:    
     license:    
     author:  
     source:  git  
     platform:    ios  
     source_files:   (    .h .m)
     public_header_files:   (.h  )
     resources:    (          mainBundle )
     resource_bundles:    (              bundle )
     frameworks:       
     vendored_frameworks:        
     libraries:      
     vendored_libraries:          
     dependency:        
    
    公式例
  •     Pod::Spec.new do |spec|  
        spec.name             = 'Reachability'
        spec.version          = '3.1.0'
        spec.license          = { :type => 'BSD' }
        spec.homepage         = 'https://github.com/tonymillion/Reachability'
        spec.authors          = { 'Tony Million' => '[email protected]' }
        spec.summary          = 'ARC and GCD Compatible Reachability Class for iOS and macOS.'
        spec.source           = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
        spec.source_files     = 'Reachability.h,m'
        spec.framework        = 'SystemConfiguration'
        spec.requires_arc     = true
        end
    
  • 検証プロファイルこのコマンドを使用してローカル検証正当性
    pod lib lint
    
    より詳細な構成方法は、公式サイトでpush repoで自動的に検証できますが、warningまたはerrorが検証されている場合はpushできません.--allow-warnings無視警告
  • を追加できます.
  • 追加/プッシュrepo
    pod repo add [repo ] [repo git  ]
    pod repo push [repo ] [podspec    ]
    
    プッシュ完了pod spec lintを使用してネットワークチェックを行い、sourceが指定tag
  • によって
    CocoaPod動作原理
    オペレーションプロセス
  • 分析依存
  • 検査工事target
  • Podfile変化を検索
  • 解析Podfile
  • 比較詳細ファイル
  • ダウンロード依存
  • インストール依存
  • Podエンジニアリングの作成
  • プロジェクト作成
  • 依存ソースファイル
  • を追加
  • framework
  • を追加
  • libraries
  • を追加
  • リソースファイル
  • を追加
  • リンクヘッダファイル
  • インストール依存項目target
  • podエンジニアリングファイル
  • に書き込む
  • 書き込みlockfile
  • 書きmanifest
  • 統合工事
  • 統合target
  • インデックスディレクトリ構造
    ~/.cocoapods/repos
    
    .
    ├── Specs
        └── [SPEC_NAME]
            └── [VERSION]
                └── [SPEC_NAME].podspec
    

    エンジニアリング構造
    Demo
    ├── Demo
    │   ├── Demo
    │   ├── Demo.xcodeproj
    │   ├── DemoTests
    │   └── DemoUITests
    ├── Demo.xcworkspace
    ├── PodFile
    ├── Podfile.lock
    └── Pods
        ├── AFNetworking
        │    ├── Source Files
        │    └── Support Files
        │         ├── AFNetworking-dummy.m
        │         ├── AFNetworking-prefix.pch
        │         └── AFNetworking.xcconfig
        ├── Headers
        ├── Manifest.lock
        ├── Pods.xcodeproj
        └── Target Support Files
             ├── Pods-Demo-acknowledgements.markdown
             ├── Pods-Demo-acknowledgements.plist
             ├── Pods-Demo-dummy.m
             ├── Pods-Demo-frameworks.sh
             ├── Pods-Demo-resources.sh
             ├── Pods-Demo.debug.xcconfig
             └── Pods-Demo.release.xcconfig
    
  • target support files
  • .xcconfig構成環境変数
  • CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
    GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
    HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" 
    "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" 
    "${PODS_ROOT}/Headers/Public/SDWebImage"
    OTHER_LDFLAGS = -framework "ImageIO"
    PODS_BUILD_DIR = ${BUILD_DIR}
    PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
    PODS_ROOT = ${SRCROOT}
    PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
    PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
    SKIP_INSTALL = YES
    
    CONFIGURATION_BUILD_DIR : buid location  
    GCC_PREPROCESSOR_DEFINITIONS : Clang preprocess  
    OTHER_LDFLAGS : link binary with libraries
    PRODUCT_BUNDLE_IDENTIFIER : packaging
    SKIP_INSTALL 
    
  • -dummy.m compile source補助純分類ライブラリコンパイル実現コンパイル
  • Pod target support files
  • -acknowledgement宣言ファイル
  • -framewrok.sh frameworkスクリプト
  • のインストール
  • -resource.shリソースファイルコピースクリプト
  • check pods manifest.lock実行時インストールリストとダウンロードリストが一致しているかどうかを確認する
  • copy pods resoources実行resourceコピー