cocoaPods私有库的创建与使用

前言:创建私有 Spec Repo(也就是所有私有 pod 的仓库)

spec repo 是pods的一个索引,是所有公开的pods 的podspec文件的一个仓库,其实就是一个部署在服务器的Git仓库,当你使用CocoaPods 后它会被Clone到本地的~/.cocoapods/repos。这个仓库只存放podspec文件

步骤1:创建私有仓库

1、在git上创建私有仓库地址

测试私有仓库地址:http://10.20.7.105/Component-based/DSTestLib.git

2、查看本地索引是否建立 

      查看命令:  pod repo list

查看本地索引是否建立 

3、如果本地索引未建立,在终端terminal执行命令 创建本地索引

首先 进入~/.cocoapods/repos目录 查看有一个master的目录,master就是cocoapod官网的索引源,现在要做的就是创建自己私有的Spec Repo.

# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

$ pod repo add DSSpecs http://10.20.7.105/Component-based/DSSpecs.git

步骤2:创建 Pod 项目工程

1、创建 Pod 项目工程

# pod lib create [Project Name]

$ pod lib create MyLib

xxxxLib是你自己组件代码的名称

这个命令会自动生成一套组件代码工程测试代码,并且有Git管理

还会生成podspec索引文件.

会有以下提示,按照问题回答就可以 ,如果碰到创建失败的情况,更新 cocoaPods 再试试!

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide:

https://guides.cocoapods.org/making/using-pod-lib-create.html

( hold cmd and click links to open in a browser. )

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 ]

> yes

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?

> DS

最后一行私有库如果有前缀,填写前缀,例如: DS   如果没有前缀,填写: no

上面依次对应平台类型 、 语言 、 Demo 、 测试框架 、 界面测试 、 类前缀 等,填完之后Enter,会生成如下图的工程目录代码。

工程目录代码

2、添加相关代码

├── MyLib

│ ├── Assets **存放资源文件!!!**

│ └── Classes

│            └── ReplaceMe.m **注意存放你自己实现的库相关代码!!!**

├── Example

│          **就是一个样例工程相关代码文件**

3、开发模式下测试 pod 打开Example工程目录下的podfile文件:

#pod 'MyLib', :path => '../' # 指定路径

pod 'DSTestLib', :path => '../' # 指定podspec文件

然后在 Example 工程目录下执行 pod update命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了 不过它们并没有在 Pods 目录下,而是跟测试项目一样存在于 Development Pods/MyLib 中,这是因为我们是在本地测试,而没有把 podspec 文件添加到 Spec Repo 中的缘故。测试库文件没有问题,接着我们需要执行第4步

4、提交Pod到代码仓库

注意:不是podspec索引仓库,是代码仓库在终端执行命令:

$ git add .

$ git commit -s -m "初始化MyLib 库"

$ git remote add origin http://10.20.7.105/Component-based/DSTestLib.git#添加远端仓库

$ git push origin master #提交到远端仓库

步骤3:提交podspec文件到私有Spec Repo仓库

1、配置podspec文件

配置podspec文件

打开工程,查看DSTestLib.podspec文件

s.version 是pod的版本信息 这个后面打tag的时候用的到

s.summary 是简短的描述

s.source 是项目远程仓库的地址,这里不要用SSH,用HTTPS。

s.homepage 是项目主页地址 就是HTTPS地址后面去掉.git 就可以

s.source_files 是项目的文件 就是刚才替换ReplaceMe.m的那些文件

s.resource_bundles 是资源文件

s.frameworks 是用到了系统的哪些库 例如UIKit、Foundation

s.dependency 是用到哪些第三方库 比如AFNetworking 有多个就写多个s.dependency

s.public_header_files 项目的公共头文件,举个例子,当引入Masonry、YTKNetwork的时候 可以创建一个header文件,然后将#import “Masonry.h” #import “YTKNetwork.h”写入进去

 podspec更多配置请参考: 官方文档

2、编辑完MyLib.podspec文件后,需要验证一下这个MyLib.podspec文件是否可用

$ pod lib lint // 如果终端输出这个信息,就说明验证通过,否则会提示错误信息,去修改

-> DSTestLib (0.1.0)

DSTestLib passed validation.

验证一下这个MyLib.podspec文件是否可用

$ pod lib lint --verbose

$ pod lib lint --allow-warnings

$ pod lib lint --sources=https://gitee.com/yuyiios/YYSpecs.git

$ pod lib lint --use-libraries

–verbose 假如有error,查看报错信息

–allow-warnings 假如有warning,可以通过来忽略错误信息通过验证

–sources 假如这个私有库还依赖其他的私有库,一定要指定私有库的索引源(就是我上文说的YYSpecs的git地址)–sources=https://github.com/artsy/Specs,master

–use-libraries 如果用了第三方的framework或者静态库,要加上。

3、给pod 打上标签

$ git tag 0.1.0     #打上标签,这个很重要

$ git push 0.1.0#推送tag到远端仓库

到这里,成功提交到远程代码仓库,MyLib Pod 库就初步完成了代码实现,接下来就是重点了,将制作的私有库放到podspec索引仓库。

4、pod 检验 

   打完标签后,执行

 $ pod spec lint

pod lib lint和pod spec lint的区别是前者只会检验本地的pod,后者是本地和远端都会检验,所以之前用到的--allow-warning --sources --use-libraries 等命令的这里都要带上。

5、推送至索引源仓库

远端和本地都校验通过后就要将DSTestLib.podspec推送至DSSpecs仓库中 成功后去~/.cocoapods/repos/DSSpecs有个DSTestLib目录 有个0.1.0的版本

~/.cocoapods/repos/DSSpecs 有个DSTestLib目录

同时,索引库DSSpecsmaster分支会有DSTestLib的提交记录;

索引库DSSpecs  master分支会有DSTestLib的提交记录

#$ pod repo push [Repo名] [podspec 文件名字]

$ pod repo pushDSSpecsDSTestLib.podspec

$ pod repo pushDSSpecsDSTestLib.podspec--verbose --allow-warnings

可选参数同样包括上述的--source=,跟上面描述的一样,不再赘述。

这样创建私有库的工作就完成了。

最后验证一下

$ pod search DSTestLib


pod search DSTestLib

  新建一个空项目,导入私有库验证一下,这里一定要带上source就是DSTestLib所在索引源的远端地址。

导入私有库验证一下

当遇到使用依赖库创建子类的时候会在 .h 文件中引入依赖库的头文件 而这样通常会在 执行 pod repo push 的时候发生错误。这个时候在 pod repo push 命令中添加 --use-libraries 参数可解决这个问题。而如果 .h 文件对依赖库中类的引用是非必须的, 也可以将 依赖库中类的声明放到 .m 中, 以解决这个错误。

参考:

COCOAPODS官网:https://guides.cocoapods.org/making/private-cocoapods.html

COCOAPODS官方配置 podspec文档:https://guides.cocoapods.org/syntax/podspec.html

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

推荐阅读更多精彩内容