使用CocoaPods发布自己的开源库

简述

平常开发都是通过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

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

  • s.ios.deployment_target要跟framework的iOS版本对应,如下:
开源库支持的iOS版本
  • s.source_files 对应的是公开的文件,'ZHPageView/*.swift'匹配的是ZHPageView文件夹下以.swift为后缀的文件。

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

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

  • 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文件并发布
pod spec lint ZHPageView.podspec --verbose
pod trunk push ZHPageView.podspec
  • 6、cocoaPods集成开源库并测试验证

删除已发布的开源库

执行命令

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.

完毕!

项目的仓库地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容