使用CocoaPods管理iOS庫---制作pod篇

使用CocoaPods管理iOS庫

我 :“ 2017年還有多久?”

我 :“ ‘冬天來了,春天還會(huì)遠(yuǎn)嗎?’,馬上就要步入18年尤筐,您說17年還有多久汇荐。您就看著吧,下個(gè)月到處都是17年年終總結(jié)盆繁!”

I'sorry,進(jìn)入正題

我個(gè)人寫本文的目的只有一個(gè):讓你輕松制作自己的pod掀淘。可能是因?yàn)槲?笨油昂?網(wǎng)上的教程革娄,我看的有點(diǎn)??(暈),不過最終還是摸索出來了冕碟,并且明白了123拦惋,so,請(qǐng)?jiān)试S我以我“笨”的方式來讓你輕松。

第一步:在GitHub上新建一個(gè)倉庫

說明:由于自己創(chuàng)建PPKit時(shí)沒有截圖安寺,這里為了說明厕妖,新建了PPKit1來截圖說明,諒解挑庶!

新建倉庫

第二步:clone項(xiàng)目到本地叹放,并創(chuàng)建PPKit1.podspec文件

終端之創(chuàng)建PPKit1.podspec
具體clone與創(chuàng)建.podspec文件的命令如下:
//2.1(具體路徑,看你自己放置)
cd /Users/peijianbo/Documents/MTTest 
//2.2 
git clone https://github.com/chinesemanbobo/PPKit1.git 
//2.3 (切換到開源庫名相同的目錄)
cd /Users/peijianbo/Documents/MTTest/PPKit1
//2.4 (很重要的第一步挠羔,create后面必須是開源庫名,此處是PPKit1)
pod spec create PPKit1

其中最關(guān)鍵的是(請(qǐng)自動(dòng)替換PPKit1為自己的庫名)埋嵌,當(dāng)然cd對(duì)應(yīng)的文件目錄也不要弄錯(cuò):

pod spec create PPKit1

等到終端看到如上圖綠色文字Specification created at PPKit1.podspec破加,這一步就成功了。

第三步:配置PPKit.podspec雹嗦,尤其是里面的各種目錄的.source_files文件要注意

注意:此處開始范舀,我們?cè)倩氐絇PKit。(如果你自己的庫了罪,請(qǐng)?zhí)鎿QPPKit為你的庫名來閱讀)锭环。

3.1 打開PPKit.podspec文件(推薦用Sublime Text打開),先閱讀里面各種#后面的注釋說明泊藕,尤其有必要讀讀開頭的3行注釋

此處辅辩,為什么覺得很有必要讀讀開頭的3行注釋,都是自己血與淚的教訓(xùn)娃圆!我自己當(dāng)時(shí)直接忽略這些注釋玫锋,一心急著想搞定,結(jié)果讼呢,折騰很久撩鹿,后頭再看注釋,才明白好多悦屏,然后慢慢修改节沦,才OK的键思。不過,你也可以不看甫贯,說了讓你輕松吼鳞。

下面的是開頭的3行注釋,容我簡(jiǎn)單翻譯與介紹下:

//1.
Be sure to run `pod spec lint PPKit.podspec' to ensure this is a valid spec and to remove all comments including this before submitting the spec.
//2.
To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
//3.
To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
  1. 在你提交PPKit.podspec文件到CocoaPods前获搏,務(wù)必要在命令行運(yùn)行 pod spec lint PPKit.podspec 來確保.podspec有效赖条,并且刪除所有的注釋,包括這句(Be sure ... submitting the spec.)常熙。
  2. 你可以在http://docs.cocoapods.org/specification.html看到更多關(guān)于podspec的屬性的信息纬乍。
  3. 你可以在https://github.com/CocoaPods/Specs/上查看當(dāng)前都有那些有效的、可以用的Pods裸卫。

上面第3條仿贬,你也可以點(diǎn)開看一看,保證你有收獲墓贿,如下:

點(diǎn)開后茧泪,在This repository里輸入AFNetworking,然后摁Enter鍵搜索,你會(huì)看到下圖聋袋,先別驚奇(至于我在下圖說的队伟,'本地也有',就不上圖了):

CocoaPods的秘密(原理)

看到這幽勒,如果你的項(xiàng)目用到了CocoaPods,有沒有一種“噢...嗜侮,原來是這樣的”柳暗花明又一村的感覺,如果你有啥容,你NB锈颗;如果沒有,沒有就算了咪惠,你更要認(rèn)真看下去击吱!反正我有。嘿嘿遥昧!

放大招的時(shí)候來了:CocoaPods說白了覆醇,就是幫我們管理第三方or自己的庫;而它不過也是一個(gè).xcodeproj工程炭臭。只不過叫乌,它是專門管理第三方or自己的庫的工程,而它的工作原理就是:你把.podspec文件制作好徽缚,然后trunk push (后面后講到)給它憨奸,它再把.podspec文件保存為.podspec.json文件放到GitHub,你需要的話凿试,它通過這個(gè).podspec.json把GitHub上對(duì)應(yīng)的開源庫的文件下載下來排宰,放到你的工程里似芝。至此,OK板甘。

說了這么多党瓮,再來張圖,證實(shí)下盐类,我們繼續(xù)講pod庫的制作寞奸,圖如下(不信也不行):

解密CocoaPods原理

3.2 修改PPKit.podspec文件,刪除里面所有的注釋在跳,然后再修改枪萄。下面給出PPKit.podspec以便參考,注釋我已經(jīng)加進(jìn)去了(如果你發(fā)布的話猫妙,最好把注釋都去掉瓷翻,此處只是為了說明才保留注釋的),如下:

Pod::Spec.new do |s|

  #開源庫的名字
  s.name         = "PPKit"   
  #開源庫當(dāng)期版本
  s.version      = "0.0.6"   
  #開源庫概述(打開GitHub能看到的描述)
  s.summary      = "開發(fā)中常用的自定義控件割坠、開發(fā)經(jīng)驗(yàn)齐帚、開發(fā)bug記錄,常用宏彼哼、categories等封裝对妄,不再每個(gè)項(xiàng)目都手動(dòng)配置,用Pod統(tǒng)一管理敢朱。"    
  #開源庫描述 (這個(gè)描述會(huì)被用來生成開源庫的標(biāo)簽和提高被搜到饥伊,必需寫在中間一行,只要在中間一行蔫饰,不需要考慮縮進(jìn))
  s.description  = <<-DESC
                   開發(fā)中經(jīng)常從A項(xiàng)目copy一些代碼(比如常用的宏、category等)到B項(xiàng)目愉豺,A更改了一個(gè)category篓吁,B又要改動(dòng);B更改了一個(gè)category蚪拦,A也要改動(dòng)杖剪,不方便同步,就容易出差錯(cuò)驰贷,所以盛嘿,考慮用Pod來管理。
                   DESC

  #可以是開源庫的GitHub地址括袒,也可以是你自己的網(wǎng)址等
  s.homepage     = "https://github.com/chinesemanbobo/PPKit"
  #我這里是參靠網(wǎng)上的一種寫法次兆,不會(huì)報(bào)警告,也可以直接 s.license = 'MIT'
  s.license = { :type => 'MIT', :text => <<-LICENSE
         Copyright PPAbner 2016-2017
          LICENSE
      }
  #開源庫作者
  s.author             = { "chinesemanbobo" => "chinesemanbobo@163.com" }
  #開源庫作者的社交鏈接(此處我放的是微博)
  s.social_media_url   = "https://weibo.com/5366568018/profile?rightmod=1&wvr=6&mod=personnumber&is_all=1"

  #開源庫支持的平臺(tái)(暫時(shí)沒考慮tvOS锹锰、OSX等)
  s.platform     = :ios
  #開源庫最低支持
  s.ios.deployment_target = "8.0"

  #VIP 開源庫GitHub的路徑與tag值芥炭,GitHub路徑后必須有.git,tag實(shí)際就是上面的版本
  s.source       = { :git => "https://github.com/chinesemanbobo/PPKit.git", :tag => s.version }

  #VIP 開源庫資源文件 (我自己總結(jié):每個(gè)文件都要有自己的路徑漓库,尤其你想目錄分的比較詳細(xì)的話,更具體的說明园蝠,看圖對(duì)比著再說)
  s.source_files = 'PPKit/PPKit.h','PPKit/PPMacros.h'


  #子目錄PPHelpers(2級(jí))渺蒿,PPKit(1級(jí)),ss子目錄可以隨便寫彪薛,但下面要對(duì)應(yīng)
  s.subspec 'PPHelpers' do |ss|
    #子目錄PPRuntimeHelper.h和PPRuntimeHelper.m (3級(jí))
    ss.source_files = 'PPKit/PPHelpers/PPRuntimeHelper.{h,m}'
   
    end

  s.subspec 'PPCategories' do |ss|
    ss.subspec 'UI' do |ssui|
        ssui.subspec 'UIScreen' do |ssuiscreen|
              ssuiscreen.source_files = 'PPKit/PPCategories/UI/UIScreen/UIScreen+EasilySize.{h,m}'
             end
       end
    end

  #開源庫頭文件
  s.public_header_files = 'PPKit/PPKit.h' 

  #開源庫依賴庫 
  # s.dependency "JSONKit", "~> 1.4"

  # 是否支持arc
  s.requires_arc = true

end

3.3 .podspec里面的.source_files的簡(jiǎn)單介紹(主要是語法)

一個(gè)宗旨:庫里面每個(gè)文件茂装、資源都要有路徑指向它。

部分語法:

'PPKit/*'  表示匹配所有PPKit目錄下文件善延,不包含子目錄的
'PPKit/PPHelpers/*.{h,m}'  表示匹配PPHelpers所有以.h和.m結(jié)尾的文件
'PPKit/**/*'  表示匹配所有文件(主目錄和子目錄少态,其中**相當(dāng)于省略中間層級(jí))

具體的語法示例及截圖,見文章最后面(參考鏈接之前)挚冤。

第四步:更新PPKit.podspecGitHub

依次執(zhí)行下面命令:

$ git add -A && git commit -m "你的更新說明" 
//tag值要和.podspce里的version相同况增,并且必須設(shè)置
$ git tag '0.0.68'   
$ git push --tags  
$ git push origin master 

第五步:驗(yàn)證PPKit.podspec是否有效

pod spec lint PPKit.podspec

如果驗(yàn)證不通過,可以執(zhí)行pod spec lint PPKit.podspec --verbose查看詳細(xì)的ERRORWARING提示训挡,根據(jù)提示依次解決澳骤,然后回到第四步重新來一遍。
注意:在重新開始之前澜薄,我們要?jiǎng)h除遠(yuǎn)程庫的tag和本地的tag为肮,命令如下:

 $ git tag -d 0.0.68                   //刪除本地tag
 $ git push origin :refs/tags/0.0.68   // 刪除遠(yuǎn)程庫tag

直到如下圖的驗(yàn)證成功

PPKit.podspce驗(yàn)證成功

第六步:提交PPKit.podspecCocoaPods

pod trunk push PPKit.podspec

如果是第一次提交,需要先執(zhí)行下面的命令去CocoaPods注冊(cè)(填寫郵箱肤京,收取驗(yàn)證鏈接颊艳,點(diǎn)擊鏈接,就OK):

$ pod trunk register 郵箱 '昵稱' --description=' 這里寫描述'

然后再執(zhí)行:

pod trunk push PPKit.podspec
trunk成功

OLA忘分,到此就結(jié)束了棋枕,趕緊去pod search一下,看有沒有妒峦!

遇到的問題s:

1. pod search PPkit 搜不出

【方案一】cocoapods search 獲取不到最新庫的解決方法
我用的是第二種:執(zhí)行pod repo update更新本地倉庫重斑,再pod search PPkit,就能 搜到了肯骇。
【方案二】執(zhí)行 pod search PPkit --simple

--simple

【方案三】打開~/Library/Caches/CocoaPods,刪除search_index.json窥浪,該文件會(huì)在重新搜索時(shí)創(chuàng)建。
【方案四】執(zhí)行 pod search PPkit --repo-update

附:從AFNetworking/PPKit/YYKit看podspec語法笛丙。

研究了自己常用的開源庫的文件目錄漾脂,其中AFNetworking是最完美的,也是我最想要的胚鸯,而其它的大多數(shù)都是骨稿,所有.h和.m文件都放在一個(gè)目錄下,比如:IQKeyboardManager。對(duì)比如下圖:

AFNetworking與IQKeyboardManager的pod庫目錄對(duì)比

參考AFNetworking來說明{}里面的共用以及子目錄的設(shè)置啊终。

1. 如下圖中間的線:AFURLRequestSerialization.h镜豹、AFURLRequestSerialization.m以及AFURLResponseSerialization.hAFURLResponseSerialization.m可以寫為'AFNetworing/AFURL{Request,Response}Serialization.{h,m}'。所以:{}里面的用逗號(hào)(,)隔開蓝牲,相當(dāng)于數(shù)學(xué)中的組合.
2. Serialization文件不需要指定路徑趟脂,只需要subspec調(diào)用了就好,它處于第2級(jí)目錄例衍,里面除了上面的4個(gè)文件別無其它昔期。但是這4個(gè)文件必須指定目錄路徑,如上面1中所示佛玄。

AFNetworking的Serialization目錄解釋說明

PPKit配置與截圖說明硼一,如下:記住那個(gè)原則:每個(gè)文件/路徑都要指定對(duì)應(yīng)的路徑。

利用PPKit..podspec說明.source_files目錄路徑怎么寫

由YYKit學(xué)會(huì)與理解.exclude_files

.exclude_files梦抢,忽略YYKit下的般贼,重新建文件夾(目錄)來管理。

.exclude_files示例

參考鏈接:

  1. Cocoapods: pod search無法搜索到類庫的解決辦法
  2. 給自己的開源庫添加cocopods支持
  3. 讓自己的開源項(xiàng)目支持CocoaPods
  4. Cocoapods完整使用篇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奥吩,一起剝皮案震驚了整個(gè)濱河市哼蛆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霞赫,老刑警劉巖腮介,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異端衰,居然都是意外死亡叠洗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門旅东,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灭抑,“玉大人,你說我怎么就攤上這事抵代√诮冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵主守,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我榄融,道長(zhǎng)参淫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任愧杯,我火速辦了婚禮涎才,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己耍铜,他們只是感情好邑闺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棕兼,像睡著了一般陡舅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伴挚,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天靶衍,我揣著相機(jī)與錄音,去河邊找鬼茎芋。 笑死颅眶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的田弥。 我是一名探鬼主播涛酗,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼偷厦!你這毒婦竟也來了商叹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤沪哺,失蹤者是張志新(化名)和其女友劉穎沈自,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辜妓,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枯途,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了籍滴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酪夷。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孽惰,靈堂內(nèi)的尸體忽然破棺而出晚岭,到底是詐尸還是另有隱情,我是刑警寧澤勋功,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布坦报,位于F島的核電站,受9級(jí)特大地震影響狂鞋,放射性物質(zhì)發(fā)生泄漏片择。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一骚揍、第九天 我趴在偏房一處隱蔽的房頂上張望字管。 院中可真熱鬧啰挪,春花似錦、人聲如沸嘲叔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硫戈。三九已至锰什,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掏愁,已是汗流浹背歇由。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留果港,地道東北人沦泌。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辛掠,于是被迫代替她去往敵國(guó)和親谢谦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345