Cocoapod詳解

引言:What? 搞iOS不知道CocoaPod

首先給出一個鏈接,通篇文章將完全是參照闻妓,官網(wǎng)的內(nèi)容進(jìn)行整理和總結(jié),也建議大家閱讀官網(wǎng)的文章,網(wǎng)上文件大多尋章摘句激涤。
CocoaPod官網(wǎng)的使用指南
CocoaPod官網(wǎng)
以上兩個鏈接,可謂學(xué)習(xí)CocoaPod最好最全面的資料

一判呕、What is CocoaPods

CocoaPods manages library dependencies for your Xcode projects.
The dependencies for your projects are specified in a single text file called a Podfile. CocoaPods will resolve dependencies between libraries, fetch the resulting source code, then link it together in an Xcode workspace to build your project.
Ultimately the goal is to improve discoverability of, and engagement in, third party open-source libraries by creating a more centralised ecosystem.

概括起來可以說明為是 CocoaPod通過Podfile文件(一種通過簡單文本描述來指定依賴庫的文件)可以解決類庫依賴倦踢,同時通過workSpace的形式添加到你的Xcode工程中。
其中繼目的就是建立一個更加中心化的生態(tài)系統(tǒng)來提升第三方庫管理侠草。

二辱挥、Getting Started

To update CocoaPods you simply install the gem again

$ [sudo] gem install cocoapods

Or for a pre-release version

$ [sudo] gem install cocoapods --pre

任何安裝問題可以點開該文章的鏈接,其中CocoaPod依賴于Ruby

三边涕、Using CocoaPods

生成一個CocoaPods

$ pod init

具體的Podfile語法

platform :ios, '9.0'
target 'MyApp' do
  pod 'ObjectiveSugar'
end

之后的步驟

$ pod install

四晤碘、pod install vs. pod update

bundler, RubyGems or composer也有對對應(yīng)的語言,CocoaPod設(shè)計的和他們類似
pod install
適用于獲取pod,當(dāng)你編輯Podfile中存在add, update, remove a pod的需求的時候功蜓,可以使用該命令园爷。

  • 根據(jù)Podfile.lock的內(nèi)容,搞定不在Podfile.lock里面的pods的依賴式撼,不會去嘗試檢查更新的版本童社。
  • 對于不存在Podfile.lock里面的pod,將按照podfile里面的內(nèi)容進(jìn)行搜索對應(yīng)的版本

pod outdated
CocoaPods將羅列出在Podfile.lock擁有更新版本的pod,也就說如果你執(zhí)行pod update PODNAME,如果新的版本依然符合Podfile里面的描述端衰,那么將會被更新

pod update
兩種形式叠洗,pod update PODNAME將更新指定的pod,否則將更新所有。前提是符合Podfile里面的描述內(nèi)容

注意
基于podfile.lock的作用旅东,所以當(dāng)倉庫共享的時候灭抑,需要注意要提交podfile.lock。以方便統(tǒng)一的來鎖定依賴庫抵代。

五腾节、The Podfile

文件整體框架

簡單的例子

target 'MyApp' do
  use_frameworks!
  pod 'Alamofire', '~> 3.0'
end

復(fù)雜的例子

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Artsy/Specs.git'

platform :ios, '9.0'
inhibit_all_warnings!

target 'MyApp' do
  pod 'GoogleAnalytics', '~> 3.1'

  # Has its own copy of OCMock
  # and has access to GoogleAnalytics via the app
  # that hosts the test target

  target 'MyAppTests' do
    inherit! :search_paths
    pod 'OCMock', '~> 2.0.1'
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    puts target.name
  end
end

如果想多個targets共用一些pod,考慮使用abstract_target

# There are no targets called "Shows" in any Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'
  pod 'Fabric'

  # Has its own copy of ShowsKit + ShowWebAuth
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end
end

隱藏抽象target,如下相當(dāng)于隱晦地使用抽象target

pod 'ShowsKit'
pod 'Fabric'

# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do
  pod 'ShowWebAuth'
end

# Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
  pod 'ShowTVAuth'
end
具體的語法細(xì)則

指定版本規(guī)則
不指定版本

pod 'SSZipArchive'

凍結(jié)版本

pod 'Objection', '0.9'

邏輯運算符指定

  • '> 0.1' Any version higher than 0.1
  • '>= 0.1' Version 0.1 and any higher version
  • '< 0.1' Any version lower than 0.1
  • '<= 0.1' Version 0.1 and any lower version

~>來指定

  • '~> 0.1.2' Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher
  • '~> 0.1' Version 0.1 and the versions up to 1.0, not including 1.0 and higher
  • '~> 0' Version 0 and higher, this is basically the same as not having it.

指定本地文件機(jī)制

pod 'Alamofire', :path => '~/Documents/Alamofire'

指定對應(yīng)的git倉庫
默認(rèn)使用master分支

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用其它分支

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'

指定tag

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

指定對應(yīng)commit

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'

六、Making a CocoaPod

簡單的建立CocoaPod可以參考以上連接,細(xì)化請看如下說明案腺。

Using Pod Lib Create

pod lib create SLLibrary

默認(rèn)的模板如下圖庆冕,當(dāng)然我們也可以采用自己的模板,通過增加如下參數(shù)為--template-url=URL


image.png

七劈榨、Getting setup with Trunk

CocoaPods Trunk
CocoaPods Trunk is an authentication and CocoaPods API service. To publish new or updated libraries to CocoaPods for public release you will need to be registered with Trunk and have a valid Trunk session on your current device. You can read about Trunk's history and development on the blog, and about private pods for yourself or your team.

使用你的email在當(dāng)前設(shè)備上注冊一個會話:

$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

收到郵件之后访递,記得需要到郵箱里面激活下。當(dāng)然也可以通過以下命令來查案你電腦中trunk的會話信息同辣。

pod trunk me

Deploying a library

  • Lints your Podspec locally

pod spec lint [NAME.podspec]

  • 成功之后就可以推送到CocoaPod
    如果推送到Public的使用

pod trunk push [NAME.podspec]
私有庫的話就推送到
pod repo push REPO [NAME.podspec]

  • 推送成功后拷姿,trunk將會發(fā)布一個權(quán)威的json代表陳述你的Podspec

添加其他人作為貢獻(xiàn)者
// For example, to add kyle@cocoapods.org to the library ARAnalytics:

$ pod trunk add-owner ARAnalytics kyle@cocoapods.org

八、Private Pods

Private Pods
CocoaPods is a great tool not only for adding open source code to your project, but also for sharing components across projects. You can use a private Spec Repo to do this.

具體步驟

    1. Create a Private Spec Repo
      You do not need to fork the CocoaPods/Specs Master repo. Make sure that everyone on your team has access to this repo, but it does not need to be public.
    1. Add your Private Repo to your CocoaPods installation

$ pod repo add REPO_NAME SOURCE_URL

To check if your installation is successful and ready to go:

$ cd ~/.cocoapods/repos/REPO_NAME
$ pod repo lint .
    1. Add your Podspec to your repo
      Make sure you've tagged and versioned your source appropriately, then run:

$ pod repo push REPO_NAME SPEC_NAME.podspec

This will run pod spec lint, and take care of all the little details for setting up the spec in your private repo.
The structure of your repo should mirror this:

.
├── Specs
    └── [SPEC_NAME]
        └── [VERSION]
            └── [SPEC_NAME].podspec

Your private Pod is ready to be used in a Podfile. You can use the spec repository with the source directive in your Podfile as shown in the following example:

source 'URL_TO_REPOSITORY'

如何移除私有庫

pod repo remove [name]

九旱函、所有的命令匯總

十响巢、上傳之后如何提高自己的庫搜索排名

附錄:

參考鏈接:

CocoaPods Guides

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棒妨,隨后出現(xiàn)的幾起案子踪古,更是在濱河造成了極大的恐慌,老刑警劉巖券腔,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伏穆,死亡現(xiàn)場離奇詭異,居然都是意外死亡纷纫,警方通過查閱死者的電腦和手機(jī)蜈出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涛酗,“玉大人,你說我怎么就攤上這事偷厦∩烫荆” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵只泼,是天一觀的道長剖笙。 經(jīng)常有香客問我,道長请唱,這世上最難降的妖魔是什么弥咪? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮十绑,結(jié)果婚禮上聚至,老公的妹妹穿的比我還像新娘。我一直安慰自己本橙,他們只是感情好扳躬,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般贷币。 火紅的嫁衣襯著肌膚如雪击胜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天役纹,我揣著相機(jī)與錄音偶摔,去河邊找鬼。 笑死促脉,一個胖子當(dāng)著我的面吹牛辰斋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘲叔,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼亡呵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硫戈?” 一聲冷哼從身側(cè)響起锰什,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丁逝,沒想到半個月后汁胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡霜幼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年嫩码,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罪既。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铸题,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琢感,到底是詐尸還是另有隱情丢间,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布驹针,位于F島的核電站烘挫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柬甥。R本人自食惡果不足惜饮六,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苛蒲。 院中可真熱鬧卤橄,春花似錦、人聲如沸臂外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辜膝,卻和暖如春无牵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厂抖。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工茎毁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忱辅。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓七蜘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墙懂。 傳聞我的和親對象是個殘疾皇子橡卤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容