我的组件化日记

iOS 我的组件化日记 part3:演习

2017-08-14  本文已影响129人  破弓

首先声明我对pod的应用在实践组件化以前,停留在写个Podfile的水平上.所以如果你对pod的使用炉火纯青,这篇就不用看了.

1.如何创建私有 CocoaPods 仓库

先看下CocoaPods公有库:
打开隐藏目录
进入目录:

/Users/[yourUserName]/.cocoapods/repos

可以看到repos有一个master目录,这也就是公有库的所在.
同一份CocoaPods的代码(如何制作自己的CocoaPods后面说)即可以提交到公有库,也可以提交到你自己建的私有库内.不同就在于提交到公有库,所有人可以应用你的代码,提交到私有库当然就是你自己用咯.

下面开始建私有库github(git建私有项目是收钱的,所以你任性你上...),码云,码市都可以.

git_specs_create.JPG

进入目录:

/Users/[yourUserName]/.cocoapods/repos

clone下来.

执行命令:

pod repo add [YOUR_REPO_NAME] [YOUR_SOURCE_URL]

比如我就是:

pod repo add PGSpecs https://git.oschina.net/pogongzhang/PGSpecs.git
加私有库完成.png

2.制作自己的CocoaPods

clone后得到:


after_clone.png add_project_inside.png
当然文件路径不一定非要这么写,只要文件路径你能描述清楚都可以.
你写就的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
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完成.png

1.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,成功.

使用私有pod成功.png

打开workspace,注意看私有pod被引入后的资源文件的路径.

多了个Resources文件夹.
不仅图片在里面,xib也在里面.

这都是为了后面pod贡献资源的应用.

私有pod被引入后的资源文件的路径.png

到目前为止,[建私有pod仓库==>私有pod仓库加入私有pod==>用私有pod]全部完成.但正如本文的标题==>演习,会这些距离pod实现组件化还有一段距离.真刀真枪请看下一篇.


文章参考:
如何创建私有 CocoaPods 仓库
制作 CocoaPods 依赖库
Cocoapods系列教程(二)——开源主义接班人

上一篇下一篇

猜你喜欢

热点阅读