引言
近期開始使用 CocoaPods 組件化開發(fā)項目虾啦,本文記錄個人在創(chuàng)建組件的相關(guān)步驟及一些配置骂删,部分代碼以Swift為主
創(chuàng)建
執(zhí)行 pod lib create LoginKit
創(chuàng)建私有pod
選擇配置模板后會自動打開工程文件
工程配置
由于在pod的開發(fā)模式下以蕴,在修改開發(fā)pod的內(nèi)容后不會立即生效讹堤,需要編輯Scheme
在Build中 添加 該組件
更改完成后編輯pod中相關(guān)組件的文件即可實時生效
配置.podspec
選擇.podspec文件 配置相關(guān)信息梯码,主要配置資源文件宝泵、源文件和第三方依賴
#源文件
s.source_files = 'OnlinePT-Login/Classes/**/*'
# 資源文件包括 Asset中 .storyboard 文件 和 .xcassets文件 以及子目錄文件
s.resource_bundles = {
'LoginKit' => ['LoginKit/Assets/*{.storyboard,.xcassets}','LoginKit/Assets/**/*']
}
s.frameworks = 'UIKit'
#依賴 可以為本地開發(fā)中的pod或者第三方
s.dependency 'BaseCore', '~> 0.0.1'
s.dependency 'RxSwift' , '~> 4.5.0'
配置文件目錄
由于pod文件目錄不規(guī)則,可預先配置好文件目錄轩娶,方便后續(xù)在開發(fā)中快速添加文件及子目錄
找到默認文件所在目錄儿奶。
在Classes下創(chuàng)建兩個子目錄 Common
,Core
,當然也可以只創(chuàng)建一個鳄抒,根據(jù)自己需求
將原默認文件改個名字,復制到兩個子目錄中闯捎,確保兩個目錄中都有文件
打開終端,cd到Example目錄下许溅,執(zhí)行pod install
可以看到將.podspec中的依賴也添加進了項目中
重新打開項目瓤鼻,可以看到 Pods -Development Pods - LoginKit 目錄下生成了剛剛添加的 Common 和Core目錄
試著在Common目錄下新建一個.swift文件 可以發(fā)現(xiàn) 該文件自動整理到Common目錄下,當然也可以繼續(xù)新建子目錄贤重,不過要注意的是子目錄必須有文件pod install
時才會添加改目錄
同樣的方法可以添加圖片資源文件
創(chuàng)建Login.xcassets, 隨便添加一張圖片茬祷,然后刪除引用,執(zhí)行
pod install
就會發(fā)現(xiàn)多了一個Resources的引用目錄多語言也可以照此方法添加并蝗,這樣所有的文件就比較整齊~
配置資源引用
在主工程中也會經(jīng)常使用到組件的相關(guān)資源內(nèi)容祭犯,這里仿照Swift + RxSwift MVVM 模塊化項目實踐一文中添加相關(guān)代碼,用于資源文件的外部引用
import Foundation
/// 本模塊的名稱借卧, 本模塊的storyboard 名稱必須 與模塊名稱相同 ,已經(jīng)用于靜態(tài)資源的加載回用到
let modularName = "LoginKit"
public class LoginKitCore {
public static var sharedInstance : LoginKitCore {
struct Static {
static let instance : LoginKitCore = LoginKitCore()
}
return Static.instance
}
///供其他模塊使用
public static var bundle:Bundle?{
get{
guard let bundleURL = Bundle(for: LoginKitCore.self).url(forResource: modularName, withExtension: "bundle") else {
return nil
}
guard let bundle = Bundle(url: bundleURL) else {
return nil
}
return bundle
}
}
}
若在組件中盹憎,為方便使用 可以添加extension 默認此bundle
參考
下文提供了比較詳細的組件化實踐以及demo,建議參考
Swift + RxSwift MVVM 模塊化項目實踐