使用CocoaPods发布自己的开源库

2021-05-28  本文已影响0人  爬树的蚂蚁

简述

平常开发都是通过CocoaPods集成别人的开源库,这次要做一个自己的开源库,虽然是仿照别人的开源库写,但是重点是发布到CocoaPods的流程。发布过程中并不顺利,所以留个记录,便于以后查找,也便于有缘人参考。
成功发布自己的开源库主要分为4个部分,从创建项目开始,然后是上传到GitHub,第三步是配置,第四步发布。最后是验证自己发布的开源库是不是可以搜到,可以集成到项目中。
下面进入主题

创建项目

一般来说,我们集成开源库时,没有带demo的,都是有用的代码文件,但是作为开源库作者,肯定要有一个对应的demo才方便开发-验证-上传-迭代。所以需要创建一个带有demo和开源库的项目,下面开始创建

创建一个名字为ZHPageView的framework项目

创建framework项目

记得勾上git,创建对应的本地仓库


勾上git

创建完成后,因为是framework而并非App项目,所以肯定是跑不起来的,所以需要建一个与这个framework项目关联的App项目,创建方式如下:


创建APP项目
选择iOS-App
接下来就是跟你平时创建项目一样,创建完成后我的目录是这样的
初始化创建完成目录

那整个结构的初始部分创建完毕,分别编译两个项目,正常来说都会编译成功。
接下来就是编写开源库及demo的代码
此处省略1024...
如果整个项目开发完成,就可以进入下一个步骤。
我开发完成以后是这样的层级目录结构:


目录结构

其中ZHPageView文件夹下的三个.swift文件是加进去的,info.plist和ZHPageView.h是创建项目时自带的。
开源库对外的文件就是ZHPageView文件夹下的这三个.swift文件,后面配置中会有说到。
跑起来的效果如下


881622103796_.pic.jpg

创建项目完成

上传到GitHUb

要上传先得有远程仓库,在GitHub上创建一个对应的远程仓库

创建远程仓库

注意红色框的地方,别选错就行,创建成功后得到一个仓库地址。接下来就是将本地仓库跟远程仓库关联上,直接展示命令如下:

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

// 本地仓库关联远程仓库
git remote add origin https://github.com/xiangzuhua0209/ZHPageView.git 

// 将远程仓库的文件全部拉下来到本地
git pull --rebase origin main

// 将本地已经提交的文件全部push到远程仓库
git push --set-upstream origin main

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

// 如果还有改变未提交,再进行一次提交并push到远程
git add .
git commit -m "changes"
git push // 可以看到已经能push到远程仓库了

到这一步,本地仓库和远程仓库成功关联

配置

打tag

必须要有,跟版本控制有关,

git tag 1.0.0

push到远程仓库

git push --tags
创建.podspec文件

这个地方最关键,创建位置在与README.md和LICENSE同级的目录下,命令如下:

pod spec create ZHPageView

会得到一个名字为ZHPageView.podspec的文件,如图:


创建.podspec文件

然后开始编辑里面的内容,建议进到文件夹用文件编辑器打开这个文件,在终端打开编辑比较慢,最后格式应该是这样的:

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

就是配置基本信息,一般能看懂大概意思。就说两个地方,

开源库支持的iOS版本

编辑完成后进行校验,看语法是否正确,同样是在该文件目录下,执行命令:

pod spec lint ZHPageView.podspec --verbose

要等待几分钟,如果最后是下面这样的结果,说明配置没问题:

    ** 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.

不过一般都没那么顺利,除了语法问题,还有一个网络问题经常导致校验失败,像下面这样是再正常不过了:


网络原因导致失败

我的应对方法是,不停的重新校验,或者切换网络重新校验,一般来说,最后会成功的

万事俱备,只差发布了

发布

发布的命令如下:

pod trunk push ZHPageView.podspec

在.podspec文件目录下执行就可以,等待发布结果,

➜  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!
--------------------------------------------------------------------------------

像这样显示的话说明发布成功,既然发布成功,那应该可以搜到

搜寻

搜索的命令很简单了

pod search ZHPageView

搜索结果如下:

-> 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 // 更新本地仓库,本地仓库完成后,即可搜索到指定的第三方库

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

自己集成

随便新建一个项目,创建Podfile文件,添加配置:

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

执行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,或者添加新功能,那就要更新开源库的版本,操作方式和上面的类似,这里我就简单描述下

代码写完后,编译framework,然后再demo上测试通过

git add .
git commit -m "fix bug"
git push
git tag 1.0.1
git push --tags

将文件中的version对应的版本号改一下

s.version      = '1.0.1'
pod spec lint ZHPageView.podspec --verbose
pod trunk push ZHPageView.podspec

删除已发布的开源库

执行命令

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.

完毕!

项目的仓库地址

上一篇下一篇

猜你喜欢

热点阅读