iOS - 组件化开发一 私有库pod制作

前言

 最近和朋友聊天聊到组件化开发,网上非常多优秀的文章有介绍也有很多的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  = <<-DESC
App基础,第三方pod等依赖   #描述
DESC
s.homepage     = "https://github.com/Jacky-LinPeng/LPCommonModule"  #git上的地址
s.license      = { :type => "MIT", :file => "LICENSE" }   #许可证
s.author             = { "linpeng" => "[email protected]" }   #作者名以及邮箱
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 = 'LPCommonModule/LPCommonModule/LPCommonModule.h'

s.subspec 'CommomView' do |ss|
    ss.ios.deployment_target = '8.0'
    ss.source_files = 'LPCommonModule/LPCommonModule/View/**/*.{h,m}'
end
s.subspec 'CommomManager' do |ss|
    ss.ios.deployment_target = '8.0'
    ss.source_files = 'LPCommonModule/LPCommonModule/Manager/*.{h,m}'
end
s.subspec 'CommomCategory' do |ss|
    ss.ios.deployment_target = '8.0'
    ss.source_files = 'LPCommonModule/LPCommonModule/Category/*.{h,m}'
end

s.exclude_files = "Classes/Exclude"

s.requires_arc = true

s.dependency 'ReactiveCocoa','2.5'
s.dependency 'AFNetworking'
s.dependency 'YYModel'
s.dependency 'SDWebImage', '~> 5.0.0-beta3'
s.dependency 'Masonry', '~> 1.1.0'
s.dependency 'SVProgressHUD'
end

效果

你可能感兴趣的:(代码笔记,随笔)