CocoaPods 创建私有库(终极版)


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

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

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

1.在远端创建项目仓库、spec repo仓库:
CocoaPods 创建私有库(终极版)_第1张图片
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工程,结构如下:

CocoaPods 创建私有库(终极版)_第2张图片
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 [email protected]: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文件,在做这一步之前要明确你的私有库要依赖那些库,在这个时候都添加进来。

CocoaPods 创建私有库(终极版)_第3张图片
image.png

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

pod install
CocoaPods 创建私有库(终极版)_第4张图片
image.png

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

------操作DMPrivateKit.podspec文件
CocoaPods 创建私有库(终极版)_第5张图片
image.png

CocoaPods 创建私有库(终极版)_第6张图片
image.png

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

CocoaPods 创建私有库(终极版)_第7张图片
image.png

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

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

工程目录:

CocoaPods 创建私有库(终极版)_第8张图片
![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子项目中了

CocoaPods 创建私有库(终极版)_第9张图片
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://[email protected]': 
To https://git.coding.net/kensla/MySpecs.git
   59b080c..b44123d  master -> master

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


至此,我们的这个组件库就已经制作添加完成了,使用pod search命令就可以查到我们自己的库了.在Terminal中执行 pod search DMPrivateKit

你可能感兴趣的:(CocoaPods 创建私有库(终极版))