CocoaPods創(chuàng)建屬于自己的Pod庫(kù)

項(xiàng)目想要模塊化唯欣、組件化居触,就必須了解如何創(chuàng)建CocoaPods庫(kù),如何創(chuàng)建CocoaPods庫(kù)呢痹屹,今天我們就來(lái)動(dòng)手開(kāi)始從頭建立屬于自己的CocoaPods庫(kù)吧章郁!

創(chuàng)建公有pod庫(kù)

1. 注冊(cè)CocoaPods賬戶(hù)信息(已注冊(cè)過(guò)請(qǐng)略過(guò))

創(chuàng)建一個(gè)開(kāi)源pod庫(kù), 首先我們需要注冊(cè)CocoaPods賬戶(hù), 使用trunk方式在終端執(zhí)行:
$ pod trunk register '郵箱地址' '用戶(hù)名'  --description=‘描述內(nèi)容’ --verbose

可以使用GitHub郵箱和用戶(hù)名, 然后在你的郵箱中會(huì)收到確認(rèn)郵件在瀏覽器中點(diǎn)擊鏈接確認(rèn)即注冊(cè)成功, 
成功之后可以終端執(zhí)行:
$ pod trunk me

2. 創(chuàng)建共享庫(kù)文件, 上傳到公有倉(cāng)庫(kù)

GitHub上創(chuàng)建一個(gè)公開(kāi)項(xiàng)目,創(chuàng)建指南 Using Pod Lib Create

如果自己新建的庫(kù)志衍,可以用下面代碼創(chuàng)建
$ pod lib create 庫(kù)名

項(xiàng)目中必須包含這幾個(gè)文件:
1. 共享文件夾:文件夾存放著你要共享的內(nèi)容, 也就是其他人pod得到的文件, .podspec文件中的
   source_files需要指定此文件路徑及文件類(lèi)型
2. LICENSE:開(kāi)源許可證暖庄,默認(rèn)一般選擇MIT;
3. README.md:倉(cāng)庫(kù)說(shuō)明
4. 庫(kù)描述文件.podspec:本庫(kù)的各項(xiàng)信息描述, 需要提交給CocoaPods, pod通過(guò)這個(gè)文件查找到你共享的庫(kù).

然后可以使用SourceTree等工具上傳你的代碼到公共倉(cāng)庫(kù), 或使用命令行上傳代碼到遠(yuǎn)端倉(cāng)庫(kù), 如何操作可以移步:Git常用命令.

3. 編輯*.podspec文件

.podspec是用Ruby的配置文件,描述你項(xiàng)目的信息楼肪,現(xiàn)在創(chuàng)建庫(kù)后已自動(dòng)生成*.podspec文件

自己想要?jiǎng)?chuàng)建podspec文件雄驹,執(zhí)行以下命令
$ pod spec create 庫(kù)名

.podspec文件內(nèi)容

Pod::Spec.new do |s|
  s.name         = "LMBannerView" # 項(xiàng)目名稱(chēng)
  s.version      = "0.0.1"        # 版本號(hào) 與 你倉(cāng)庫(kù)的 標(biāo)簽號(hào) 對(duì)應(yīng)
  s.summary      = "輪播圖"        # 項(xiàng)目簡(jiǎn)介
  s.description  = <<-DESC
  這中間寫(xiě)描述內(nèi)容
               DESC
  s.homepage     = "https://github.com/1805441570@qq.com/test" # 你的主頁(yè)
  s.license      = { :type => 'MIT', :file => 'LICENSE' } # 開(kāi)源證書(shū)
  s.author       = { "limeng" => "1805441570@qq.com" } # 作者信息
  # 你的倉(cāng)庫(kù)地址,不能用SSH地址
  s.source       = { :git => "https://github.com/limeng99/LMBannerView", :tag => "0.0.1"}
  # 代碼位置淹辞, LMBannerView/**/*.{h,m} 表示 ** 文件夾下所有的.h和.m文件
  s.source_files     = "LMBannerView/Classes/*.{h,m}"
  s.requires_arc = true # 是否啟用ARC
  s.platform     = :ios, "8.0" # 平臺(tái)及支持的最低版本
  s.frameworks = "UIKit", "Foundation" # 支持的框架
  # s.dependency "AFNetworking", "~> 2.3" # 依賴(lài)庫(kù)
end

驗(yàn)證 .podspec 文件的格式是否正確医舆,cd*.podspec 文件所在的目錄下

$ pod lib lint 庫(kù)名.podspec --allow-warnings
例如: $ pod lib lint LMBannerView.podspec --allow-warnings

驗(yàn)證成功會(huì)出現(xiàn):

-> LMBannerView  (0.0.1)

LMBannerView passed validation.

4. 給倉(cāng)庫(kù)打Tag

標(biāo)簽相當(dāng)于將你的倉(cāng)庫(kù)的一個(gè)壓縮包,用于穩(wěn)定存儲(chǔ)當(dāng)前版本象缀。標(biāo)簽號(hào)與你在 s.version = "0.0.1" 的版本號(hào)一致 0.0.1

創(chuàng)建標(biāo)簽
$ git tag -a 0.0.1 -m '標(biāo)簽說(shuō)明'

推送到遠(yuǎn)程
$ git push origin --tags

5. 發(fā)布 *.podspec

倉(cāng)庫(kù)目錄下執(zhí)行
$ pod trunk push LMBannerView.podspec --allow-warnings

將你的 *.podspec 發(fā)布到公有的 speecs 上蔬将,這一步操作包括:
1. 更新本地 pods庫(kù) ~/.cocoaPods.repo/master
2. 驗(yàn)證*.podspec格式是否正確
3. 將 *.podspec 文件轉(zhuǎn)成 JSON 格式
4. 對(duì) master 倉(cāng)庫(kù)進(jìn)行合并、提交

成功后會(huì)出現(xiàn)Congrats信息如下:

limMac-2:LMBannerView limengmeng$ pod trunk push LMBannerView.podspec --allow-warnings
Updating spec repo `trunk`
Validating podspec
 -> LMBannerView (0.1.3)
    - WARN  | github_sources: Github repositories should end in `.git`.
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | [iOS] xcodebuild:  note: Planning build
    - NOTE  | [iOS] xcodebuild:  note: Constructing build description
    - NOTE  | [iOS] xcodebuild:  warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')

Updating spec repo `trunk`

--------------------------------------------------------------------------------
 ??  Congrats

 ??  LMBannerView (0.1.3) successfully published
 ??  December 6th, 02:40
 ??  https://cocoapods.org/pods/LMBannerView
 ??  Tell your friends!
--------------------------------------------------------------------------------

6. 使用倉(cāng)庫(kù)

發(fā)布到Cocoapods后央星,在終端更新本地pods倉(cāng)庫(kù)信息

$ pod setup
$ pod search LMBannerView

如果`search`出現(xiàn)以下錯(cuò)誤:
[!] Unable to find a pod with name, author, summary, or description matching `LMBannerView`

刪除 cocoapods 的索引霞怀,然后重新 search
$ rm ~/Library/Caches/CocoaPods/search_index.json
$ pod search LMBannerView
終端輸出:Creating search index for spec repo 'artsy'.. Done!
會(huì)觸發(fā)cocoapods重新拉這個(gè)索引文件

7. 更新維護(hù)

  • 更新 *.podspec 中的版本號(hào)
  • 打上標(biāo)簽推送流程
  • pod trunk push *.podspec 推送到pods倉(cāng)庫(kù)

8. 遇到的問(wèn)題

  • xcodebuild: Returned an unsuccessful exit code. error,*.podspec 文件里面設(shè)置的 s.ios.deployment_target = '8.0'莉给,最低支持版本為 8.0毙石,而在代碼里面用到 了 xib,里面勾了 Use Safe Area Layout Guides颓遏,項(xiàng)目支持最低版本為 9.0徐矩,Build 不會(huì)報(bào)錯(cuò),執(zhí)行 pod lib lint *.podspec 報(bào) xcodebuild: Returned an unsuccessful exit code.叁幢,原來(lái)是 Use Safe Area Layout Guides 的問(wèn)題滤灯,修改 *.podspec 文件 s.ios.deployment_target = '9.0' 修復(fù)了這個(gè)問(wèn)題

  • xib 報(bào) Use Safe Area Layout Guides error, 修改 xibBuilds for 選項(xiàng) 改為 Deployment Target (9.0)

創(chuàng)建私有庫(kù)

私有Pod庫(kù)和公有Pod庫(kù)的創(chuàng)建方式?jīng)]有什么區(qū)別, 不一樣的是管理他們的spec repo不一樣

所以我們需要自己創(chuàng)建一個(gè)跟CocoaPods/Specs類(lèi)似的倉(cāng)庫(kù)來(lái)管理內(nèi)部創(chuàng)建的Pod庫(kù)的podspec文件, 供內(nèi)部人員更新和依賴(lài)使用內(nèi)部Pod組件庫(kù)。
私有repo的構(gòu)建形式有兩種, 一種是私有g(shù)it服務(wù)器上面創(chuàng)建曼玩,一種是本機(jī)創(chuàng)建鳞骤。本機(jī)創(chuàng)建請(qǐng)參考官方文檔:Private Pods.

這里介紹的是在公司內(nèi)部搭建的git服務(wù)器上面創(chuàng)建整個(gè)服務(wù)的方式。

1. 創(chuàng)建一個(gè)git倉(cāng)庫(kù)用來(lái)做內(nèi)部私有庫(kù)的Spec Repo

在私有服務(wù)器創(chuàng)建一個(gè)倉(cāng)庫(kù),一個(gè)用來(lái)存放所有共享庫(kù)的podspec, 這里創(chuàng)建好之后的內(nèi)部SSH協(xié)議地址是:git@git.xxxx:podspecs/xxx.git, 創(chuàng)建的私有倉(cāng)庫(kù)給到的http/https地址也一樣.終端輸入命令:

$ pod repo add PodSpec git@git.xxxx:podspecs/xxx.git

將PodSpec添加到本地repo, 添加成功后可以在/.cocoapods/repos/目錄下可以看到官方的specs:master和剛剛加入的specs:PodSpec

2. 創(chuàng)建私有Pod組件庫(kù)

這一步跟上面創(chuàng)建共有pod庫(kù)方式是一致的黍判。即創(chuàng)建git工程豫尽,podspace文件,pod lib lint , 打tag 顷帖。但不是用trunk方式提交到master上

3. 將podspec加入私有Sepc repo中

公有庫(kù)使用trunk方式將.podspec文件發(fā)布到CocoaPods/Specs, 內(nèi)部的pod組件庫(kù)則是添加到我們第一步創(chuàng)建的私有Spec repo中去, 在終端執(zhí)行:

$ pod repo push podspec名稱(chēng)  Demo.podspec

添加成功之后PodSpec中會(huì)包含新建Demo庫(kù)的podspec信息, 可以前往~/.cocoapods/repos下的PodSpec文件夾中查看, 同時(shí)git服務(wù)器中的遠(yuǎn)端也更新了.

4.查找和使用內(nèi)部組件庫(kù)

執(zhí)行pod search Demo庫(kù) 就能查到剛剛創(chuàng)建好的庫(kù)了美旧,然后在想要使用此組件的工程的Podfile中加入pod 'Demo', '~>0.0.1'即可使用內(nèi)部組件啦渤滞!
值得注意的是:必須在Podfile前面需要添加你的私有Spec repo的git地址source, pod install時(shí), 才能在私有repo中查找到私有庫(kù), 像這樣:

source 'git@git.xxx.net:podspecs/PodSpec.git'
    
    platform :ios, '9.0'
    target "test" do
        pod 'Demo', '~>0.0.1'
    end

本文首發(fā)于我的個(gè)人博客 https://limeng99.club/,轉(zhuǎn)載請(qǐng)標(biāo)明出處陈症。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔼水,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子录肯,更是在濱河造成了極大的恐慌趴腋,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件论咏,死亡現(xiàn)場(chǎng)離奇詭異优炬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)厅贪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蠢护,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人养涮,你說(shuō)我怎么就攤上這事葵硕。” “怎么了贯吓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵懈凹,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我悄谐,道長(zhǎng)介评,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任爬舰,我火速辦了婚禮们陆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘情屹。我一直安慰自己坪仇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布屁商。 她就那樣靜靜地躺著烟很,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜡镶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天恤筛,我揣著相機(jī)與錄音官还,去河邊找鬼。 笑死毒坛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辨泳。 我是一名探鬼主播户盯,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腿箩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起劣摇,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤珠移,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后末融,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钧惧,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年勾习,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浓瞪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巧婶,死狀恐怖乾颁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艺栈,我是刑警寧澤英岭,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站眼滤,受9級(jí)特大地震影響巴席,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诅需,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一漾唉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堰塌,春花似錦赵刑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至牵现,卻和暖如春铐懊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞎疼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工科乎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贼急。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓茅茂,卻偏偏與公主長(zhǎng)得像捏萍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子空闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355