簡述
平常開發(fā)都是通過CocoaPods集成別人的開源庫,這次要做一個自己的開源庫,雖然是仿照別人的開源庫寫,但是重點是發(fā)布到CocoaPods的流程。發(fā)布過程中并不順利,所以留個記錄,便于以后查找,也便于有緣人參考。
成功發(fā)布自己的開源庫主要分為4個部分,從創(chuàng)建項目開始,然后是上傳到GitHub,第三步是配置,第四步發(fā)布。最后是驗證自己發(fā)布的開源庫是不是可以搜到,可以集成到項目中。
下面進入主題
創(chuàng)建項目
一般來說,我們集成開源庫時,沒有帶demo的,都是有用的代碼文件,但是作為開源庫作者,肯定要有一個對應的demo才方便開發(fā)-驗證-上傳-迭代。所以需要創(chuàng)建一個帶有demo和開源庫的項目,下面開始創(chuàng)建
創(chuàng)建一個名字為ZHPageView的framework項目

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

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


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

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

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

創(chuàng)建項目完成
上傳到GitHUb
要上傳先得有遠程倉庫,在GitHub上創(chuàng)建一個對應的遠程倉庫

注意紅色框的地方,別選錯就行,創(chuàng)建成功后得到一個倉庫地址。接下來就是將本地倉庫跟遠程倉庫關聯(lián)上,直接展示命令如下:
// 首先提交代碼
git add .
git commit -m "run demo"
// 本地倉庫關聯(lián)遠程倉庫
git remote add origin https://github.com/xiangzuhua0209/ZHPageView.git
// 將遠程倉庫的文件全部拉下來到本地
git pull --rebase origin main
// 將本地已經(jīng)提交的文件全部push到遠程倉庫
git push --set-upstream origin main
// 查看是否都提交了
git status
// 如果還有改變未提交,再進行一次提交并push到遠程
git add .
git commit -m "changes"
git push // 可以看到已經(jīng)能push到遠程倉庫了
到這一步,本地倉庫和遠程倉庫成功關聯(lián)
配置
打tag
必須要有,跟版本控制有關,
git tag 1.0.0
push到遠程倉庫
git push --tags
創(chuàng)建.podspec文件
這個地方最關鍵,創(chuàng)建位置在與README.md和LICENSE同級的目錄下,命令如下:
pod spec create ZHPageView
會得到一個名字為ZHPageView.podspec的文件,如圖:

然后開始編輯里面的內(nèi)容,建議進到文件夾用文件編輯器打開這個文件,在終端打開編輯比較慢,最后格式應該是這樣的:
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版本對應,如下:

- s.source_files 對應的是公開的文件,'ZHPageView/*.swift'匹配的是ZHPageView文件夾下以.swift為后綴的文件。
編輯完成后進行校驗,看語法是否正確,同樣是在該文件目錄下,執(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)絡問題經(jīng)常導致校驗失敗,像下面這樣是再正常不過了:

我的應對方法是,不停的重新校驗,或者切換網(wǎng)絡重新校驗,一般來說,最后會成功的
萬事俱備,只差發(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ā)布成功,那應該可以搜到
搜尋
搜索的命令很簡單了
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)
赫赫有名,能搜到應該能集成,試一試
如果搜尋不到,可以試試更新本地倉庫
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文件打開項目,編譯是否通過,通過就沒問題了。我的測試項目集成后的樣子是這樣的:

迭代版本
如果給開源庫修復了bug,或者添加新功能,那就要更新開源庫的版本,操作方式和上面的類似,這里我就簡單描述下
-
1、修復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對應的版本號改一下
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.
完畢!
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內(nèi)容
- 發(fā)布自己的cocoapods開源庫按照以下步驟,良心制作,包教包會!! 下面我會通過一個名為IFMMenu的項目來...
- 如何發(fā)布自己的開源框架到CocoaPods ——在項目所在目錄下執(zhí)行* pod init * , 生成Podfil...
- 前提你的cocopod已經(jīng)安裝好了,如果沒有安裝好,請參考這篇文章:macOS Sierra 10.12.1 (X...
- ?? 這篇文章詳細的講解如何發(fā)布自己的開源框架到Cocoapods,比較基礎,如有錯誤,歡迎指正。要點: pod的...
- 原文鏈接http://blog.ltove.com/article/166.html在ios項目的實際開發(fā)中我們經(jīng)...