簡述
平常開發(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項目
記得勾上git,創(chuàng)建對應(yīng)的本地倉庫
創(chuàng)建完成后沃呢,因為是framework而并非App項目年栓,所以肯定是跑不起來的,所以需要建一個與這個framework項目關(guān)聯(lián)的App項目薄霜,創(chuàng)建方式如下:
接下來就是跟你平時創(chuàng)建項目一樣某抓,創(chuàng)建完成后我的目錄是這樣的
那整個結(jié)構(gòu)的初始部分創(chuàng)建完畢纸兔,分別編譯兩個項目,正常來說都會編譯成功否副。
接下來就是編寫開源庫及demo的代碼
此處省略1024...
如果整個項目開發(fā)完成汉矿,就可以進(jìn)入下一個步驟。
我開發(fā)完成以后是這樣的層級目錄結(jié)構(gòu):
其中ZHPageView文件夾下的三個.swift文件是加進(jìn)去的备禀,info.plist和ZHPageView.h是創(chuàng)建項目時自帶的洲拇。
開源庫對外的文件就是ZHPageView文件夾下的這三個.swift文件,后面配置中會有說到曲尸。
跑起來的效果如下
創(chuàng)建項目完成
上傳到GitHUb
要上傳先得有遠(yuǎn)程倉庫赋续,在GitHub上創(chuàng)建一個對應(yī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的文件第股,如圖:
然后開始編輯里面的內(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)归园,如下:
- 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)致校驗失敗,像下面這樣是再正常不過了:
我的應(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.
完畢慨丐!
- 文/潘曉璐 我一進(jìn)店門泻骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漆羔,“玉大人,你說我怎么就攤上這事狱掂⊙菅鳎” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵趋惨,是天一觀的道長鸟顺。 經(jīng)常有香客問我,道長器虾,這世上最難降的妖魔是什么讯嫂? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮曾撤,結(jié)果婚禮上端姚,老公的妹妹穿的比我還像新娘。我一直安慰自己挤悉,他們只是感情好渐裸,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著装悲,像睡著了一般昏鹃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诀诊,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粗截!你這毒婦竟也來了惋耙?” 一聲冷哼從身側(cè)響起,我...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡灭美,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年推溃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冲粤。...
- 正文 年R本政府宣布傀顾,位于F島的核電站,受9級特大地震影響碌奉,放射性物質(zhì)發(fā)生泄漏短曾。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一赐劣、第九天 我趴在偏房一處隱蔽的房頂上張望嫉拐。 院中可真熱鬧,春花似錦魁兼、人聲如沸婉徘。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽盖呼。三九已至,卻和暖如春化撕,著一層夾襖步出監(jiān)牢的瞬間几晤,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓掠手,卻偏偏與公主長得像憾朴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惨撇,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 發(fā)布自己的cocoapods開源庫按照以下步驟伊脓,良心制作,包教包會!报腔! 下面我會通過一個名為IFMMenu的項目來...
- 如何發(fā)布自己的開源框架到CocoaPods ——在項目所在目錄下執(zhí)行* pod init * , 生成Podfil...
- 前提你的cocopod已經(jīng)安裝好了株搔,如果沒有安裝好,請參考這篇文章:macOS Sierra 10.12.1 (X...
- ?? 這篇文章詳細(xì)的講解如何發(fā)布自己的開源框架到Cocoapods,比較基礎(chǔ)纯蛾,如有錯誤纤房,歡迎指正。要點(diǎn): pod的...
- 原文鏈接http://blog.ltove.com/article/166.html在ios項目的實際開發(fā)中我們經(jīng)...