來一發(fā)cocoapods相關吧

以前只會pod install....
有必要搞清楚cocoaPods到底在干嘛蹭沛。

CocoaPods是開發(fā) OS X 和 iOS 應用程序的一個第三方庫的依賴管理工具袁铐。利用CocoaPods嗜侮,可以定義自己的依賴關系(稱作pods)芹缔。
cocoaPods為我們做了兩件事:
1>在工程中引入第三方代碼會涉及到的工程文件的配置蚌堵,build phases和linker flags亏钩,它能自動配置編譯選項剑肯。
2>通過CocoaPods捧毛,可以很方便的查找到新的第三方庫。

CocoaPods是一個objc的依賴管理工具,而其本身是利用ruby的依賴管理gem進行構建的呀忧。

Cocoapods是用ruby寫的师痕,并由若干個ruby包(gems)構成的。在解析整合過程中而账,最重要的幾個gems分別是:
CocoaPods/CocoaPods ,
CocoaPods/Core,
CocoaPods/Xcodeproj

分別看下這幾個gems干了什么事兒

CocoaPods/CocoaPods

這是一個面向用戶的組件胰坟,每當執(zhí)行一個pod命令時,這個組件都將被激活福扬。該組件包括了所有使用CocoaPods涉及到的功能腕铸,并且還能通過調用所有其他的gems來執(zhí)行任務。

CocoaPods/Core

Core組件提供支持與CocoaPods相關文件的處理铛碑,文件主要是Podfile和podspecs狠裹。
podfile:是一個文件,用于定義項目所需要使用的第三方庫汽烦。該文件支持高度定制涛菠。
podspec:.podspec也是一個文件,該文件描述了一個庫是怎樣被添加到工程中的撇吞。它支持的功能有:列出源文件俗冻、framework、編譯選項和某個庫所需要的依賴等牍颈。

CocoaPods的安裝

MAC下自帶ruby迄薄,使用ruby的gem命令即可下載安裝:
sudo gem install cocoapods
pod setup

如果gem比較老,可以試試升級gem:
sudo gem update --system
另外煮岁,ruby的軟件源 https://rubygems.org 因為使用的是亞馬遜的云服務讥蔽,所以被墻了,需要更新一下ruby的源画机,將官方的ruby源替換成國內淘寶的源:
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l

CocoaPods的鏡像索引

所有的項目的Podspec文件都托管在https://github.com/CocoaPods/Specs冶伞。第一次執(zhí)行pod setup時,CocoaPods會將這些podspec索引文件更新到本地的~/.cocoapods/目錄下步氏,這個索引文件比較大响禽,有80M左右,所以第一次更新時非常慢荚醒。

使用CocoaPods

使用時需要新建一個名為Podfile的文件芋类,以如下格式,將依賴的庫名字寫在該文件中:
platform :ios
pod 'JSONKit', '~> 1.4'
pod 'Reachability', '~> 3.0.0'
pod 'ASIHTTPRequest'
pod 'RegexKitLite'

然后將編輯好的Podfile文件放到你的項目根目錄中界阁,執(zhí)行如下命令即可:
pod install
現(xiàn)在你的所有第三方庫都已經下載完成并且設置好了編譯參數(shù)和依賴梗肝。

關于Podfile.lock

當你執(zhí)行pod install之后,除了Podfile外铺董,CocoaPods還會生成一個名為Podfile.lock的文件,Podfile.lock應該加入到版本控制里面,不應該把這個文件加入到.gitignore中精续。因為Podfile.lock會鎖定當前各依賴庫的版本坝锰,之后如果多次執(zhí)行pod install不會更改版本,要pod update才會改Podfile.lock了重付。這樣多人協(xié)作的時候顷级,可以防止第三方庫升級時造成大家各自的第三方庫版本不一致。

為自己的項目創(chuàng)建podspec文件:

我們可以為自己的開源項目創(chuàng)建podspec文件确垫,首先通過如下命令初始化一個podspec文件:
pod spec create your_pod_spec_name
該命令執(zhí)行之后弓颈,CocoaPods會生成一個名為your_pod_spec_name.podspec的文件,然后我們修改其中的相關內容即可删掀。

如何編寫一個CocoaPods的spec文件
為自己的項目編寫Podspec文件:
初始化一個Podspec文件:
pod spec create weibo_ios_sdk_sso-oauth
該命令將在本目錄產生一個名為weibo_ios_sdk_sso-oauth.podspec的文件。

如何聲明第三方庫的代碼目錄和資源目錄,還有該第三方庫所依賴iOS核心框架和第三方庫吭从?
podspec文件大致如下:

Pod::Spec.new do |s|
  s.name     = 'ADVProgressBar'   //聲明庫的名稱篷牌。pod search命令就是根據(jù)s.name 和 s.summary作為搜索文本的
  s.version  = '0.0.1'    //聲明庫源代碼的版本
  s.license  = 'MIT'      //采取的授權版本
  s.summary  = 'Progress Bar Design with Percentage values.'    //聲明一個簡短的說明文檔
  s.homepage = 'https://github.com/appdesignvault'    //聲明庫的主頁
  s.author   = { 'appdesignvault' => 'appdesignvault' }    //庫的作者
  s.source   = { :git => 'https://github.com/appdesignvault/ADVProgressBar.git', :commit => 'f17b15c15574d6d101cd5fcfd58239e16e806647' }       //聲明源代碼的地址。對于很多第三方庫而言款票,在發(fā)布的時候都會打上一個tag控硼,如版本0.0.1就會打上一個名為v0.0.1的tag,但是但是weibo_ios_sdk_sso-oauth庫還未打上任何tag,我們可以選擇一個最新的commit來作為該庫0.0.1版的代碼艾少。以后我們可以根據(jù)該庫不同的版本創(chuàng)建相應的pod spec文件卡乾。
  s.platform = :ios  
  s.source_files = 'ADVProgressBar/Classes/*.{h,m}'
  s.resources = "ADVProgressBar/Resources/*.png"
  s.framework = 'UIKit'

  s.requires_arc = true  
end

weibo_ios_sdk_sso-oauth的目錄結構:

目錄結構

demo目錄保存一個示例項目,src才是庫的源代碼目錄缚够。src的目錄結構如下:

src的目錄結構

JSONKit目錄說明這個庫本身依賴于JSONKit第三方庫幔妨。我們可以在podspec文件中的s.dependency聲明段中聲明。
s.dependency 'JSONKit', '~>1.4'

SinaWeibo目錄才是包含了所有源代碼的目錄潮瓶,我們需要在s.source_files中聲明
s.source_files = 'src/SinaWeibo/.{h,m}'
前一部分src/SinaWeibo/是一個相對目錄陶冷,目錄的層級關系一定要跟代碼庫的保持一致。最后一部分
.{h,m}是一個類似正則表達式的字符串毯辅,表示匹配所有以.h和.m為擴展名的文件埂伦。

src/SinWeibo/目錄下還有一個SinaWeibo.bundle目錄,該目錄存放一些資源文件(如圖片等)思恐,這些文件并不需要進行編譯沾谜。可以使用s.resources聲明:
s.resources = "src/SinaWeibo/SinaWeibo.bundle//.png"
前一部分跟上面相同胀莹,
表示匹配所有子目錄基跑,.png表示所有以.png為擴展名的圖片文件。

weibo_ios_sdk_sso-oauth還依賴一個iOS的核心庫QuartzCore
s.framework = 'QuartzCore'

最終結果如下:

Pod::Spec.new do |s|
  s.name         = "weibo_ios_sdk_sso-oauth"
  s.version      = "0.0.1"
  s.summary  = 'weibo.com sso oauth, 微博sso認證登錄功能'
  s.homepage     = "https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth"
  s.license      = 'MIT'
  s.author       = {'mobileresearch' => 'mobileresearch'}
  s.source       = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d' }
  s.platform = :ios
  s.source_files = 'src/SinaWeibo/*.{h,m}'
  s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
  s.framework  = 'QuartzCore'
  s.dependency 'JSONKit', '~> 1.4'  //
end

可以將該spec文件保存到本機的~/.cocoapods/master/目錄中僅供自己使用描焰,也可以將其提交到CocoaPods/Specs代碼庫中媳否。下面是將其保存到本機中:

$ mkdir -p ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
$ cp weibo_ios_sdk_sso-oauth.podspec ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1

使用私有的pods

我們可以直接指定某一個依賴的podspec栅螟,這樣就可以使用公司的私有庫。該方案有利于使企業(yè)內部的公共項目支持CocoaPods篱竭。

pod 'MyCommon', :podspec => 'https://yuantiku.com/common/myCommon.podspec'

不更新podspec

CocoaPods在執(zhí)行pod install和pod update時力图,會默認先更新一次pod spec索引。使用--no-repo-update參數(shù)可以禁止其做索引更新操作

pod install --no-repo-update
pod update --no-repo-update


原理:
CocoaPods是將所有的依賴庫都放到另一個名為Pods項目中掺逼,然后讓主項目依賴Pods項目吃媒,這樣,源碼管理工作都從主項目移到了Pods項目中吕喘。
Pods項目最終會編譯成一個名為libPods.a的文件赘那,主項目只需要依賴這個.a問價即可。
對于資源文件氯质,CocoaPods提供了一個名為Pods-resources.sh的bash腳本募舟,該腳本在每次項目編譯的時候都會執(zhí)行,將第三方庫的各種資源文件復制到目標目錄中病梢。
CocoaPods通過一個名為Pods.xcconfig的文件夾在編譯時設置所有的依賴和參數(shù)胃珍。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜓陌,隨后出現(xiàn)的幾起案子觅彰,更是在濱河造成了極大的恐慌,老刑警劉巖钮热,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件填抬,死亡現(xiàn)場離奇詭異,居然都是意外死亡隧期,警方通過查閱死者的電腦和手機飒责,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仆潮,“玉大人宏蛉,你說我怎么就攤上這事⌒灾茫” “怎么了拾并?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹏浅。 經常有香客問我嗅义,道長,這世上最難降的妖魔是什么隐砸? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任之碗,我火速辦了婚禮,結果婚禮上季希,老公的妹妹穿的比我還像新娘褪那。我一直安慰自己幽纷,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布博敬。 她就那樣靜靜地躺著霹崎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冶忱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天境析,我揣著相機與錄音囚枪,去河邊找鬼。 笑死劳淆,一個胖子當著我的面吹牛链沼,可吹牛的內容都是我干的。 我是一名探鬼主播沛鸵,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼括勺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了曲掰?” 一聲冷哼從身側響起疾捍,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栏妖,沒想到半個月后乱豆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡吊趾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年宛裕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片论泛。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡揩尸,死狀恐怖,靈堂內的尸體忽然破棺而出屁奏,到底是詐尸還是另有隱情岩榆,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布了袁,位于F島的核電站朗恳,受9級特大地震影響,放射性物質發(fā)生泄漏载绿。R本人自食惡果不足惜粥诫,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崭庸。 院中可真熱鬧怀浆,春花似錦谊囚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沙合,卻和暖如春奠伪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背首懈。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工绊率, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人究履。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓滤否,卻偏偏與公主長得像,于是被迫代替她去往敵國和親最仑。 傳聞我的和親對象是個殘疾皇子藐俺,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • 項目組件化、平臺化是技術公司的共同目標泥彤,越來越多的技術公司推崇使用pod管理第三方庫以及私有組件欲芹,一方面使項目架構...
    swu_luo閱讀 21,469評論 0 39
  • CocoaPods 是什么? CocoaPods 是一個負責管理 iOS 項目中第三方開源庫的工具全景。CocoaPo...
    朝洋閱讀 25,632評論 3 51
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby耀石,可以先安裝xcode,再安裝macport 爸黄,最后...
    山天大畜閱讀 1,842評論 0 1
  • 一. CocoaPods的介紹 什么是CocoaPods滞伟?CocoaPods是一個負責管理iOS項目中第三方開源庫...
    輝712閱讀 3,913評論 0 7
  • 偏愛 獨飲孤寂苦酒, 邀明月同我方休炕贵。 擁擠街頭梆奈, 唯癡心無緣牽手。 圖片發(fā)自簡書App 薄曦燼紅燭称开, 舊夢...
    輕風逐目閱讀 211評論 0 0