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のインストール
GemはRubyモジュール(Gemsという)のパッケージマネージャです.パッケージ情報と、インストール用のファイルが含まれます.
インストールの問題国内ネットワーク環境接続不能ソース を置き換える. Ruby環境バージョンが低すぎる を交換する必要がある.
CocoaPodsの使用
pod常用コマンド
Podライブラリを検索しても公式サイトから直接検索できます
集積CocoaPods作成Podfile端末は工程目録入力 が消去される.編集Podfile が見つかりません.サードパーティ製ライブラリ を更新します.
CocoaPodsの削除 Target->Build Phases,[CP]Check Pods Manifestを削除する.lockおよび[CP]Copy Pods Resources 削除項目Pod関連参照 プロジェクトディレクトリの下のPodファイル を削除
CocoaPods倉庫を作るフレームワークエンジニアリングを作成しgit倉庫 を構築する編集工事打tag プライベートRepo gitウェアハウス の作成 Podプロファイル 検証プロファイルこのコマンドを使用してローカル検証正当性 を追加できます.追加/プッシュrepo によって
CocoaPod動作原理
オペレーションプロセス分析依存 検査工事target Podfile変化を検索 解析Podfile 比較詳細ファイル ダウンロード依存 インストール依存 Podエンジニアリングの作成 プロジェクト作成 依存ソースファイル を追加 framework を追加 libraries を追加リソースファイル を追加リンクヘッダファイル インストール依存項目target podエンジニアリングファイル に書き込む書き込みlockfile 書きmanifest 統合工事 統合target インデックスディレクトリ構造
エンジニアリング構造 target support files .xcconfig構成環境変数 -dummy.m compile source補助純分類ライブラリコンパイル実現コンパイル Pod target support files -acknowledgement宣言ファイル -framewrok.sh frameworkスクリプト のインストール -resource.shリソースファイルコピースクリプト check pods manifest.lock実行時インストールリストとダウンロードリストが一致しているかどうかを確認する copy pods resoources実行resourceコピー
CocoaPodsとは
CocoaPodsはRubyに基づいて作成されたアプリケーション・レベルの依存マネージャで、4.5万個のライブラリが含まれています.https://cocoapods.org/
CocoaPods組成
ルビーって何?
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/
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
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
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の削除
CocoaPods倉庫を作る
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
無視警告pod repo add [repo ] [repo git ]
pod repo push [repo ] [podspec ]
プッシュ完了pod spec lint
を使用してネットワークチェックを行い、sourceが指定tag CocoaPod動作原理
オペレーションプロセス
~/.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
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