iOS 制作CocoaPods依赖库

因为墙的缘故,我们没有用github,使用的是Coding。
另外说一句,不论是Coding还是GitHub、Gitee、Gitlab都是代码托管,规则基本相同。不影响pod库的创建。
本文章仅做参考用

开始

1. 准备源码

制作依赖库需要源代码,我们可以将源代码提前准备好。

我们写一个简单的代码,测试使用。如下图所示:


源代码

2. 创建本地仓库

  1. 在本地提前创建好一个文件夹。存放仓库。强烈建议文件夹和仓库名称一样。但是为了教学区别,我们创建了一个不一样的文件夹JJKit
  2. 打开终端 cd 到刚刚创建的文件夹目录下。
pod lib create 'JJKitDemo'

JJKitDemo就是我们创建的依赖库或者是第三方库的名字,到时候添加到podfile里面的名字。

执行完命令以后,后出现下面几个设置:


What platform do you want to use?? [ iOS / macOS ]
 > iOS
What language do you want to use?? [ Swift / ObjC ]
 > ObjC

Would you like to include a demo application with your library? [ Yes / No ]
 > No

Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > None

Would you like to do view based testing? [ Yes / No ]
 > No

What is your class prefix?
 > JJ

这个时候,正常情况下会成功,但是个别情况下会出现下面报错情况:

错误

解决办法就是去JJKit文件夹中,删掉JJKitDemo,重新来一次。

如果还不成功,就去该版本,这是因为项目支持的版本号太低,是9.3.我们把它改为10.0,后重新pod install就可以了。


该版本

项目打开后应该是这个样子的:

初始化demo

先把项目最小化。打开文件目录,是这样的:


文件目录

3. 本地仓库制作

  1. cd 到上图的Example目录下:
pod install

安装完成的终端显示如下图:


pod成功
  1. 打开项目building一下,不报错即可。如有报错,根据提示修改一下。很准。

  2. 把最开始准备的源码,复制进来。如图所示:

拷贝源码
  1. 配置本地仓库支持所需要的'podspec'文件

如下图所示:

podspec目录

打开后是这样的:

podspec

简单介绍一下里面的东西:

  s.name         // 这是默认的,不用改
  s.version      // 版本号,输入你准备的版本号,可以不用改
  s.summary    // 简介,最好写一个,不改后面会有警告
  s.description   // 详细说明,可写可不写。
  s.homepage    // 依赖库的介绍页的地址,随便放,没要求
  s.license       // 不用改
  s.author      // 作者信息
  s.source     // 远端依赖库的地址,下一步我们就会创建远端地址。不能写错
  s.ios.deployment_target = '10.0'   // 依赖库支持的最低iOS系统版本现在基本都是10.0了

  s.source_files // 引用库的文件目录,不用改
  s.resource_bundles // 依赖库如果需要icon的话,要打开
  s.frameworks // 用到的系统框架
  s.dependency //用到的第三方的依赖库,用到多个的话就写多个,OC一般问题不大,Swift问题会多一点,swift库支持的版本不稳定导致的。

4 .创建远端仓库

  1. 文章开头就说了,因为墙的缘故,我们没有用github,使用的是Coding。
    Coding功能和git差不多,但是不用设置太多东西,成功率比较高。
创建远端仓库

由于我之前创建过一次,所以名字显示重复了。

  1. 创建成功后,将地址复制下来。这里只支持https格式


    远端地址
  2. 将地址配置到刚刚的podspec文件中。然后update一下:

pod update --no-repo-update

如果有报错,根据提示进行修改。

  1. 执行完命令之后,源码就添加进来了。
代码安装成功
  1. 我们可以在项目中测试一下:
测试
  1. 测试通过后,这个时候就要验证一下.podspec文件的配置有没有问题,现在终端的路径需要回到本地仓库 JJKit的路径下了。执行命令:
pod lib lint

如果报错那么就根据提示修改。
修改完成以后,再一次执行

pod update --no-repo-update
pod lib lint

验证通过后就可以把代码提交到远端了。

  1. 提交代码

继续在本地仓库目录 JJKit下执行命令,把依赖库上传到Git需要给依赖库打上tag标签,相当于标记版本号。
第一步: 添加远端仓库的地址

git remote add origin 远端仓库地址

第二步,把所有修改过的文件添加到缓存区

git add .

第三步,提交变动记录

git commit -m "提交变动内容"

第四步,遵循先拉后推的原则,先拉一下远端仓库的代码

git pull origin master

这一步有可能会冲突,因为远端和本地都有README.md文件。为了防止冲突,可以删除一个,即使冲突了,也可以按照平时解决冲突的方法解决一下。

还有可能是两个master之间不相关,不能合并。我们可以强制执行:

git pull origin master --allow-unrelated-histories

第五步,推送代码到远端仓库

git push origin master

这一步也有可能失败,我们也可以强制执行:

git push --force 远端仓库地址

第六步,给依赖库打上tag标签,注意,这个标签的版本号一定要和.podspec文件中的version一致

git tag 0.1.0

第七步,将tag标签推送到远端仓库

git push origin 0.1.0

这时候我们到远端仓库看一下,已经有记录了。

远端仓库

5.创建私有索引库

5.1 创建远端索引库

到这里,本地仓库和远端仓库都创建完成并且验证完成了,想要支持CocoaPods安装,还必须要一个管理仓库,也叫索引库。

索引库和仓库一样也是需要两个,一个本地的一个远端的。
但是由于我是用的是coding代码库,是国内的,所以不需要这一步。

关于索引库的步骤,从网上拷贝一个过程:
原作者:当布利都教授

  1. 创建远端索引库的方式和创建远端仓库的方式一样
    JJSpec

2、远端索引库的地址,我这里用的https格式

5.2.创建本地索引库

1、创建本地索引库,需要终端回到根目录,或者退出终端重新打开,还需要远端索引库的地址,因为需要把远端索引库和本地索引库关联起来,这就是需要先创建远端索引库,再创建本地索引库的原因,为了避免一些不可描述的问题发生,还是强烈建议本地索引库的名字和远端索引库的名字一致,然后执行如下命令:

pod repo add 本地索引库名字 远端索引库的地址

2、为了验证是否创建成功,可以直接在终端输入命令查看创建结果,终端命令如下:

pod repo

3、到这里,准备工作都做完了,需要把.podspec文件推送到远端索引库进行绑定操作,终端需要回到本地仓库所在的目录下,再执行命令,终端命令如下:

pod repo push 索引库名字 JJKitDemo.podspec

4、回到远端索引库刷新看下是否提交成功

6. 公开索引库

以上5都是私有库索引的方法
如何要创建公开库:

  1. 发布到cocoapods 上进行托管
    先用pod spec lint 验证podspec 文件
pod spec lint JJKit.podspec

如果报了个警告,直接使用pod spec lint --allow-warnings来忽略所有警告即可。
 --verbose --use-libraries
--verbose 显示详细信息
--use-libraries 如果依赖了静态库使用这个可以校验通过
--allow-warnings 忽略警告
  1. 发布
输入 pod trunk push --allow-warnings命令来发布到cocoapods上,这可能需要几分钟时间。

如果报错:尝试pod trunk push --verbose --use-libraries
pod trunk push --verbose --allow-warnings --use-libraries

7. 验证

1、创建一个测试demo,用CocoaPods引入我们的依赖库,如下图:


demo

注意:这里需要指向,因为这个库其实并没有公开发布。

install之后成功!

如果是发布到cocoapods上以后就可以直接写:pod 'JJKitDemo',不用写后面git地址。

8. 更新依赖库版本

  1. 打开本地源码,进行修改。
  2. 修改完成以后,修改podspec文件的版本号,比如:0.2.0
    cd到本地仓库的Example目录下,然后再执行命令pod update --no-repo-update,终端会显示更新成功

看到版本号从0.1.0更新到了0.2.0了,到这里,还是有必要对本地仓库进行一次验证,终端回到本地仓库的路径下执行命令pod lib lint

有显示passed validation,并且版本号也是0.2.0,表示验证通过,源码的修改也生效了。

  1. 接下来一系列的操作,保存、提交、拉取、推送、打标签、推送标签,整个流程没报错。
    刷新一下远端仓库看提交上去没有,有就是成功了

标签也成功了:

标签

如果是coding,到这里就结束了。可以去更新demo验证了。update一下就行了。

  1. 这是提交到需要的步骤,github 把.podspec文件推送到远端索引库进行绑定,还是在本地仓库所在的目录下,终端执行命令pod repo push 索引库名字 JJKitDemo.podspec,终端显示如下:

  2. 看下远端索引库是否提交成功

  3. 公开索引库和之前步骤一样

9. 总结

网上抄来的:
原作者:当布利都教授


制作一个支持CocoaPods依赖库共需要四个仓库:
远端仓库
本地仓库
远端索引库
本地索引库

其中本地仓库用来测试及调整源码,远端仓库用来保存本地仓库的所有文件,远端索引库用来支持CocoaPods安装,本地索引库用来和远端索引库进行绑定,并把本地仓库的.podspec文件推送到远端索引库。
源码的每次变动都必须要打tag标签,并且推送tag的时候必须和.podspec文件中的version一致。
只要远端仓库和远端索引库存在,可以随时随地维护自己的依赖库。

步骤总结


1、创建本地代码库:pod lib create 仓库名

2、创建远端代码库,拿到远端代码库git地址,回到本地代码库目录下打开.podspec文件替换掉source地址和homepage地址,修改summary内容

3、cd到Example目录下,更新本地代码库:pod update --no-repo-update(此步骤可跳过)

4、cd到本地代码库目录下,验证:pod lib lint --allow-warnings

5、将本地代码库推送到远端代码库并打标签(tag标签版本号和.podspec中版本号一致)
   git remote add origin 远端代码库git地址
   git add .
   git commit -m 'commit'
   git pull origin master(新仓库推送代码,此步骤可跳过)
   git push --force 远端代码库git地址(强制推送合并代码)
   git tag 0.0.1
   git push origin 0.0.1

6、创建远端索引库

7、重新打开终端或cd ~,创建本地索引库:pod repo add 本地索引库名 远端索引库git地址

8、验证本地索引库:pod repo(或直接查看本地索引库是否创建成功:~/.cocoapods/repos)

9、cd到本地代码库目录,将本地代码库的.podspec文件和索引库邦的:pod repo push 索引库名 本地代码库.podspec --allow-warnings

10、在Demo项目中,pod引入组件库
   指定分支:pod '代码库名', :git => '代码库git地址', :branch => 'master'
   指定commit:pod '代码库名', :git => '代码库git地址', :commit => '******'
   可将代码库本地引入,修改代码库中源码:clone代码库到Demo项目同级目录,podfile文件改为:pod '代码库名', :path => '../代码库名'

11、创建远端代码库和索引库时,保证仓库中有文件存在,避免push不成功

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