使用CocoaPods發(fā)布自己的開源庫

簡述

平常開發(fā)都是通過CocoaPods集成別人的開源庫必逆,這次要做一個自己的開源庫,雖然是仿照別人的開源庫寫,但是重點(diǎn)是發(fā)布到CocoaPods的流程岭接。發(fā)布過程中并不順利,所以留個記錄臼予,便于以后查找鸣戴,也便于有緣人參考。
成功發(fā)布自己的開源庫主要分為4個部分粘拾,從創(chuàng)建項目開始窄锅,然后是上傳到GitHub,第三步是配置半哟,第四步發(fā)布酬滤。最后是驗證自己發(fā)布的開源庫是不是可以搜到,可以集成到項目中寓涨。
下面進(jìn)入主題

創(chuàng)建項目

一般來說盯串,我們集成開源庫時,沒有帶demo的戒良,都是有用的代碼文件体捏,但是作為開源庫作者,肯定要有一個對應(yīng)的demo才方便開發(fā)-驗證-上傳-迭代糯崎。所以需要創(chuàng)建一個帶有demo和開源庫的項目几缭,下面開始創(chuàng)建

創(chuàng)建一個名字為ZHPageView的framework項目

創(chuàng)建framework項目

記得勾上git,創(chuàng)建對應(yīng)的本地倉庫


勾上git

創(chuàng)建完成后沃呢,因為是framework而并非App項目年栓,所以肯定是跑不起來的,所以需要建一個與這個framework項目關(guān)聯(lián)的App項目薄霜,創(chuàng)建方式如下:


創(chuàng)建APP項目

選擇iOS-App

接下來就是跟你平時創(chuàng)建項目一樣某抓,創(chuàng)建完成后我的目錄是這樣的
初始化創(chuàng)建完成目錄

那整個結(jié)構(gòu)的初始部分創(chuàng)建完畢纸兔,分別編譯兩個項目,正常來說都會編譯成功否副。
接下來就是編寫開源庫及demo的代碼
此處省略1024...
如果整個項目開發(fā)完成汉矿,就可以進(jìn)入下一個步驟。
我開發(fā)完成以后是這樣的層級目錄結(jié)構(gòu):


目錄結(jié)構(gòu)

其中ZHPageView文件夾下的三個.swift文件是加進(jìn)去的备禀,info.plist和ZHPageView.h是創(chuàng)建項目時自帶的洲拇。
開源庫對外的文件就是ZHPageView文件夾下的這三個.swift文件,后面配置中會有說到曲尸。
跑起來的效果如下


881622103796_.pic.jpg

創(chuàng)建項目完成

上傳到GitHUb

要上傳先得有遠(yuǎn)程倉庫赋续,在GitHub上創(chuàng)建一個對應(yīng)的遠(yuǎn)程倉庫

創(chuàng)建遠(yuǎn)程倉庫

注意紅色框的地方,別選錯就行队腐,創(chuàng)建成功后得到一個倉庫地址蚕捉。接下來就是將本地倉庫跟遠(yuǎn)程倉庫關(guān)聯(lián)上,直接展示命令如下:

// 首先提交代碼
git add .
git commit -m "run demo"  

// 本地倉庫關(guān)聯(lián)遠(yuǎn)程倉庫
git remote add origin https://github.com/xiangzuhua0209/ZHPageView.git 

// 將遠(yuǎn)程倉庫的文件全部拉下來到本地
git pull --rebase origin main

// 將本地已經(jīng)提交的文件全部push到遠(yuǎn)程倉庫
git push --set-upstream origin main

// 查看是否都提交了
git status

// 如果還有改變未提交柴淘,再進(jìn)行一次提交并push到遠(yuǎn)程
git add .
git commit -m "changes"
git push // 可以看到已經(jīng)能push到遠(yuǎn)程倉庫了

到這一步迫淹,本地倉庫和遠(yuǎn)程倉庫成功關(guān)聯(lián)

配置

打tag

必須要有,跟版本控制有關(guān)为严,

git tag 1.0.0

push到遠(yuǎn)程倉庫

git push --tags
創(chuàng)建.podspec文件

這個地方最關(guān)鍵敛熬,創(chuàng)建位置在與README.md和LICENSE同級的目錄下,命令如下:

pod spec create ZHPageView

會得到一個名字為ZHPageView.podspec的文件第股,如圖:


創(chuàng)建.podspec文件

然后開始編輯里面的內(nèi)容应民,建議進(jìn)到文件夾用文件編輯器打開這個文件,在終端打開編輯比較慢夕吻,最后格式應(yīng)該是這樣的:

Pod::Spec.new do |s|
  s.name         = 'ZHPageView'
  s.version      = '1.0.0'
  s.swift_version = '5.0'
  s.summary      = 'Simple Tabs'
  s.description  = <<-DESC
            News Categories, Slide toggle, Tabs, Title Options诲锹,ViewControllers
            DESC
  s.homepage     = 'https://github.com/xiangzuhua0209/ZHPageView'
  s.license      = { :type => 'MIT', :file => 'LICENSE' }
  s.author       = { 'xiangzuhua' => 'xiangzhuhua0209@126.com' }
  s.ios.deployment_target = "13.0"
  s.source       = { :git => 'https://github.com/xiangzuhua0209/ZHPageView.git', :tag => s.version }
  s.source_files = 'ZHPageView/*.swift'
  s.requires_arc = true 
end

就是配置基本信息,一般能看懂大概意思涉馅。就說兩個地方,

  • s.ios.deployment_target要跟framework的iOS版本對應(yīng)归园,如下:
開源庫支持的iOS版本
  • s.source_files 對應(yīng)的是公開的文件,'ZHPageView/*.swift'匹配的是ZHPageView文件夾下以.swift為后綴的文件稚矿。

編輯完成后進(jìn)行校驗庸诱,看語法是否正確,同樣是在該文件目錄下晤揣,執(zhí)行命令:

pod spec lint ZHPageView.podspec --verbose

要等待幾分鐘桥爽,如果最后是下面這樣的結(jié)果,說明配置沒問題:

    ** BUILD SUCCEEDED **
    
   Testing with `xcodebuild`. 
 -> ZHPageView (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | xcodebuild:  note: Building targets in parallel
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - 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')

Analyzed 1 podspec.

ZHPageView.podspec passed validation.

不過一般都沒那么順利昧识,除了語法問題钠四,還有一個網(wǎng)絡(luò)問題經(jīng)常導(dǎo)致校驗失敗,像下面這樣是再正常不過了:


網(wǎng)絡(luò)原因?qū)е率?/div>

我的應(yīng)對方法是跪楞,不停的重新校驗形导,或者切換網(wǎng)絡(luò)重新校驗环疼,一般來說习霹,最后會成功的

萬事俱備朵耕,只差發(fā)布了

發(fā)布

發(fā)布的命令如下:

pod trunk push ZHPageView.podspec

在.podspec文件目錄下執(zhí)行就可以,等待發(fā)布結(jié)果淋叶,

?  ZHPageView git:(main) ? pod trunk push ZHPageView.podspec
Updating spec repo `trunk`
Validating podspec
 -> ZHPageView (1.0.0)
    - NOTE  | xcodebuild:  note: Using new build system
    - NOTE  | xcodebuild:  note: Building targets in parallel
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - 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

 ??  ZHPageView (1.0.0) successfully published
 ??  May 27th, 20:29
 ??  https://cocoapods.org/pods/ZHPageView
 ??  Tell your friends!
--------------------------------------------------------------------------------

像這樣顯示的話說明發(fā)布成功阎曹,既然發(fā)布成功,那應(yīng)該可以搜到

搜尋

搜索的命令很簡單了

pod search ZHPageView

搜索結(jié)果如下:

-> ZHPageView (1.0.0)
   ZHPageView is a Slide tabs pure-Swift library
   pod 'ZHPageView', '~> 1.0.0'
   - Homepage: https://github.com/xiangzuhua0209/ZHPageView
   - Source:   https://github.com/xiangzuhua0209/ZHPageView.git
   - Versions: 1.0.0 [master repo]

-> EMPageViewController (4.0.0)
   A better page view controller for iOS.
   pod 'EMPageViewController', '~> 4.0.0'
   - Homepage: https://github.com/emalyak/EMPageViewController
   - Source:   https://github.com/emalyak/EMPageViewController.git
   - Versions: 4.0.0, 3.0.0, 2.0.2, 2.0.1, 2.0.0, 2.0.0-beta.1 [master repo]

-> JHPageViewController (0.2.3)
   JHPageViewController.
   pod 'JHPageViewController', '~> 0.2.3'
   - Homepage: https://github.com/jackiehu/
   - Source:   https://github.com/jackiehu/JHPageViewController.git
   - Versions: 0.2.3, 0.2.2 [master repo]

-> LXPageViewWithButtonsViewController (0.1.2)

赫赫有名煞檩,能搜到應(yīng)該能集成处嫌,試一試
如果搜尋不到,可以試試更新本地倉庫

pod repo update // 更新本地倉庫斟湃,本地倉庫完成后熏迹,即可搜索到指定的第三方庫

如果還搜不到,就去百度或者谷歌吧

自己集成

隨便新建一個項目凝赛,創(chuàng)建Podfile文件注暗,添加配置:

platform :ios,'13.0'
 target 'Test' do
 use_frameworks!
 inhibit_all_warnings!
 pod 'ZHPageView', '~> 1.0.0'
end

執(zhí)行pod install

?  Test git:(main) ? pod install          
Analyzing dependencies
Downloading dependencies
Installing ZHPageView (1.0.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `Test.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

集成成功!再試下通過.xcworkspace文件打開項目墓猎,編譯是否通過捆昏,通過就沒問題了。我的測試項目集成后的樣子是這樣的:


集成開源庫后的目錄

迭代版本

如果給開源庫修復(fù)了bug毙沾,或者添加新功能骗卜,那就要更新開源庫的版本,操作方式和上面的類似左胞,這里我就簡單描述下

  • 1寇仓、修復(fù)bug或更新功能

代碼寫完后,編譯framework烤宙,然后再demo上測試通過

  • 2遍烦、代碼提交到GitHub的倉庫中
git add .
git commit -m "fix bug"
git push
  • 3、打tag
git tag 1.0.1
git push --tags
  • 4门烂、修改.podspec文件

將文件中的version對應(yīng)的版本號改一下

s.version      = '1.0.1'
  • 5乳愉、驗證podspec文件并發(fā)布
pod spec lint ZHPageView.podspec --verbose
pod trunk push ZHPageView.podspec
  • 6、cocoaPods集成開源庫并測試驗證

刪除已發(fā)布的開源庫

執(zhí)行命令

pod trunk delete ZHPageView 1.0.0

一般會有提示屯远,輸入y就可以蔓姚,如果刪除成功,會有提示

?  ZHPageView git:(main) ? pod trunk delete ZHPageView 1.0.0
WARNING: It is generally considered bad behavior to remove versions of a Pod that others are depending on!
Please consider using the `deprecate` command instead.
Are you sure you want to delete this Pod version?
> y

[!] The version is already deleted.

完畢慨丐!

項目的倉庫地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坡脐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子房揭,更是在濱河造成了極大的恐慌备闲,老刑警劉巖晌端,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恬砂,居然都是意外死亡咧纠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門泻骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漆羔,“玉大人,你說我怎么就攤上這事狱掂⊙菅鳎” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵趋惨,是天一觀的道長鸟顺。 經(jīng)常有香客問我,道長器虾,這世上最難降的妖魔是什么讯嫂? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮曾撤,結(jié)果婚禮上端姚,老公的妹妹穿的比我還像新娘。我一直安慰自己挤悉,他們只是感情好渐裸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著装悲,像睡著了一般昏鹃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诀诊,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天洞渤,我揣著相機(jī)與錄音,去河邊找鬼属瓣。 笑死载迄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抡蛙。 我是一名探鬼主播护昧,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粗截!你這毒婦竟也來了惋耙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绽榛,沒想到半個月后湿酸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灭美,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年推溃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冲粤。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡美莫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梯捕,到底是詐尸還是另有隱情,我是刑警寧澤窝撵,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布傀顾,位于F島的核電站,受9級特大地震影響碌奉,放射性物質(zhì)發(fā)生泄漏短曾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一赐劣、第九天 我趴在偏房一處隱蔽的房頂上張望嫉拐。 院中可真熱鬧,春花似錦魁兼、人聲如沸婉徘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖呼。三九已至,卻和暖如春化撕,著一層夾襖步出監(jiān)牢的瞬間几晤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工植阴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟹瘾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓掠手,卻偏偏與公主長得像憾朴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惨撇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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