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

簡述

平常開發(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項目

創(chuàng)建framework項目

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


勾上git

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


創(chuàng)建APP項目

選擇iOS-App

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

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


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

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


881622103796_.pic.jpg

創(chuàng)建項目完成

上傳到GitHUb

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

創(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的文件,如圖:


創(chuàng)建.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版本對應,如下:
開源庫支持的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)絡原因?qū)е率?/div>

我的應對方法是,不停的重新校驗,或者切換網(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.

完畢!

項目的倉庫地址

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容