iOS 二進制化之路(CocoaPods && Carthage)

前言

  iOS 組件化之路的過程當中,咱們有一件事須要作---那就是二進制化,二進制化一般是針對咱們項目中經常使用的但又不多更改的的第三方庫,將第三方庫打包成二進制文件減小協同開發中的文件衝突又能夠大大的加快編譯速度提升工做效率。ios

正文

  用過 Carthage 的人都知道,它能將 iOS 的第三方依賴編譯成二進制文件,而後咱們手動引入項目中,這能夠說正是與 CocoaPods的優點所在,CocoaPods 則是 iOS工程組件化中不可或缺的角色,CocoaPods的第三方庫之多、用戶之廣是其餘工具所可望不可即的。然而怎樣將它兩的優點結合起來呢? 咱們知道 CocoaPods 能夠支持配置Podspec來控制咱們的第三方庫依賴形勢, git

image.png
  咱們平時都知道 CocoaPods是一個 Ruby工程,所以 Podspec也是一個 Ruby文件,由上圖咱們能夠知道,咱們的第三方庫有源碼和二進制文件等多種引用形式,咱們每次製做三方庫的時候咱們均可以選擇相應的文件形勢,那麼咱們可能會思考,咱們想在源碼和二進制文件之間切換能夠實現嗎?既然 PodspecRuby 文件,那麼必定支持 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

image.png
  咱們 pod install 後會生成 Pods.xcodeproj工程,這個工程裏有咱們須要的第三方依賴庫,但並無勾選 Shared, 所以:

carthage build --platform iOS --no-skip-current
複製代碼

Pods.xcodeproj工程是無效的. 然而事情並未就此結束,經過一番研究發現: xcode

image.png
勾選 Shared的這個操做其實就是將對應第三方庫的 .xcscheme文件從 xcuserdata/steve.xcuserdatad/xcschemes/移動到 xcshareddata/xcschemes/,知道這個原理後咱們就能夠用命令行進行相應的操做了。而後咱們切換到 Pods文件夾裏執行 carthage build --platform iOS --no-skip-current咱們能夠看到:
image.png
咱們所依賴之庫盡數便已編譯完成。也就是說咱們所依賴的源文件和二進制文件都有了,咱們只須要生成相應的 .podspec便可。而後經過 Podfile文件裏作相應的配置,來引用本地文件資源,即可以作到源碼和二進制文件便捷切換。
image.png
相關文章
相關標籤/搜索