iOS - 封裝的工具類(lèi)上傳到cocoapods

記錄一次上傳文件到 pod 的初級(jí)體驗(yàn)

iOS常用第三方管理工具cocoapods欠动,很多人都在用镐躲,也確實(shí)方便骆捧。那么如何將自己的代碼發(fā)布到cocoapods呢,作為萌新就baidu顿膨、google唄锅锨。
當(dāng)然,作為萌新恋沃,嘗試的時(shí)候肯定都是坑啊必搞,要不然咋是萌新呢。
ps :訣竅--嘗試的時(shí)候盡可能精簡(jiǎn)囊咏,這樣容易過(guò)恕洲,一次一次增加難度塔橡,這樣出現(xiàn)問(wèn)題的時(shí)候就不會(huì)太多,解決起來(lái)也不會(huì)有砸電腦的沖動(dòng)^_^

使用pod模板開(kāi)發(fā)項(xiàng)目 關(guān)于pod lib create

pod lib create projectName

手動(dòng)創(chuàng)建podspec

  • 新建項(xiàng)目霜第,提交到GitHub或者其他代碼托管網(wǎng)站葛家,有下載鏈接就行(后邊需要用到托管平臺(tái)的代碼tag或者commit 作為需要發(fā)布的版本代碼)
    • 我查看過(guò)一些其他人寫(xiě)的,會(huì)把要上傳的文件提到項(xiàng)目根目錄泌类,或者復(fù)制一份癞谒,但是我覺(jué)得比較麻煩,還是按照正常的項(xiàng)目處理的刃榨,也是可以的弹砚,木有問(wèn)題
  • 準(zhǔn)備 podspec 文件
    • 打開(kāi)終端,cd到項(xiàng)目當(dāng)前跟目錄枢希,執(zhí)行pod spec create xxxname(xxxname為項(xiàng)目名稱(chēng))
    • 具體內(nèi)容
Pod::Spec.new do |s|

  s.name         = "BSAFNetWorking"
  s.version      = "0.1.0"
  s.summary      = "AFNetWorking changed BSAFNetWorking"
  s.description  = <<-DESC
                        封裝AFNetWorking 提供提供body體請(qǐng)求(setHTTPBody方式)迅栅,提供表單格式方式請(qǐng)求(application/x-www-form-urlencoded)
                        提供上傳、下載晴玖、普通網(wǎng)絡(luò)請(qǐng)求
                      DESC

  s.homepage        = "https://github.com/BlackStarLang/BSAFNetWorking.git"
  s.author          = { "BlackStar" => "blackstar_lang@163.com" }
  s.platform        = :ios, "8.0"
  s.source          = { :git => "https://github.com/BlackStarLang/BSAFNetWorking.git", :tag => s.version }
  s.source_files    = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h"
  s.public_header_files    = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h"
  s.framework       = "UIKit"
  s.dependency "AFNetworking", "~> 3.0"
  s.license= { :type => "MIT", :file => "LICENSE" }

  s.subspec 'BSApi' do |ss|
    ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi/*"
    ss.framework    = "UIKit"
end

通過(guò)命令行創(chuàng)建的文件是帶有很多注釋的,不過(guò)很多我都用不上为流,為了看的清楚呕屎,我把沒(méi)用的都刪了。如果想看所有的敬察,可以看看具體的項(xiàng)秀睛,以便于增加或修改spec項(xiàng)

spec文件中的每行代碼的意思差不多翻譯就可以了

  • 劃重點(diǎn)
    1. 注意示例匯中 s.description 的格式,格式不對(duì)會(huì)報(bào)錯(cuò)(當(dāng)然莲祸, s.description 整行注釋掉也可以)
    2. s.license 必須要有蹂安,我是到MIT官網(wǎng)找的,也可以是 .md & .txt格式的锐帜,或者其他協(xié)議 田盈,協(xié)議內(nèi)容如下(只需要改變第一行版權(quán)所有人信息即可,其他不用動(dòng))缴阎,但是可能出現(xiàn)發(fā)布后出現(xiàn) warning的問(wèn)題允瞧,說(shuō)找不到LECENSE,解決辦法就是在GitHub或者gitlab上都可以直接在倉(cāng)庫(kù)中新建蛮拔,然后可以選擇很多種種類(lèi)的述暂,我都是選擇MIT,我將gitlab或github上創(chuàng)建的開(kāi)原協(xié)議引用到此處就沒(méi)有再報(bào)警告
  • 協(xié)議如下
Copyright (c) 2018 BlackStar <blackstar_lang@163.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
  1. s.dependency 是你項(xiàng)目需要依賴(lài)的第三方建炫,比如說(shuō)我的這個(gè)是封裝的AFNetworking 畦韭,肯定需要依賴(lài)AFNetworking的,所以肛跌,依賴(lài)一個(gè)寫(xiě)一個(gè)艺配,依賴(lài)多個(gè)寫(xiě)多個(gè)察郁,寫(xiě)法基本和podfile里一樣,可以不加版本號(hào)妒挎,但是不能指定代碼源绳锅,代碼源都是在podfile里去聲明的 ,如下:
  s.dependency "AFNetworking"
  s.dependency 'SDWebImage','~> 4.1.0'
  1. s.framework 是依賴(lài)的系統(tǒng)框架,我這里只用了 UIKit酝掩。
    如果依賴(lài)多個(gè)系統(tǒng)框架鳞芙,可以一行搞定,和dependency是不一樣的期虾,dependency是不支持多個(gè)依賴(lài)一行搞定的,注意 frameworks 是帶有s的哦原朝,這個(gè)和依賴(lài)單個(gè)框架是不一樣的。
s.frameworks       = "UIKit","UIFoundation"

5.特別注意 s.source_files 坑很多镶苞,一定要搞準(zhǔn)你要上傳文件的目錄位置喳坠,要不然一遍一遍過(guò)不去
搞不準(zhǔn)目錄寫(xiě)的對(duì)不對(duì)點(diǎn)擊這里看demo
我們的pod文件可能是有多個(gè)文件夾的茂蚓,如果不特殊處理,上傳后的文件是沒(méi)有分目錄的聋涨,和我們工程內(nèi)分的目錄沒(méi)關(guān)系晾浴,都在一個(gè)文件夾里。想要帶有目錄結(jié)構(gòu)需要將每一個(gè)文件夾設(shè)置成子模塊脊凰,具體寫(xiě)法如下

Pod::Spec.new do |s|

  s.name         = "BSAFNetWorking"
  s.version      = "0.1.0"
  s.summary      = "AFNetWorking changed BSAFNetWorking"
  s.description  = <<-DESC
                        封裝AFNetWorking 提供提供body體請(qǐng)求(setHTTPBody方式),提供表單格式方式請(qǐng)求(application/x-www-form-urlencoded)
                        提供上傳茂腥、下載、普通網(wǎng)絡(luò)請(qǐng)求
                      DESC

  s.homepage        = "https://github.com/BlackStarLang/BSAFNetWorking.git"
  s.author          = { "BlackStar" => "blackstar_lang@163.com" }
  s.platform        = :ios, "8.0"
  s.source          = { :git => "https://github.com/BlackStarLang/BSAFNetWorking.git", :tag => s.version, :submodules => true}
  s.source_files    = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h"
  s.public_header_files    = "BSAFNetWorking/SQBaseApi/BSAFNetwroking.h"
  s.framework       = "UIKit"
  s.dependency "AFNetworking", "~> 3.0"
  s.license= { :type => "MIT", :file => "LICENSE" }
  //子模塊
  s.subspec 'BSApi' do |ss|
    ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi/*"
    ss.framework    = "UIKit"
end
  //子模塊
  s.subspec 'BSApi1' do |ss|
    ss.source_files = "BSAFNetWorking/SQBaseApi/BSApi1/*"
    ss.framework    = "UIKit"
end

end

看好幾個(gè)end哦最岗。

注意 :每個(gè)subspec 對(duì)應(yīng)一個(gè)end帕胆,如果不想將組件發(fā)布出來(lái)供大家使用仑性,只是想公司內(nèi)部使用,可以將podspec放在 自己的項(xiàng)目網(wǎng)絡(luò)地址上诊杆,比如說(shuō)在公司的 gitlab 上歼捐,創(chuàng)建一個(gè)項(xiàng)目專(zhuān)門(mén)用來(lái)管理podspec
創(chuàng)建后復(fù)制倉(cāng)庫(kù)地址,終端執(zhí)行命令晨汹,對(duì)應(yīng)命令:

pod repo push 你的倉(cāng)庫(kù)地址 xxx.podspec --allow-warnings

發(fā)布完成后,需要用的時(shí)候淘这,需要在podfile里聲明你的podspec倉(cāng)庫(kù)地址

source 'https://xxxxx.git' 

然后你就可以下載使用了,如果你是用的非GitHub進(jìn)行托管的(如gitlab)剥扣,pod search 是搜不到的,因?yàn)樗撬接械模ㄈ绻腴_(kāi)源給大家钠怯,那就上github佳魔,然后發(fā)布到開(kāi)源庫(kù))

參考demo

  • podspec 文件準(zhǔn)備好后晦炊,檢查文件合法性pod spec lint xxxx.podspec --allow-warnings 需要加 --allow-warnings鞠鲜,要不然基本過(guò)不去
    可能報(bào)錯(cuò) 第三方引入有問(wèn)題,讓你用#import<>的方式引入断国,引入的時(shí)候主要要帶有 文件路徑引入贤姆,如引入AFNetworking需要這么寫(xiě)#import <AFNetworking/AFNetworking.h> 不能寫(xiě)#import <AFNetworking.h> 或者 #import "AFNetworking.h"
    如果改完代碼 還是報(bào)這個(gè)錯(cuò)誤,需要清理緩存 :
pod cache clean --all
//然后在
pod spec lint xxx.podspec

如果對(duì)自己有信心也可以不走lint的步驟稳衬,直接發(fā)布

  • 這一步過(guò)了就說(shuō)明代碼已經(jīng)木有問(wèn)題了霞捡,那么如何提交到網(wǎng)絡(luò)供人下載使用呢?
//終端執(zhí)行
pod trunk me //檢查是否有賬戶(hù)
//沒(méi)有則注冊(cè)薄疚,郵箱地址需要真實(shí)有效碧信,需要接收郵件驗(yàn)證,好像需要翻墻街夭,不大記得了
pod trunk register 郵箱地址 "昵稱(chēng)" 
//例子:
pod trunk register blackstar_lang@163.com "BlackStar"
  • 注冊(cè)成功后發(fā)布
pod trunk push xxxx.podspec --allow-warnings
  • 發(fā)布成功后音婶,pod search xxxx 試試可不可以搜索出來(lái),如果確定發(fā)布成功了莱坎,但是搜不出來(lái),需要重置 pod的searchindex
cd ~/Library/Caches/CocoaPods/ 
//然后執(zhí)行
rm -rf search_index.json

重新 pod search 就可以了

有的時(shí)候我們?cè)趐od 上發(fā)布了寸士,但是又不想發(fā)布了檐什,想要發(fā)布到私有庫(kù)上,那么我們可以執(zhí)行以下操作弱卡,刪除公共庫(kù)中的組件

//查看自己的郵箱乃正,和發(fā)布過(guò)的公共庫(kù)
pod trunk me 
//然后執(zhí)行命令刪除組件版本
pod trunk deprecate 組件名稱(chēng) 版本號(hào)
//例子:
pod trunk delete BSAFNetworking 0.0.1
//然后更新本地repo
pod repo update
然后發(fā)布到自己的庫(kù)
pod repo push xxxx地址   xxxx.podspec --allow-warnings

這就是此次發(fā)布pod的全過(guò)程了,如果你也遇到了問(wèn)題婶博,可以留言共同研究哦


補(bǔ)充報(bào)錯(cuò)解決方案
xcrun: error: unable to find utility "simctl", not a developer tool or in PATH
) during validation.

解決辦法:將Xcode的line Tools 打開(kāi)設(shè)置上即可


偏好設(shè)置.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓮具,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凡人,更是在濱河造成了極大的恐慌名党,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠轴,死亡現(xiàn)場(chǎng)離奇詭異传睹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)岸晦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)欧啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睛藻,“玉大人,你說(shuō)我怎么就攤上這事邢隧〉暧。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵倒慧,是天一觀的道長(zhǎng)按摘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)院峡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任照激,我火速辦了婚禮,結(jié)果婚禮上盹牧,老公的妹妹穿的比我還像新娘。我一直安慰自己汰寓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布有滑。 她就那樣靜靜地躺著,像睡著了一般毛好。 火紅的嫁衣襯著肌膚如雪望艺。 梳的紋絲不亂的頭發(fā)上肌访,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音吼驶,去河邊找鬼。 笑死蟹演,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酒请。 我是一名探鬼主播魄咕,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哮兰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毛萌!你這毒婦竟也來(lái)了喝滞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤右遭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窘哈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吹榴,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滚婉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了让腹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骇窍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腹纳,到底是詐尸還是另有隱情,我是刑警寧澤嘲恍,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站蛔钙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荠医。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一彬向、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娃胆,春花似錦、人聲如沸里烦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)废封。三九已至,卻和暖如春漂洋,著一層夾襖步出監(jiān)牢的瞬間遥皂,已是汗流浹背刽漂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贝咙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓颈畸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親眯娱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子礁苗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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