前言:
最近和朋友聊天聊到組件化開發,網上非常多優秀的文章有介紹也有很多的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 <ReactiveCocoa.h>不行 要換成 #import <ReactiveCocoa/ReactiveCocoa.h>
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
效果