CocoaPods 创建私有库(终极版)


CocoaPods 创建私有库简要步骤及说明:

1.在远端创建项目仓库、spec repo仓库
2.在本地创建项目仓库、spec repo仓库
3.本地仓库、远端仓库对应建立关系
4.Podfile、podspec 操作
5.推送到远端

一般公司项目都会在bitBucket上托管代码,但我们自己学习的话使用码云coding.net等代码托管平台就可以了。我的示例是在gitHub上进行说明,虽然达不到私有库的效果,但是制作流程都是一样的,没必要纠结。

1.在远端创建项目仓库、spec repo仓库:
image.png

这个应该不会有什么问题吧!
下面的DMPrivateKit是远端项目仓库、DMPrivateSpecRepo是远端spec仓库,spec的作用其实就是书本目录一样的。

2.在本地创建项目仓库、spec repo仓库:
----------在终端执行下面命令创建了本地spec repo仓库:
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
$ pod repo add DMPrivateSpecRepo https://github.com/---/DMPrivateKit.git

这个命令就是创建了本地spec repo仓库,并且与远端的spec repo仓库关联。
查看是否创建成功:
~/.cocoapods/repos文件是一个隐藏目录,在Mac 上默认是看不到隐藏目录的,但是我们可以通过「终端」应用程序打开。
在Terminal中执行以下命令显示隐藏文件:

$ defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder

恢复隐藏:

$ defaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder
-------------创建本地项目仓库:
#pod lib create [项目名]
$pod lib create DMPrivateKit

控制一台会输出:

Cloning `https://github.com/CocoaPods/pod-template.git` into `DMPrivateKit`.
Configuring DMPrivateKit template.
------------------------------
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: 
- http://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
What language do you want to use?? [ Swift / ObjC ]
 > ObjC

这个就是命令创建工程,会问几个问题,上面是第一个问题:
问你选择Swift还是Objc构建项目,此教程选的是ObjC。

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

第二个问题问你是否需要创建一个Demo项目,此教程选的是Yes

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

第三个问题让你是否选择一个测试框架,此教程选 Specta

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

第四个问题是否基于View测试,选Yes

What is your class prefix?
 > DM

设置完成后控制台输出:

Running pod install on your new library.

[!] No `Podfile' found in the project directory.

Ace! you're ready to go!

 We will start you off by opening your project in Xcode

  open 'MyLib/Example/MyLib.xcworkspace'

The file /Users/ken/Desktop/工作/DMPrivateKit/Example/DMPrivateKit.xcworkspace     does not exist.

To learn more about the template see `https://github.com/CocoaPods/    pod-template.git`.

To learn more about creating a new pod, see 
`http://guides.cocoapods.org/making/making-a-cocoapod`.

成功后会在目录中创建好一个DMPrivateKit工程,结构如下:

image.png

如图所示,把你想做成私有库的代码放到箭头所指的Classes文件夹下。

------------开发模式下测试pod库的代码(可以略过这个步骤,正常情况是没错的)

打开Example工程目录Podfile文件:

pod 'DMPrivateKit', :path => '../' # 指定路径
  #pod 'DMPrivateKit', :podspec => '../MyLib.podspec'  # 指定podspec文件

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

3.本地仓库、远端仓库对应建立关系

spec本地仓库与远端仓库在上面已经建立了关系,下面只说本地项目工程仓库与远端建立关系
在终端cd进入DMPrivateKit项目根目录然后,执行以下命令:

$ git add .
$ git commit -s -m "初始化DMPrivateKit 库"
$ git remote add origin git@git.coding.net:kensla/DMPrivateKit.git           #添加远端仓库
$ git push origin master     #提交到远端仓库
$ git tag -m "first release" "0.0.1" #打上标签,这个很重要
$ git push --tags     #推送tag到远端仓库

到这里,成功提交到远程,DMPrivateKit Pod 库就初步完成了代码实现。

4.Podfile、podspec 操作

这一步是非常关键的,并且常常容易出错,还不知道错在了哪里。

------首先操作Podfile文件,在做这一步之前要明确你的私有库要依赖那些库,在这个时候都添加进来。

image.png

注意添加上面两行代码,第一行是github specs 远程地址;第二行为下面pod的SALocalizable(私有库)spec远端地址
在终端cd到Example目录下(注意) 执行

pod install
image.png

所需要的依赖库就导入了。

------操作DMPrivateKit.podspec文件
image.png

image.png

注意两个箭头位置,version尽量和刚才工程的tag值对应;homepage是仓库主页的地址;source就是工程远端地址,github上那个Download的地址;
关于你所做私有库的依赖dependency、framework、.a静态库等的写法,请查看Cocoapods官方文档

image.png

上面两张图片分别是podspec文件和和我工程目录,做参考。

下面是我做支付宝SDK私有库的工程目录和spec:

工程目录:

![Uploading 9B4E15E7-4CB5-4CD9-8478-054693AD88A7_557465.png . . .]

.podspec写法:

9B4E15E7-4CB5-4CD9-8478-054693AD88A7.png

注意根据支付宝官方文档添加系统 .framework . libraries,就是这一部分:


B2373366-54CE-4C00-8D8B-FEB7AA42646F.png

特别注意:工程目录下的虚拟路径,和真实的相对路径(show in finder)一定要一致,否则在pod upodate的时候,会找不到了。

编辑完DMPrivateKit.podspec文件后,需要验证一下这个DMPrivateKit.podspec文件是否可用
在Terminal中执行cd进入DMPrivateKit项目根目录然后,执行以下命令:

$ pod lib lint

只是这样写可能会验证不通过,因为会有warnings,或者找不到项目spec文件(因为机器只会在CocoaPods spec库里面进行查询),所以要按照下面写法来写。

pod lib lint --allow-warnings --sources=https://github.com/CocoaPods/Specs.git,[私有spec库远端地址] --use-libraries (--verbose 还是不通过加上试试)

当你看到 Terminal 中输出:

-> DMPrivateKit (0.0.1)

DMPrivateKit passed validation.

表示这个DMPrivateKit.podspec 验证通过,是一个符合CocoaPods规则的配置文件。
注意:很多情况下是不通过的,要注意了,百度吧,要不重新做,很多问题不容易找到,比较纠结,各种问题。

然后在Example工程目录下执行pod update命令安装依赖,打开项目工程,现在可以看到库文件都被加载到Pods子项目中了

image.png

变成了这样子。

5.推送到远端

在Terminal中执行 cd进入DMPrivateKit项目根目录然后,执行以下命令:

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

可能会验证podspec失败,原因上面已经解释。

pod repo push [Repo名] [podspec 文件名字] --allow-warnings --sources=https://github.com/CocoaPods/Specs.git,[私有spec库远端地址] --use-libraries  (--verbose 还是不通过加上试试)

如果提交成功,在Terminal会输出:

Validating spec
 -> DMPrivateKit (0.0.1)

Updating the `DMPrivateSpecRepo' repo

Already up-to-date.

Adding the spec to the `DMPrivateSpecRepo' repo

 - [No change] MyLib (0.0.1)

Pushing the `DMPrivateSpecRepo' repo

Username for 'https://git.coding.net': kensla
Password for 'https://kensla@git.coding.net': 
To https://git.coding.net/kensla/MySpecs.git
   59b080c..b44123d  master -> master

表示提交成功了!这个组件库就添加到我们的私有Spec Repo中了,可以进入到~/.cocoapods/repos/MySpecs目录下查看


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

推荐阅读更多精彩内容