CocoaPods 创建私有库简要步骤及说明:
1.在远端创建项目仓库、spec repo仓库
2.在本地创建项目仓库、spec repo仓库
3.本地仓库、远端仓库对应建立关系
4.Podfile、podspec 操作
5.推送到远端
一般公司项目都会在bitBucket上托管代码,但我们自己学习的话使用码云、coding.net等代码托管平台就可以了。我的示例是在gitHub上进行说明,虽然达不到私有库的效果,但是制作流程都是一样的,没必要纠结。
1.在远端创建项目仓库、spec repo仓库:
这个应该不会有什么问题吧!
下面的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工程,结构如下:
如图所示,把你想做成私有库的代码放到箭头所指的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文件,在做这一步之前要明确你的私有库要依赖那些库,在这个时候都添加进来。
注意添加上面两行代码,第一行是github specs 远程地址;第二行为下面pod的SALocalizable(私有库)spec远端地址
在终端cd到Example目录下(注意) 执行
pod install
所需要的依赖库就导入了。
------操作DMPrivateKit.podspec文件
注意两个箭头位置,version尽量和刚才工程的tag值对应;homepage是仓库主页的地址;source就是工程远端地址,github上那个Download的地址;
关于你所做私有库的依赖dependency、framework、.a静态库等的写法,请查看Cocoapods官方文档
上面两张图片分别是podspec文件和和我工程目录,做参考。
下面是我做支付宝SDK私有库的工程目录和spec:
工程目录:
.podspec写法:
注意根据支付宝官方文档添加系统 .framework . libraries,就是这一部分:
特别注意:工程目录下的虚拟路径,和真实的相对路径(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子项目中了
变成了这样子。
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