前言:
最近和朋友聊天聊到组件化开发,网上非常多优秀的文章有介绍也有很多的demo,组件化的几种实现方案的选择这里不做讨论,这里介绍一个组件化的基本技能:制作私有库===>给新手或有需要的人一点参考(不对或者错误的地方 欢迎大佬指出)
1.知识准备:
1.cocopod使用经验(iOS开发一般都有涉及)
2.git常用命令使用(svn用多了也得学学git,git命令不熟悉的建议下载SourceTree客户端)
3.github开源库相关经验(mac要配置好ssh的key等)
2.制作私有库10个步骤:
1.GitHub创建一个私有库(先pod search xxx 查一下你想取名字是不是被占用 关键!)
2.克隆到本地 然后Xcode创建一个项目 放到克隆的目录下(相关代码自己加进去)
3.创建一个 PodFile 和 ****.podspec 文件 主要的东西在这个podspec里面(可以自行百度 注意此时文件里面有个版本信息:1.0.0 与下面的要对应)【podspec教程】【podspec分支】
4.校验项目是否可以正常编译(只要关注error就可以了,根据错误提示修改,不难)
pod lib lint --allow-warnings
吭:依赖导入#import 不行 要换成 #import
5.提交代码到GitHub(我是用SourceTree来提交 不要把Test和依赖的第三方Pod文件提交上去)
6.打个tag两步指令: (可以上github看一下是否提交成功了)
git tag -m "code commit" "1.0.0"
git push --tags
7.上传私有库(这一步会校验github tag 1.0.0上面代码 要确保tag1.0.0这份代码上传完整)
pod spec lint --allow-warnings
吭:第4步本地的校验成功 但是github tag却校验不成功说文件不存在,要去github对应tag版本上检查一下tag的代码是否完成提交(下面有图)
8.发布私私有库
pod trunk push ****.podspec --allow-warnings
9.清理本地缓存
rm ~/Library/Caches/CocoaPods/search_index.json
10.校验是否私有库发布成功
pod search ****
3.更新升级私有库(基本跟上面是一摸一样的 但是还是要写一遍 版本与Tag版本对应)
1.项目里面修改/添加代码(废话)
2.修改****.podspec里面的版本信息 与内容简介(之前1.0.0 现在改成1.0.1)
3.校验项目是否可以正常编译(只要关注error就可以了,根据错误提示修改,不难)
pod lib lint --allow-warnings
4.提交代码到GitHub(我是用SourceTree来提交 不要把Test和依赖的第三方Pod文件提交上去)
5.打个tag两步指令:
git tag -m "code commit" "1.0.1"
git push --tags
6.上传私有库:(这一步会校验github tag 1.0.1上面代码 要确保tag1.0.1这份代码上传完整)
pod spec lint --allow-warnings
7.发布私私有库
pod trunk push ****.podspec --allow-warnings
8.清理本地缓存
rm ~/Library/Caches/CocoaPods/search_index.json
9.校验是否私有库发布成功(此时你会看到会有 1.0.0 与 1.0.1版本)
pod search ****
备注:以上的命令都是要在根目录下执行,终端先cd到项目根目录执行 eg:
cd /Users/linpeng/Documents/Git/ModuleApp/XXXX
4.图文演示
demo地址:https://github.com/Jacky-LinPeng/LPCommonModule
1.GitHub创建一个私有库
2.克隆到本地 然后Xcode创建一个项目 放到克隆的目录下(相关代码自己加进去)
3.创建一个 PodFile 和 ****.podspec 文件 主要的东西在这个podspec里面(可以自行百度 注意此时文件里面有个版本信息:1.0.0 与下面的要对应)
注意箭头的版本信息与目录结构配置 关键!
4.校验项目是否可以正常编译(只要关注error就可以了,根据错误提示修改,不难)
pod lib lint --allow-warnings
5.提交代码到GitHub(我是用SourceTree来提交 不要把Test和依赖的第三方Pod文件提交上去)
6.打个tag两步指令: (可以上github看一下是否提交成功了)
git tag -m "code commit" "1.0.0"
git push --tags
7.上传私有库(这一步会校验github tag 1.0.0上面代码 要确保tag1.0.0这份代码上传完整)
pod spec lint --allow-warnings
8.发布私私有库
pod trunk push ****.podspec --allow-warnings
9.清理本地缓存
rm ~/Library/Caches/CocoaPods/search_index.json
10.校验是否私有库发布成功
pod search ****
使用:
其他项目引用这个pod就可以使用这个pod里面的东西了,Test项目不需要引入AF,SD, Masonry等pod,因为LPCommonModule里面的podspec里面有引入这些依赖了
图文讲解也可以配合这两篇文章
https://blog.csdn.net/Tonyshng/article/details/69525556
https://www.jianshu.com/p/d7d1942dd3f1
========================更新 ==============
1.如何实现目录分层?
参考文章:https://segmentfault.com/a/1190000012269307
Pod::Spec.new do |s|
s.name = "LPCommonModule" #私有库的名称
s.version = "1.1.1" #版本号
s.summary = "App基础,第三方pod等依赖" #概述
s.description = <"MIT", :file => "LICENSE" } #许可证
s.author = { "linpeng" => "540933120@qq.com" } #作者名以及邮箱
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/Jacky-LinPeng/LPCommonModule.git", :tag => s.version.to_s } #这个是git上 releases的代码,以后每次版本升级,都会传到这里
s.source_files = "LPCommonModule/LPCommonModule/LPCommonModule.h" #路径 前面的表示私有库名,后面表示私有库中的内容
#s.public_header_files = &#39;LPCommonModule/LPCommonModule/LPCommonModule.h&#39;
s.subspec &#39;CommomView&#39; do |ss|
ss.ios.deployment_target = &#39;8.0&#39;
ss.source_files = &#39;LPCommonModule/LPCommonModule/View/**/*.{h,m}&#39;
end
s.subspec &#39;CommomManager&#39; do |ss|
ss.ios.deployment_target = &#39;8.0&#39;
ss.source_files = &#39;LPCommonModule/LPCommonModule/Manager/*.{h,m}&#39;
end
s.subspec &#39;CommomCategory&#39; do |ss|
ss.ios.deployment_target = &#39;8.0&#39;
ss.source_files = &#39;LPCommonModule/LPCommonModule/Category/*.{h,m}&#39;
end
s.exclude_files = "Classes/Exclude"
s.requires_arc = true
s.dependency &#39;ReactiveCocoa&#39;,&#39;2.5&#39;
s.dependency &#39;AFNetworking&#39;
s.dependency &#39;YYModel&#39;
s.dependency &#39;SDWebImage&#39;, &#39;~> 5.0.0-beta3&#39;
s.dependency &#39;Masonry&#39;, &#39;~> 1.1.0&#39;
s.dependency &#39;SVProgressHUD&#39;
end
效果