想做組件化,需要用CocoaPod 遠程私有倉庫,在此記錄一波.
一 .首先建立兩個遠程倉庫
1)存放pod 索引文件庫(.podspec)
2)存放代碼的倉庫
一定要分清這兩個倉庫
二 .我選用的平臺是:碼云
1.索引庫
2.代碼倉庫
這個很簡單不多說,記錄倉庫的https 地址
三 .pod lib create 你的工程名字
創(chuàng)建pod 測試工程
1.Example 是打開工程的位置
HJUtilsIos 是存放你庫的位置(里面還有個Classes目錄,將你做好的文件放在Classes這個目錄下)
pod install
會把庫鏈接到你的工程里,然后我們測試這個庫,測試沒有bug 就可下一步了.
2.建立和遠程倉庫的連接
git add .
git commit -m '提交'
git remote
查看遠程倉庫,應(yīng)該是沒有的
git remote add origin https://....
建立連接
git pull origin master --allow-unrelated-histories
在push 之前需要pull
git push origin master
將本地代碼推到origin遠程倉庫master分支上
這時候你去碼云看看你的代碼,已經(jīng)推上去了.
3.修改 .podspec 文件,在項目目錄里,這個地方著重講一下
Pod::Spec.new do |s|
s.name = 'HJUtils'
s.version = '0.1.2'
s.summary = 'HJUtils.'
s.description = <<-DESC
公共類,基礎(chǔ)類HJUtils
DESC
s.homepage = 'https://gitee.com/xxxx/events'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'xxx' => 'xxx@xxx.com' }
s.source = { :git => 'https://gitee.com/xxx/xxx.git', :tag => s.version.to_s ,:submodules => true}
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'HJUtils/Classes/HJUtils.h'
s.requires_arc = true
# s.resource_bundles = {
# 'HJUtils' => ['HJUtils/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking'
s.subspec 'Categories' do |ss|
ss.source_files = 'HJUtils/Classes/Categories/*'
ss.requires_arc = true
end
s.subspec 'NetTool' do |ss|
ss.dependency 'AFNetworking'
ss.source_files = 'HJUtils/Classes/NetTool/*'
ss.requires_arc = true
end
s.subspec 'Diff_oc' do |ss|
ss.source_files = 'HJUtils/Classes/Diff_oc/*'
ss.requires_arc = false
end
end
1)s.name
:名字
2)s.version
:版本
3)s.summary
:摘要
4)s.description
: 描述必須比s.summary長
5).s.homepage
: 遠程代碼倉庫首頁地址,可以任意網(wǎng)址
6).s.license
: 一般都是這個MIT
7).s.author
: 作者信息,照貓畫虎
8).s.source
:這個比較關(guān)鍵,需要放置htttps的遠程代碼倉庫的地址,公司內(nèi)部私有倉庫SSH的不可以,碼云的SSH可以,涉及到一個驗證的問題,主要是cocoapod根據(jù)你的這個.spec 描述文件,遠程驗證,公司的屬于內(nèi)部域名,沒有外網(wǎng),所以沒辦法遠程驗證.
9).s.ios.deployment_target
: 支持的iOS版本
10).s.source_files
: 庫文件的位置,.podspec 文件的相對目錄,也就是類別一些.m .h 文件的位置,也就是剛剛說的classes 目錄的位置
11).s.public_header_files
: 如果不指明,那么暴露全部.h文件
12).s.requires_arc = true
:arc 是true,mrc 是false .
13).s.dependency 'AFNetworking'
: 比較重要的一點,比如項目有依賴庫,你的network頭文件里不能寫#import "AFNetworking",
這會導(dǎo)致發(fā)布cocoapod 的時候無法通過驗證,
14).
s.subspec 'Categories' do |ss|
ss.source_files = 'HJUtils/Classes/Categories/*'
ss.requires_arc = true
end
: 這個部分主要是建立子模塊,ss.source_files
:子模塊庫文件位置,子模塊基本內(nèi)容同上
15).想要分文件夾,關(guān)鍵在于source,注意主模塊s.source_files
和 子模塊 ss.source_files
不能引用同一塊位置的文件,如果發(fā)生會優(yōu)先s.source_files
16).依賴互相文件,得寫依賴,子模塊依賴另一個子模塊
18).s.vendored_frameworks = 'xxxx/Classes/*.{framework}'
表示依賴自己的framework,很重要啊
17).s.source = { :git => 'https://gitee.com/xxx/xxxx.git', :tag => s.version.to_s ,:submodules => true}
: 注意s.version,是你最開始寫的那個版本,我們每次發(fā)版都需要給代碼倉庫打一個tag ,代表是什么版本的
cd 到本地代碼庫位置
git tag
git tag 0.0.1
git push --tags
然后再遠程倉庫就能看到tag 0.0.1 版本的文件
podspec文件大概內(nèi)容就是這些,這些東西必須實踐,實踐發(fā)現(xiàn)問題回頭看,才發(fā)現(xiàn)寫的有用,更具體的用法參考官方文檔
四.發(fā)布到自己遠程索引倉庫
1.建立自己的遠程索引庫
pod repo add 索引庫名字 https...
2.pod repo
查看一下
兩個,第一個是自己的遠程索引倉庫,
master第二個是官方的索引倉庫
3.cd 到 本地代碼倉庫的位置
pod lib lint
或 pod spec lint
:首先要檢測Podspec的正確性
pod lib lint
不會連接網(wǎng)絡(luò),而是檢查文件格式
pod spec lint
會讀取線上的repo并檢查相應(yīng)的tag
4.發(fā)布
pod repo push 自己遠程索引倉庫 對應(yīng)的.podspec 推送到遠程分支 (master)
如果因為警告沒有通過驗證可以在最后加上 --allow-warnings
五.在本地建一個項目測試一下自己cocoapod 庫,建一個 test 測試工程,然后cd 到該工程目錄,然后pod init
創(chuàng)建一個podfile 文件,我直接貼
source 'https://gitee.com/xxx/xxx'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target 'xxx' do
pod 'HJUtils'
pod 'SDWebImage', '~> 3.7.1'
end
開頭兩個source
一個是自己遠程索引倉庫的,自己的庫,去這里找
一個是CocoaPods官方的,官方的去CocoaPods官方的索引庫去找
剩下的就是pod install 將庫導(dǎo)入到test 測試工程
大概流程:
good!
以上就是遠程私有倉庫的內(nèi)容,好多細節(jié)問題需要自己動手去做,歡迎交流!