MainMoudle
和一個用於存放全部本地私有庫的文件夾AllMoudles
, 這兩個文件夾在同一目錄下AllMoudles
文件夾中建立一個私有庫TitanFMBase
, 在子目錄建立Classes
用於存放全部的文件, 目錄以下: AllMoudles/TitanFMBase/Classes
Classes
文件夾中添加文件, 並提交到本地git
//進入TitanFMBase文件夾
cd xxx/AllMoudles/TitanFMBase
//初始化git
git init
//將本地代碼提交到本地倉庫
git add .
// 提交修改到本地倉庫
git commit -m '你的修改記錄'
//建立spec文件
pod spec cteate TitanFMBase
複製代碼
最後打開TitanFMBase
文件夾中的TitanFMBase.podspec
, 修改對應的配置信息, 可參考修改博客html
注意點ios
在source
配置中, 本地庫的git地址不須要填git
s.source = { :git => "", :tag => "#{s.version}" }
複製代碼
path
的形式添加框架依賴pod 'TitanFMBase', :path => '../AllMoudles/TitanFMBase'
複製代碼
注意點github
pod lib lint
或者pod spec lint
驗證spec
文件的正確性pod search
命令時, 搜索的實際上是本地緩存的spec
文件, 固然第一次使用時須要先更新本地的spec
文件pod repo
命令查看當前本地的索引庫, 或者查看目錄~/.cocoapods/repos/master/Specs
podspec
文件pod repo add TitanSpec http://xxxx
命令, 可建立一個新的本地索引庫pod lib create xxx
spec
文件和測試工程等xxx/xxx/Classes
文件夾下便可, 默認建立的.m文件可刪除Example
目錄下的測試工程, 並執行pod install
命令, 將你的私有庫文件安裝到測試工程xxx
文件下的xxx.podspec
文件中相關配置便可作完上述工做便可將項目全部文件提交到遠程私有庫了緩存
// 將本地代碼加入本地倉庫裏
git add .
// 提交修改到本地倉庫
git commit -m '你的修改記錄'
// 查看當前的遠程鏈接
git remote
// 添加名稱爲origin的遠程鏈接
git remote add origin '你的github項目地址'
// 在push以前, 查看spec是否配置有問題
// 驗證本地spec文件是否有誤
pod lib lint
// 驗證遠程spec文件是否有誤
pod spec lint
// 推送master分支的代碼到名稱爲origin的遠程倉庫
git push origin master
複製代碼
s.source
後面的tag
tag
, 而至此咱們的tag
尚未設置, 因此驗證不會經過, 須要打標籤tag
, 再次驗證應該就是沒問題的了// 查看當前的tag值
git tag
// 設置tag值
git tag "0.0.1"
// 上傳提交tag
git push --tags
// 刪除標籤相關命令
// 先刪除本地再刪除遠程標籤, 刪除後須要從新打標籤
// 刪除本地標籤
git tag -d 0.0.1
// 刪除遠程標籤
git push origin :0.0.1
複製代碼
向私有的SpecRepo
中提交podspec
:bash
pod repo push SpecName XXX.podspec
複製代碼
注意點微信
podspec
的過程當中會有驗證, 最好在提交以前先驗證spec
文件的配置是有問題pod lib lint
--allow-warings
忽略pod search XXX
Podfile
文件中, 同事使用私有庫和第三方庫是須要指定對應的source
源pod repo
命令執行後的結果master
- Type: git (master)
- URL: 'https://github.com/CocoaPods/Specs.git'
- Path: /Users/xxx/.cocoapods/repos/master
TitanFMSpec
- Type: git (master)
- URL: 'https://git.coding.net/CoderTitan/TitanFMSpec.git'
- Path: /Users/xxx/.cocoapods/repos/TitanFMSpec
複製代碼
Podfile
文件中配置信息app
// 遠程私有庫
source 'https://git.coding.net/CoderTitan/TitanFMSpec.git'
// 官方倉庫
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'TitanjunFM' do
use_frameworks!
pod 'TitanFMBase'
pod 'MJExtension'
end
複製代碼
xxx/xxx/Classes
文件夾下對應的庫文件Pod
庫文件: pod update --no-repo-update
xxx.podspec
文件的配置信息, 版本號必定要改git push origin master
tag
標籤: git push --tags
pod repo push SpecName XXX.podspec
podspec
文件配置中, 添加以下依賴代碼s.dependency 'AFNetworking'
s.dependency 'SDWebImage'
複製代碼
Podfile
文件中, 不會再導入該類庫上述方案存在的問題: 假如另一個業務線, 僅僅須要依賴一些基礎配置, 可是, 若是把整個庫做爲依賴, 便會導入一些不用的冗餘代碼框架
pod search AFNetworking
, 看一下AFNetworking
的搜索結果Subspecs
中, 將AFNetworking
分紅了幾個不一樣的部分, 這樣咱們就能夠根據不一樣的功能需求導入不一樣部分的代碼便可, 防止代碼冗餘-> AFNetworking (3.2.1)
A delightful iOS and OS X networking framework.
pod 'AFNetworking', '~> 3.2.1'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 3.2.1, ......,0.5.1 [master repo]
- Subspecs:
- AFNetworking/Serialization (3.2.1)
- AFNetworking/Security (3.2.1)
- AFNetworking/Reachability (3.2.1)
- AFNetworking/NSURLSession (3.2.1)
- AFNetworking/UIKit (3.2.1)
複製代碼
爲解決將私有庫中的代碼分紅不一樣的功能模塊, 使用
subspec
語法配置podspec
文件, 以下:組件化
//格式:
s.subspec 'XXX' do |x|
//須要導入的全部文件的相對路徑
x.source_files = '相對路徑/**/*'
//須要導入的.h頭文件的相對路徑
x.public_header_files = '相對路徑/**/*.h'
//須要導入的資源文件的相對路徑
x.resource = "相對路徑/**/*.{bundle,nib,xib}"
//所依賴的其餘的庫
x.dependency 'AFNetworking', '~> 1.0.0'
end
//示例:
s.subspec 'Network' do |n|
n.source_files = 'TitanFMBase/Classes/Network/**/*'
n.dependency 'AFNetworking'
end
複製代碼
s.source_files
改爲上述語法便可pod 'AFNetworking/Reachability'
便可xib&storyboard
xib
必須動態獲取Xib
資源時, 又該如何引用呢?Xib
時, 一般方式是[[NSBundle mainBundle] load]
方式, 可是這種方式在私有庫中顯然不適用XIb
, 使用方法[NSBundle bundleForClass:self]
動態獲取, 具體看一下// MiddleView.m
NSBundle *mainBundle = [NSBundle mainBundle];
NSBundle *bundle = [NSBundle bundleForClass:self];
MiddleView *middleView = [[bundle loadNibNamed:@"MiddleView" owner:nil options:nil] firstObject];
// 打印一下上述兩個bundle以下:
// mainBundle:
NSBundle </Users/xxx/Library/Developer/CoreSimulator/Devices/6B74958F-560F-4BF4-9BDF-9AD789379FC9/data/Containers/Bundle/Application/FC9747F0-8A82-4643-AC7E-BDC268190B8D/TitanFM.app>
// bundle:
NSBundle </Users/xxx/Library/Developer/CoreSimulator/Devices/6B74958F-560F-4BF4-9BDF-9AD789379FC9/data/Containers/Bundle/Application/FC9747F0-8A82-4643-AC7E-BDC268190B8D/TitanFM.app/Frameworks/TitanFMMain.framework>
複製代碼
Xib
等資源文件是放在TitanFM.app
中的Xib
等資源文件是放在TitanFM.app/Frameworks/TitanFMMain.framework
文件目錄下的, 因此私有庫中的資源文件加載, 要到對應的文件目錄下TitanFM.app
中查看, 找到對應的app
文件, 顯示包內容, 便可層級查看.xcassets
的文件中Classes
的同級目錄中會默認建立一個Assets
的文件夾, 用於存放圖片等資源podspec
文件中, 一樣修改加載文件資源的配置, 以下:s.resource_bundles = {
'MainMoudle' => ['MainMoudle/Assets/*']
}
複製代碼
修改完配置信息和圖片記得執行
pod install
把資源文件導入到項目中
在xib
中加載圖片, 須要在圖片前面加上組件的主bundle
, 相似: MainMoudle.bundle/tabbat_back
私有庫中使用代碼加載圖片, 必定不能使用imageNamed
方法
//1. 獲取當前的bundleName
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
//2. 根據圖片名稱, 在bundle中檢索圖片路徑
NSString *path = [currentBundle pathForResource:@"tabbar_np_play@2x.png" ofType:nil inDirectory:@"MainMoudle.bundle"];
//獲取圖片
UIImage *image = [UIImage imageWithContentsOfFile:path];
複製代碼
引用圖片須要注意的的是
@2x和@3x
的圖片, 因此必須手動指定具體的圖片名稱包括圖片後綴名pathForResource
, 也要必須指明圖片所在的bundle
路徑, 即inDirectory
參數不可爲空提交本地的私有庫索引
MainMoudle
中引用了TitanFMBase/Category
部分spec
驗證, 不然可能回報錯, 緣由只是由於spec
中默認的依賴庫是共有的索引庫, 私有庫沒法檢索到, 錯誤信息以下圖// 提交本地私有索引庫須要忽略警告的命令
pod repo push TitanjunSpec MainMoudle.podspec --allow-warnings
複製代碼
歡迎您掃一掃下面的微信公衆號,訂閱個人博客!