iOS 組件化之路的過程當中,咱們有一件事須要作---那就是二進制化,二進制化一般是針對咱們項目中經常使用的但又不多更改的的第三方庫,將第三方庫打包成二進制文件減小協同開發中的文件衝突又能夠大大的加快編譯速度提升工做效率。ios
用過 Carthage
的人都知道,它能將 iOS 的第三方依賴編譯成二進制文件,而後咱們手動引入項目中,這能夠說正是與 CocoaPods
的優點所在,CocoaPods
則是 iOS
工程組件化中不可或缺的角色,CocoaPods
的第三方庫之多、用戶之廣是其餘工具所可望不可即的。然而怎樣將它兩的優點結合起來呢? 咱們知道 CocoaPods
能夠支持配置Podspec
來控制咱們的第三方庫依賴形勢, git
CocoaPods
是一個
Ruby
工程,所以
Podspec
也是一個
Ruby
文件,由上圖咱們能夠知道,咱們的第三方庫有源碼和二進制文件等多種引用形式,咱們每次製做三方庫的時候咱們均可以選擇相應的文件形勢,那麼咱們可能會思考,咱們想在源碼和二進制文件之間切換能夠實現嗎?既然
Podspec
是
Ruby
文件,那麼必定支持
Ruby
語法,咱們能夠加入邏輯判斷來控制咱們是使用源碼仍是二進制文件:
Pod::Spec.new do |s|
s.name = 'Foundation+'
s.version = '4.5.1'
s.license = 'MIT'
s.summary = 'Elegant HTTP Networking in Swift'
s.homepage = 'https://github.com/Alamofire/Alamofire'
s.social_media_url = 'http://twitter.com/AlamofireSF'
s.authors = { 'Alamofire Software Foundation' => 'info@alamofire.org' }
s.source = { :git => 'https://github.com/Alamofire/Alamofire.git', :tag => s.version }
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.10'
s.tvos.deployment_target = '9.0'
s.watchos.deployment_target = '2.0'
if ENV['source'] == true || ENV['Foundation+'] == true
s.source_files = 'Foundation+/Source/*.swift'
else
s.vendored_frameworks = "Carthage/Build/iOS/Foundation+.framework"
end
end
複製代碼
很惋惜這種方法在 github
遠程公有倉庫中無效,若是大家又更好的方法請告訴我😊。 固然,咱們本身的三方庫咱們能夠本身控制,然而咱們項目中還有絕大多數的三方庫是咱們不可以控制的,那麼,就沒有辦法了嗎?固然,咱們不會放棄尋找解決辦法,我開始介紹了Carthage
, 它能夠將咱們的第三方庫打包成二進制文件,固然,咱們在這裏不會使用它的全部功能,在 Pods
文件夾中咱們已經下載了咱們三方依賴的全部源碼,咱們只須要把它們編譯成二進制文件便可。github
carthage build --platform iOS --no-skip-current
複製代碼
可是,這句命令只適用於勾選了 Shared
的工程 swift
pod install
後會生成
Pods.xcodeproj
工程,這個工程裏有咱們須要的第三方依賴庫,但並無勾選
Shared
, 所以:
carthage build --platform iOS --no-skip-current
複製代碼
對Pods.xcodeproj
工程是無效的. 然而事情並未就此結束,經過一番研究發現: xcode
Shared
的這個操做其實就是將對應第三方庫的
.xcscheme
文件從
xcuserdata/steve.xcuserdatad/xcschemes/
移動到
xcshareddata/xcschemes/
,知道這個原理後咱們就能夠用命令行進行相應的操做了。而後咱們切換到
Pods
文件夾裏執行
carthage build --platform iOS --no-skip-current
咱們能夠看到:
咱們所依賴之庫盡數便已編譯完成。也就是說咱們所依賴的源文件和二進制文件都有了,咱們只須要生成相應的
.podspec
便可。而後經過
Podfile
文件裏作相應的配置,來引用本地文件資源,即可以作到源碼和二進制文件便捷切換。