詳細(xì)講解如何發(fā)布自己的開源pod到Cocoapods以及一些lint檢查錯誤

?? 這篇文章詳細(xì)的講解如何發(fā)布自己的開源框架到Cocoapods,比較基礎(chǔ)衡蚂,如有錯誤,歡迎指正。

要點(diǎn):

  • pod的版本依賴于Git的tag勤晚,將一個tag視為工程的一次release
  • 一個pod版本對應(yīng)一個tag似嗤,pod版本最好與tag一致
  • pod 命令可以使用--verbose 開啟啰嗦模式查看日志

一啸臀、創(chuàng)建github repository

image
  1. 項(xiàng)目名稱:自己填寫項(xiàng)目名稱,最好是自己想發(fā)布的庫的名稱烁落,方便管理
  2. 項(xiàng)目描述:可選項(xiàng)乘粒,描述當(dāng)前項(xiàng)目
  3. 公開項(xiàng)目:選擇public別人才能看到和下載這個庫,創(chuàng)建私有庫需要$$
  4. README:一個好的項(xiàng)目需要一個README文件來介紹庫文件如何使用
  5. .gitignore: Git管理項(xiàng)目的忽略文件伤塌,一般選擇對應(yīng)語言即可谓厘,對其修改為Git管理知識,這里不做鋪開
  6. 開源許可證:開源許可證,根據(jù)自己的需要設(shè)置翰撑,我選擇MITcocoapods對開源許可設(shè)置比較在意舔箭,所以需要設(shè)置一個

二、克隆項(xiàng)目到本地

  1. 在github上找到項(xiàng)目的地址


    image
  2. 克隆項(xiàng)目到本地

$ git clone git@github.com:read0nly/DemoKit.git

  1. 將寫好的開源庫源代碼放入本地的Git倉庫下


    image

三他爸、注冊pod trunk

??要將一個開源庫或者私有庫發(fā)布到pods之前你需要注冊trunk

pod trunk register [email] '[name]' --description='[desc]'

  • email:任意郵箱,推薦使用你注冊github的郵箱
  • name:推薦使用github的name
  • desc:簡單的描述信息

??例如我自己注冊一個:

pod trunk register nj.readonly@gmail.com 'read0nly' --description='macbook pro'

??注冊之后需要進(jìn)入上面填的郵箱果善,點(diǎn)擊鏈接進(jìn)行郵箱驗(yàn)證 </br>
完成之后可以使用pod trunk me檢測是否注冊成功

pod trunk me

??注冊成功后將看到如下信息:

$ pod trunk me </br>

  • Name: read0nly</br>
  • Email: nj.readonly@gmail.com</br>
  • Since: April 12th, 08:49</br>
  • Sessions:</br>
    • April 12th, 08:49 - August 19th, 19:56. IP: 167.99.173.25

四诊笤、發(fā)布pod

1.創(chuàng)建.podspec

$ pod spec create [name]

  • name: podspec 文件的名稱,一般與git上創(chuàng)建的repository名稱相同</br>
    // 如:</br>
    pod spec create DemoKit

??執(zhí)行此命令事實(shí)上是在當(dāng)前目錄創(chuàng)建了一個.podspec文件(純文本文件)巾陕,這個文件記錄了pod發(fā)布執(zhí)行的動作讨跟,以及資源配置信息。


image

2.修改.podspec文件

??.podspec文件生成之后里面有一個模板鄙煤,有很多的注釋和配置晾匠,比較全面,但是有些內(nèi)容可能是我們目前使用不到的梯刚。這里提供一個簡潔版的.podspec文件凉馆,如果后續(xù)有其他需求,例如子模塊之類的,可以再自行添加澜共。

Pod::Spec.new do |s|



s.name = "DemoKit"

s.version = "0.0.1"

s.summary = "A demo for cocoapods."

s.homepage = "https://github.com/read0nly/DemoKit"

s.license = { :type => "MIT", :file => "LICENSE" }

s.author = { "nj" => "nj.readonly@gmail.com" }

s.platform = :ios, "8.0"

s.source = { :git => "https://github.com/read0nly/DemoKit.git", :tag => s.version.to_s }

s.requires_arc = true

s.source_files = "DemoKit/*"

#s.exclude_files = ""

s.framework = "UIKit","Foundation"

s.swift_version = "4.0"
end

  • name:pod庫的名字
  • version:版本號
  • summary:總結(jié)
  • homepage :主頁向叉,項(xiàng)目在github上的主頁
  • license :開源證書,type為類型嗦董,file是文件母谎,注意文件路徑,如果.podspec在同一目錄下京革,可以不寫路徑
  • author :作者销睁,包含名字和聯(lián)系方式
  • platform:支持的平臺,這里支持iOS8存崖,也可以支持OSX冻记,tvOS,watchOS等
  • source:項(xiàng)目源来惧,寫自己項(xiàng)目在github上的地址冗栗,要發(fā)布的版本建議與pod版本一致
  • requires_arc:是否支持arc
  • source_files:要包含的文件,/*代表包含這個目錄下面的所有文件供搀,也可匹配某一個類型的文件隅居,例如:DemoKit/**/*.siwft 或者 DemoKit/**/*.{h,m}分別代表DemoKit下所有目錄的swift 或.h .m文件
  • exclude_files:不包含的文件,規(guī)則同上,如果在包含文件里面沒有需要排除的文件葛虐,則刪除此行
  • framework:依賴的系統(tǒng)庫
  • swift_version:swift版本胎源,對于swift項(xiàng)目來說這個參數(shù)很重要,一定要填寫庫文件所使用的swift版本屿脐,否則會導(dǎo)致編譯失敗

??其他的配置信息涕蚤,需要的時(shí)候可以到Cocoapods項(xiàng)目官方文檔podspec部分查閱

3.檢驗(yàn).podspec文件

??修改完.podspec文件之后,我們使用lint命令進(jìn)行本地測試

pod lib lint

??可以使用 --verbose 參數(shù)開啟啰嗦模式的诵,可以查看詳細(xì)日志信息

pod lib lint --verbose

??如果有錯誤万栅,可以根據(jù)錯誤提示解決錯誤,文章最后部分列舉了幾種錯誤解決方式西疤。如果有警告可以不用管烦粒,也可嘗試解決

4.將庫文件打上tag,push到github

  • 查看沒有提交的文件

git status -s

image
  • 添加所有文件

git add .

  • 提交文件

git commit -m 'commit version 0.0.1'

??使用-m參數(shù)添加提交時(shí)候的日志信息代赁,一定要填

  • push 代碼到github

git push

  • 打上標(biāo)簽 tag

git tag '0.0.1'

??cocoapods發(fā)布依賴與標(biāo)簽tag扰她,前面.podspec文件里面的版本正是每一個tag的版本,建議tag與需要發(fā)布的版本相同

  • push tag到github

git push --tag

5.push到cocoapods

??使用push命令芭碍,發(fā)布自己的版本庫到cocoapods

pod trunk push DemoKit.podspec

??如果有警告可以使用--allow-warnings選項(xiàng)允許警告

pod trunk push DemoKit.podspec --allow-warnings

??如果依賴了第三方庫徒役,需要加上 --use-libraries 選項(xiàng)

??發(fā)布成功之后可以看到如下信息:

image

6.查看自己的pod庫

??提交成功幾分鐘之后就可以使用pod search DemoKit 來查看自己的庫了

pod search DemoKit

??如果查詢不到,可以嘗試初始化豁跑,或者更新本地的spec

pod repo init
pod repo update

??如果還是查詢不到廉涕,可以刪除本地的pod索引文件

sudo rm ~/Library/Caches/CocoaPods/search_index.json

??刪除之后再重新執(zhí)行pod search

五泻云、lint 錯誤

<span id = 'lint_issuse' ></span>

NO.1

  • ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include static binaries: (/private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libcrypto.a and /private/var/folders/m7/7t1r7_993fbgs40fppwxrsm80000gn/T/CocoaPods-Lint-20180301-60100-1meifl-Payment/Pods/openssl-ios-bitcode/lib/libssl.a)) during validation.

??依賴了其他庫,添加--use-libraries選項(xiàng)

$ pod lib lint --use-libraries

NO.2

xcodebuild: error: Unable to find a destination matching the provided destination specifier:

{ id:6AC7A44D-6523-4371-AAAB-C5191451D58E }



Available destinations for the "App" scheme:

{ platform:iOS Simulator, id:9C15AC46-816E-4A85-9F21-A693CE34D542, OS:11.2, name:iPhone SE }

{ platform:iOS Simulator, id:626866A7-B843-4CCF-B27D-00420F5F16DB, OS:11.2, name:iPhone X }



Ineligible destinations for the "App" scheme:

{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }

{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

Testing with xcodebuild.

??這個問題困擾了我很久艇拍,我是在查看cocoapods的issues#7454中才找了解決方案狐蜕。問題原因由于本地模擬器設(shè)置,在“Generic iOS Device”設(shè)備下無法通過編譯卸夕。目前暫行解決方式是在Xcode -> Window -> Devices & simulators 里面刪除模擬器层释,直到剩下錯誤信息中“Available destinations”下的設(shè)備,或者lint檢驗(yàn)通過快集。

??遇到問題贡羔,可以查看錯誤日志,或者查看Cocoapods的issues來解決問題个初。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乖寒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院溺,更是在濱河造成了極大的恐慌楣嘁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珍逸,死亡現(xiàn)場離奇詭異逐虚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谆膳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門叭爱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漱病,你說我怎么就攤上這事买雾。” “怎么了杨帽?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵凝果,是天一觀的道長。 經(jīng)常有香客問我睦尽,道長器净,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任当凡,我火速辦了婚禮山害,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沿量。我一直安慰自己浪慌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布朴则。 她就那樣靜靜地躺著权纤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汹想,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天外邓,我揣著相機(jī)與錄音,去河邊找鬼古掏。 笑死损话,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的槽唾。 我是一名探鬼主播丧枪,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庞萍!你這毒婦竟也來了拧烦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤钝计,失蹤者是張志新(化名)和其女友劉穎恋博,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葵蒂,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡交播,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了践付。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秦士。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖永高,靈堂內(nèi)的尸體忽然破棺而出隧土,到底是詐尸還是另有隱情,我是刑警寧澤命爬,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布曹傀,位于F島的核電站,受9級特大地震影響饲宛,放射性物質(zhì)發(fā)生泄漏皆愉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一艇抠、第九天 我趴在偏房一處隱蔽的房頂上張望幕庐。 院中可真熱鬧,春花似錦家淤、人聲如沸异剥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冤寿。三九已至歹苦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間督怜,已是汗流浹背殴瘦。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亮蛔,地道東北人痴施。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓擎厢,卻偏偏與公主長得像究流,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子动遭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

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