發(fā)布自己的開源框架到CocoaPods

如何發(fā)布自己的開源框架到CocoaPods

——在項(xiàng)目所在目錄下執(zhí)行* pod init * , 生成Podfile文件, 我們需要對其進(jìn)行相應(yīng)的配置。

在開發(fā)過程中柬赐,經(jīng)常會(huì)使用到第三框架绰姻,我們通過一個(gè)pod install命令枉侧,很方便的就將第三方框架加到我們自己的項(xiàng)目中。
用CocoaPods做iOS程序的依賴管理

在github創(chuàng)建倉庫完成狂芋,需要將倉庫檢出到本地(截取網(wǎng)上的例子)

注意:LICENSE(許可證)文件不可缺少榨馁,否則檢測spec文件時(shí),會(huì)有警告

將寫好開源框架/庫的Demo或者Example放到Git倉庫下帜矾,還要將要開源的文件夾也放入到git倉庫中(該文件夾在后面會(huì)被用到)(截取網(wǎng)上的例子)

項(xiàng)目發(fā)布到github后翼虫,我們在工程根目錄中初始化一個(gè)Podspec文件:創(chuàng)建自己項(xiàng)目的Podspec描述文件:

pod spec create ECGCustomAlertView

該命令將在本目錄產(chǎn)生一個(gè)名為ECGCustomAlertView.podspec文件屑柔。用編輯器(命令行:vim ECGCustomAlertView.podspec)打開該文件,里面已經(jīng)有非常豐富的說明文檔珍剑。下面介紹如何聲明第三方庫的代碼目錄和資源目錄掸宛,還有該第三方庫所依賴ios核心框架和第三方庫。這是我的podspec文件:








s.name:名稱招拙,pod search 搜索的關(guān)鍵詞,注意這里一定要和.podspec的名稱一樣,否則報(bào)錯(cuò) s.version:版本號(hào) s.ios.deployment_target:支持的pod最低版本 s.summary: 簡介 s.homepage:項(xiàng)目主頁地址 s.license:許可證 s.author:作者 s.social_media_url:社交網(wǎng)址,這里我寫的微博默認(rèn)是Twitter,如果你寫Twitter的話,你的podspec發(fā)布成功后會(huì)@你 s.source:項(xiàng)目的地址 s.source_files:需要包含的源文件 s.resources: 資源文件 s.requires_arc: 是否支持ARC s.dependency:依賴庫旁涤,不能依賴未發(fā)布的庫,如 s.dependency = ‘AFNetworking’ s.dependency:依賴庫迫像,如有多個(gè)可以這樣寫。我這里是托管在github上,所以這里將地址copy過來就行了瞳遍。

source_files:寫法及含義建議大家寫第一種或者第二種闻妓。

"ECGCustomAlertView/*"

"ECGCustomAlertView/ECGCustomAlertView/*.{h,m}"

"ECGCustomAlertView/*/.h"

“*” 表示匹配所有文件
“*.{h,m}” 表示匹配所有以.h和.m結(jié)尾的文件
“**” 表示匹配所有子目錄

設(shè)置tag號(hào),提交修改(注:只要spec文件被修改掠械,就必須重新執(zhí)行如下命令)

git commit -m "Release 1.0.1" (先提交當(dāng)前修改)

git tag 1.0.1 (添加tag)

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

git push origin master (推送到遠(yuǎn)程到代碼倉庫)

提交之前先驗(yàn)證.podspec文件是否合法

pod spec lint ECGCustomAlertView.podspec

從錯(cuò)誤信息中得到:我的項(xiàng)目編譯不通過:ECGLoadsAlertViewController.h 類文件找不到由缆,需要將項(xiàng)目錯(cuò)誤的地方修改掉,如果顯示這樣的提示信息:


那么就是已經(jīng)配置成功猾蒂,可以提交到cocoapods了均唉,否則要將所有提示的error和warn修改掉。

驗(yàn)證.podspec文件報(bào)錯(cuò)肚菠,解決方法

先刪除遠(yuǎn)程tag

git push origin :refs/tags/1.0.1

修改spec文件(必須修改相應(yīng)的version和source)

重新執(zhí)行-->設(shè)置tag號(hào)舔箭,提交修改的步驟

podspec文件驗(yàn)證成功,通過trunk推送podspec文件

pod trunk push ECGCustomAlertView.podspec

如果有如下提示蚊逢,需要你用郵箱注冊一個(gè)trunk

用郵箱注冊trunk(建議:用github注冊的郵箱地址為好层扶,外加用戶名-->gitub的用戶名(我用郵箱用戶名也通過了))

pod trunk register 郵箱地址 "用戶名" --description="macbook pro"

之后會(huì)有一封帶有驗(yàn)證鏈接的郵件發(fā)送到你輸入的郵箱,點(diǎn)擊驗(yàn)證后就可以回來終端繼續(xù)提交操作了烙荷。

提交到cocoapods

pod trunk push ECGCustomAlertView.podspec

我碰到了個(gè)錯(cuò)誤提示:

網(wǎng)上查的解決方法:

解決方案

實(shí)質(zhì):If you get this error message:(如果你獲得這個(gè)錯(cuò)誤信息:)


You need to set and unset that rename limit:

git config merge.renameLimit 999999

git config --unset merge.renameLimit

然后繼續(xù)提交到cocoapods镜会,如果成功會(huì)出現(xiàn):


Cocoapods: pod search無法搜索到類庫的解決辦法

刪除~/Library/Caches/CocoaPods目錄下的search_index.json文件

pod setup成功后會(huì)生成~/Library/Caches/CocoaPods/search_index.json文件。
終端輸入rm ~/Library/Caches/CocoaPods/search_index.json
刪除成功后再執(zhí)行pod search

稍等片刻就會(huì)出現(xiàn)你所要搜的類庫了终抽。

podspec文件更新方法

以后我們的庫有新版本時(shí)戳表,我們可以修改相應(yīng)的version和source。

有時(shí)你可能會(huì)遇到這種情況:執(zhí)行pod trunk push操作后發(fā)現(xiàn)podspec文件的某個(gè)地方寫錯(cuò)了昼伴,想更新一下匾旭。對于這種情況,我們可能會(huì)先嘗試著在把podspec文件push一次亩码。但是如果你的代碼版本號(hào)沒變(podspec里的version自然也沒變)就會(huì)提示push失敗季率,即使你更改了podspec的其他地方,pod也會(huì)認(rèn)為這兩個(gè)文件是同一個(gè)描沟。 我目前為止找不到trunk的相關(guān)update接口飒泻,所以只能順?biāo)浦郾薰猓略创a版本號(hào)(如:1.1.1->1.1.2),重新push version tag泞遗,然后再執(zhí)行pod trunk push操作惰许。

后來遇到的坑:

1.通過代碼創(chuàng)建的podspec文件里面都是雙引號(hào),博主用的都是單引號(hào)史辙,經(jīng)測試汹买,無影響,還有UIKIT等庫和第三方庫的引入聊倔,以及版本升級(jí)晦毙,這一部分已經(jīng)放在這里;
2.發(fā)現(xiàn)一個(gè)問題耙蔑,如果你在某個(gè)庫中用了NSInteger见妒,會(huì)報(bào)警告,原因是:typedef long NSInteger;類似這種情況的還有別的甸陌,如果遇到你可以替換成像這里應(yīng)該是long须揣,也可以選擇忽略警告,比如:pod trunk push ScrollSliderView.podspec –allow-warnings钱豁;
3.有時(shí)候在push時(shí)會(huì)遇到這樣的報(bào)錯(cuò):[!] There was an error pushing a new version to trunk: Net::OpenTimeout 不要驚慌耻卡,僅僅是因?yàn)榫W(wǎng)絡(luò)不好沒有push成功,不妨再試一次牲尺。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卵酪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秸谢,更是在濱河造成了極大的恐慌凛澎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件估蹄,死亡現(xiàn)場離奇詭異塑煎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)臭蚁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門最铁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垮兑,你說我怎么就攤上這事冷尉。” “怎么了系枪?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵雀哨,是天一觀的道長。 經(jīng)常有香客問我,道長雾棺,這世上最難降的妖魔是什么膊夹? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮捌浩,結(jié)果婚禮上放刨,老公的妹妹穿的比我還像新娘。我一直安慰自己尸饺,他們只是感情好进统,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪听,像睡著了一般螟碎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迹栓,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天抚芦,我揣著相機(jī)與錄音,去河邊找鬼迈螟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尔崔,可吹牛的內(nèi)容都是我干的答毫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼季春,長吁一口氣:“原來是場噩夢啊……” “哼洗搂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起载弄,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤耘拇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宇攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惫叛,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年逞刷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘉涌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夸浅,死狀恐怖仑最,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帆喇,我是刑警寧澤警医,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響预皇,放射性物質(zhì)發(fā)生泄漏侈玄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一深啤、第九天 我趴在偏房一處隱蔽的房頂上張望拗馒。 院中可真熱鬧,春花似錦溯街、人聲如沸诱桂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挥等。三九已至,卻和暖如春堤尾,著一層夾襖步出監(jiān)牢的瞬間肝劲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工郭宝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辞槐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓粘室,卻偏偏與公主長得像榄檬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子衔统,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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