iOS 玩轉(zhuǎn)CocoaPods

導(dǎo)語:

有時(shí)候看到其他人 source開源時(shí)候用pod xxx 配置在你的Podfile文件中挽鞠,執(zhí)行下pod install 或者 pod update 胸梆,代碼瞬間就到你的pod庫, 頓時(shí)覺得高大上攻柠。那是怎么做到的呢?

Agenda:

  • CocoaPods 的由來
  • Github 使用
  • PodSpec介紹
  • PodSpec上傳
  • 遇到的坑及解決方案

一,CocoaPods 的由來

Android app目前通過gradle來管理和配置你的source,比如需要用到Eventbus只要在build.gradle中配置下

dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
}

iOS必須要有類似的神器啊:CocoaPod就是這把神器.
在CocoaPod沒出來之前iOS要用引用第三庫的做法如下:
比如引用AFNetWorking庫给赞,需要去下載源碼,然后需要配置對應(yīng)的編譯環(huán)境等鸥昏。當(dāng)AFNetWorking庫升級塞俱,所有過程又來一遍。過程太過復(fù)雜啦吏垮。
CocoaPods因上面的原因應(yīng)運(yùn)而生障涯,它目前是iOS最有名的類庫管理工具了罐旗,通過cocoaPods,只需要一行命令就可以完全解決唯蝶,當(dāng)然前提是你必須正確設(shè)置它九秀。目前絕大部分有名的開源類庫,都支持CocoaPods粘我。所以鼓蜒,作為iOS程序員的我們,掌握CocoaPods的使用是必不可少的基本技能了征字。

如果你mac上沒有安裝pod 都弹,
sudo gem install cocoapods
具體怎么安裝可以參考如下鏈接:
http://www.reibang.com/p/9e4e36ba8574

開發(fā)iOS應(yīng)用用到pod 的主要命令如下:

pod help-->查看pod命令的幫助
pod search --> Search for pods(搜索pod)
pod trunk   -->   Interact with the CocoaPods API (e.g. publishing new specs) 上傳source到trunk
pod spec     -->     Manage pod specs//管理pod spec
pod install  -->Install project dependencies according to versions from a  Podfile.lock //安裝項(xiàng)目中的依賴項(xiàng)目
pod update -->Update outdated project dependencies and create new Podfile.lock//跟新依賴項(xiàng)目并且更新Podfile.lock
pod init -->Generate a Podfile for the current directory//創(chuàng)建pod file文件

其中Podfile.lock的扮演的角色非常重要,具體作用可以參考如下鏈接
http://m.blog.csdn.net/muzhenhua/article/details/45174071

二匙姜,Github 使用

為嘛要介紹GitHub呢畅厢?CocoaPods只是做為項(xiàng)目的具體管理者,podspec文件就放在cocoapod官網(wǎng)上氮昧,供大家搜索框杜。但是實(shí)際源碼則是存儲在Github上,那怎么使用Github就非常關(guān)鍵啦袖肥。

  • 創(chuàng)建項(xiàng)目
    登錄你的Github,然后去創(chuàng)建一個(gè)新的倉庫咪辱,如下圖創(chuàng)建GKFramework參考


    image.png
  • 上傳項(xiàng)目
    下載該倉庫,通過git clone 椎组。clone一個(gè)倉庫下來
    怎么clone如下圖clone with https.


    image.png

在終端輸入

//git clone后面的是你對應(yīng)的git 地址
git clone https://github.com/wongstar/GKFramework.git

然后在這個(gè)倉庫中修改或者添加你需要對應(yīng)類或者文件等油狂。

然后通過下面命令

//add 所有的到倉庫
git add *
//提交commit信息
git commit
//提交本地到遠(yuǎn)端
git push origin master
  • 打tag
    tag是后續(xù)spec中需要用到,以后升級至需要升級對應(yīng)tag.
//獲取當(dāng)前有多少tag
git tag
//創(chuàng)建tag 0.0.1版本
git tag 0.0.1
  • update tag到Github上
    上傳tag到Github服務(wù)器上庐杨,這個(gè)比較簡單
 git  push origin 0.0.1
  • 查看tag
    如下圖所示 :點(diǎn)擊branch 然后查看Tags欄目


    image.png

至此源碼已經(jīng)上傳到Github服務(wù)器上去了选调,但是Pod服務(wù)器上目前還沒有對應(yīng)的描述,下面接著介紹PodSpec,以及如何上傳到cocoapod服務(wù)器上去.

三,PodSpec介紹

在mac 上創(chuàng)建一個(gè)podspec,在Terminal終端上輸入下面命令:

//注GKFramework.podspec是你的框架名稱
pod spec create GKFramework.podspec

然后編輯podspec文件灵份。如下GKFramework.podspec

Pod::Spec.new do |s|
  s.name         = "GKFramework" //定義名稱
  s.version      = "0.0.5" //tag版本
  s.summary      = "A Sample.so you can use it" //簡介,以后search到簡介
  s.description  = <<-DESC
                   this is gk framework, use it for test your framework. we can use it as framework.
                   DESC
//s.description 定義具體的描述
  s.homepage     = "https://github.com/wongstar/GKFramework"
  s.license      = { :type => "MIT", :file => "LICENSE" }//具體license
  s.author             = { "wongstar" => "wongstar.iac@gmail.com" }
  s.platform     = :ios, "8.0"http://build的平臺
  s.ios.deployment_target = "7.0"http://最低開發(fā)

  s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }
  s.source_files  = 'Classes/**/*'
  #s.public_header_files='GKFramework/Classes/**/*.h'



end

 s.description  = <<-DESC
                   this is gk framework, use it for test your framework. we can use it as framework.
                   DESC
s.description定義了描述該pod是用來做什么的仁堪。注意這里的寫法

s.description格式要求必須是下面的這樣描述
<<-DESC
這里面你定義的描述.必須用這個(gè)格式
DESC

  s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }

必須定義s.source,git鏈接必須是你上傳過的source, tag定義為你在github上對source打的tag.

s.source_files  = 'Classes/**/*' 定義為:Classes目錄下的所有文件
s.dependency:依賴庫填渠,不能依賴未發(fā)布的庫
eg: s.dependency  = 'AFNetworking'

四,PodSpec上傳

  • 在 cocoapods 注冊
//email代表你的email弦聂,username代表你的用戶名
 pod trunk register email "username"

執(zhí)行完上面的命令,你的郵箱會收到一封確認(rèn)信氛什,點(diǎn)擊確認(rèn)驗(yàn)證一下就ok啦莺葫。

  • 判斷podspec正確行?
//GKFramework.podspec為你對應(yīng)的podspec文件
pod  spec lint GKFramework.podspec

如果是正確的spec會出現(xiàn)下面的提示:

image.png
  • 上傳到cocoapod服務(wù)器
//注:GKFramework.podspec為你對應(yīng)spec的名稱
pod trunk push GKFramework.podspec

上傳成功如下圖所示:


image.png

五,遇到的坑及解決方案

  • source file沒找到
    [iOS] file patterns: The source_files pattern did not match any file.
    確保你的source file是否配置正確枪眉,如你的spec目錄和source對應(yīng)的關(guān)系
  • cocoapods環(huán)境問題
    unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation
    執(zhí)行下面命令
sudo gem install cocoapods --pre

如果執(zhí)行上面的有問題出現(xiàn)
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj
執(zhí)行下面命令

sudo gem install -n /usr/local/bin cocoapods
  • Swift 版本問題
    [!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a .swift-version file to set the version for your Pod. For example to use Swift 2.3, run:
echo "2.3" > .swift-version.

驗(yàn)證失敗捺檬,會出現(xiàn)一系列錯(cuò)誤,但也不是無根可尋贸铜,其中出現(xiàn)錯(cuò)誤頻率最多的提示是

  • source files沒找到
    ERROR | [iOS] file patterns: The source_files pattern did not match any file.

此錯(cuò)誤的原因是沒有找到匹配的文件堡纬。

解決方案:
手動創(chuàng)建文件聂受,具體操作方法如下
終端輸入:
open /Users/icepoint/Library/Caches/CocoaPods/Pods/External/GKFramework/035cb9aa62b9d49f904fad1119b83da4-aebfe
進(jìn)入相應(yīng)文件夾,創(chuàng)建文件夾與source_files文件路徑對應(yīng)
GKFramework/GKFramework/Classes
文件結(jié)構(gòu)如下:
GKFramework
└── 035cb9aa62b9d49f904fad1119b83da4-aebfe
├── GKFramework
│ └── GKFramework
│ └──Classes
└── LICENSE #開源協(xié)議 默認(rèn)MIT

Classes文件夾存放自己的庫文件

  • pod search GKFramework 搜索不到
    Unable to find a pod with name, author, summary, or description matching GKFramework.
    解決辦法:
    1.pod install --repo-update
    2.或者全部刪除:使用命令:rm ~/Library/Caches/CocoaPods/search_index.json
    重新search GKFramework
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烤镐,一起剝皮案震驚了整個(gè)濱河市蛋济,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炮叶,老刑警劉巖碗旅,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異镜悉,居然都是意外死亡祟辟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門侣肄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來川尖,“玉大人,你說我怎么就攤上這事茫孔。” “怎么了被芳?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵缰贝,是天一觀的道長。 經(jīng)常有香客問我畔濒,道長剩晴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任侵状,我火速辦了婚禮赞弥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趣兄。我一直安慰自己绽左,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布艇潭。 她就那樣靜靜地躺著拼窥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹋凝。 梳的紋絲不亂的頭發(fā)上鲁纠,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音鳍寂,去河邊找鬼改含。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迄汛,可吹牛的內(nèi)容都是我干的捍壤。 我是一名探鬼主播骤视,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼白群!你這毒婦竟也來了尚胞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤帜慢,失蹤者是張志新(化名)和其女友劉穎笼裳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粱玲,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躬柬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抽减。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允青。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卵沉,靈堂內(nèi)的尸體忽然破棺而出颠锉,到底是詐尸還是另有隱情,我是刑警寧澤史汗,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布琼掠,位于F島的核電站,受9級特大地震影響停撞,放射性物質(zhì)發(fā)生泄漏瓷蛙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一戈毒、第九天 我趴在偏房一處隱蔽的房頂上張望艰猬。 院中可真熱鬧,春花似錦埋市、人聲如沸冠桃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腊满。三九已至,卻和暖如春培己,著一層夾襖步出監(jiān)牢的瞬間碳蛋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工省咨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肃弟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像笤受,于是被迫代替她去往敵國和親穷缤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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

  • 一箩兽、創(chuàng)建的github倉庫原文地址 1 進(jìn)入Github網(wǎng)站www.github.com登陸自己的賬號后 2 建立...
    freesan44閱讀 3,921評論 2 12
  • 項(xiàng)目組件化津肛、平臺化是技術(shù)公司的共同目標(biāo),越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件汗贫,一方面使項(xiàng)目架構(gòu)...
    swu_luo閱讀 21,596評論 0 39
  • 一. CocoaPods的介紹 什么是CocoaPods身坐?CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫...
    輝712閱讀 3,916評論 0 7
  • CocoaPods操作手冊 本文檔介紹了啥? 為什么要使用CocoaPods落包? 如何安裝CocoaPods部蛇? Po...
    風(fēng)小鉆閱讀 7,542評論 1 10
  • 一個(gè)外星人的房間 你敢進(jìn)去嗎? 我就住在這里咐蝇,多么好的1618涯鲁,希望未來好運(yùn) 今天的講課很成功,因?yàn)榧夹g(shù)角度征服了...
    陳東紅先生閱讀 483評論 0 2