首先声明我对pod的应用在实践组件化以前,停留在写个Podfile
的水平上.所以如果你对pod的使用炉火纯青,这篇就不用看了.
1.如何创建私有 CocoaPods 仓库
先看下CocoaPods公有库:
打开隐藏目录
进入目录:
/Users/[yourUserName]/.cocoapods/repos
可以看到repos有一个master
目录,这也就是公有库的所在.
同一份CocoaPods的代码(如何制作自己的CocoaPods后面说)即可以提交到公有库,也可以提交到你自己建的私有库内.不同就在于提交到公有库,所有人可以应用你的代码,提交到私有库当然就是你自己用咯.
下面开始建私有库github(git建私有项目是收钱的,所以你任性你上...),码云,码市都可以.
- step1:
- step2:
进入目录:
/Users/[yourUserName]/.cocoapods/repos
clone下来.
- step3:
执行命令:
pod repo add [YOUR_REPO_NAME] [YOUR_SOURCE_URL]
比如我就是:
pod repo add PGSpecs https://git.oschina.net/pogongzhang/PGSpecs.git
加私有库完成.png
2.制作自己的CocoaPods
-
step1:建项-->clone
git_code_create.jpg
clone后得到:
after_clone.png
- step2:添加你的工程
将你要贡献出来的代码(.h
+.m
+.swift
...)与资源(.xib
+.storyboard
+.png
....)放在特定的目录下.方便后面写podspec文件时可以对应指定目录下的东西.
add_project_outside.png
当然文件路径不一定非要这么写,只要文件路径你能描述清楚都可以.
-
step3:添加podspec文件
add_podspec.png
podspec文件是绝对难点,podspec文件主要描述:
你写就的pod包含的代码+资源在哪?
你写就的pod现在是什么版本?
你写就的pod要依赖什么系统库?
你写就的pod要依赖什么加入的库?
你写就的pod要依赖什么其他pod?
作者的个人消息
等等
以上问题下面会一一解答,以下是样板(东西很多慢慢看,不看仔细,写的时候一定会有各种问题,我深有体会):
Pod::Spec.new do |s|
s.name = "PGBaseComponent" #名称
s.version = "0.0.1" #版本号
s.summary = "zc PGBaseComponent summary" #简短介绍
s.description = "zc PGBaseComponent description"
s.homepage = "http://git.oschina.net/pogongzhang/PGBaseComponent"
s.license = "MIT" #开源协议
s.author = { "pogong" => "564917199@qq.com" }
s.source = { :git => "https://git.oschina.net/pogongzhang/PGBaseComponent.git", :tag => "0.0.1" } #tag与版本号要保持一致
s.platform = :ios, "8.0" #支持的平台及版本,这里我们呢用swift,直接上9.0
s.requires_arc = true #是否使用ARC
s.module_name = 'PGBaseComponent' #模块名称
#难点1:描述你的代码+资源在哪里.特别注意xib虽然在你的工程中与代码放在一起但写描述的时候要写在s.resources内
s.source_files = "PGBaseComponentDemo/PGBaseComponentDemo/Contribute/code/*.{h,m}"
s.resources = "PGBaseComponentDemo/PGBaseComponentDemo/Contribute/code/*.xib","PGBaseComponentDemo/PGBaseComponentDemo/Contribute/resources/*.png"
#难点2:在工程引入什么了系统库这里都要全写出来.特别注意像引入了libz.tbtd,这里写个'z'就可以了
s.frameworks = 'UIKit', 'Foundation' #所需的系统的framework,多个用逗号隔开
#s.libraries = 'z' #所需的系统的lib,多个用逗号隔开
#^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
#难点3:有的时候我们需要自己在工程内拽入一些framework+lib
#s.vendored_frameworks = 'PGBaseComponentDemo/PGBaseComponentDemo/Contribute/SDK/*.framework' #工程自带的framework,多个用逗号隔开
#^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
#s.vendored_libraries = 'PGBaseComponentDemo/PGBaseComponentDemo/Contribute/SDK/libWeChatSDK.a' #工程自带的lib,多个用逗号隔开
#^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
#难点4:有的时候我们上传的工程已经不是一个project,而是一个写了podFile的workspace.那么我们用到的pod也要在这写出来
#s.dependency 'Masonry'
#s.dependency 'AFNetworking'
#s.dependency 'SVProgressHUD'
#^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
end
- step4:收尾
cd到指定目录:
PGBaseComponent
└── README.md
└── LICENSE
└── PGBaseComponentDemo
└── PGBaseComponent.podspec
step4.1:校验
执行命令:
pod lib lint --allow-warnings --verbose
成功标准:命令行打印==>PGBaseComponent passed validation.
温馨提示:这一步报错概率特别大.出错了,一般都是podspec文件描述的与工程的信息不符合,看看报错信息,改掉再校验
step4.2:push code
git status
git add .
git commit
git push origin master
step4.3:打tag
git tag 0.0.1
git push --tags
step4.4:加入仓库
pod repo push PGSpecs PGBaseComponent.podspec --allow-warnings --verbose
现在你可以去自己的私有库内看看是不是有一个你建的pod了.
私有库加入第一个私有pod完成.png1.step4.4:是加入私有库的命令.提交给cocopods官方做开源项目与建私有pod的过程有一点点不一样,本文就不详细介绍了.有兴趣的同学清戳==>Cocoapods系列教程(二)——开源主义接班人
2.step4.1:校验,因为现在提交的代码比较简单所以命令行也非常简单.到了真正用pod实现组件化的时候会有更复杂的命令(下一篇会细说).
4.用私有pod,podFile有一点不一样
私有仓库写就
私有仓库加入了私有的pod
现在该用用这个私有的pod了
写个项目试试:
加入Podfile,Podfile内容如下:
platform:ios,8.0
target 'TestPrivatePodDemo' do
#use_frameworks!
pod 'PGBaseComponent', '~> 0.0.1'
end
执行:
pod install --verbose --no-repo-update
报错:
[!] Unable to find a specification for `PGBaseComponent (~> 0.0.1)`
找不到,😢
那是因为默认都是去公有库里面找的.用到私有库内的私有的pod,podFile还要加点东西.
Podfile改成如下:
source 'https://github.com/CocoaPods/Specs.git' #官方仓库地址
source 'https://git.oschina.net/pogongzhang/PGSpecs.git' #私有仓库地址
platform:ios,8.0
target 'TestPrivatePodDemo' do
#use_frameworks!
pod 'PGBaseComponent', '~> 0.0.1'
end
再跑一遍pod install --verbose --no-repo-update
,成功.
打开workspace,注意看私有pod被引入后的资源文件的路径.
多了个Resources文件夹.
不仅图片在里面,xib也在里面.
这都是为了后面pod贡献资源
的应用.
到目前为止,[建私有pod仓库==>私有pod仓库加入私有pod==>用私有pod]全部完成.但正如本文的标题==>演习,会这些距离pod实现组件化还有一段距离.真刀真枪请看下一篇.
文章参考:
如何创建私有 CocoaPods 仓库
制作 CocoaPods 依赖库
Cocoapods系列教程(二)——开源主义接班人
网友评论