擁抱 CocoaPods 1.0

CocoaPods 做爲 iOS 社區應用最普遍的依賴管理工具,終於快要發佈 1.0 版本了。雖然我沒有找到具體的 roadmap,不過如今已經發布到 1.0.0 Beta8 了,距離正式版應該也就是幾個 Beta 或者 rc 的問題了。儘管 CocoaPods 早就已經成了事實上 iOS 界依賴管理的標準,開發者們仍是很謙虛的表示 1.0 版本纔是真正實現了一個依賴管理工具的全部需求。html

1.0.0 will be the milestone where we feel confident that all the basic requirements of a Cocoa dependency manager are fulfilled.git

這句話在 CocoaPods 的 FAQ 裏存在了許多年,如今這個目標終於近在眼前了。github

下面進入正題,CocoaPods 的 1.0 版本出現了不少改變,有一些是 breaking changes,官網上的 Migration Guide 裏面有很全面的介紹。我把其中感受比較重要的幾點在這裏說明一些,輔以我本身的一些使用經驗,但願對讀者有所幫助。xcode

Podfile 語法改變

這部分改變差很少是最直接的了,有幾個改變會直接讓如今已有的 Podfile 不能工做:ruby

  • 必須指明 target服務器

我本身就常常圖省事把 target 省略掉,看來從此這個地方要改變習慣了。網絡

  • :exclusive => truelink_with 被去掉了ide

由於有了 abstract_target 這個特性,可讓咱們重用一個 target 裏的 Pods,加上上面必須指明 target 的要求,這兩個選項存在的意義就不大了。在我 以前的文章 裏提到過能夠用函數來實現 pod 的重用,如今又有了一種新的方法。下面是官網的例子:函數

# Note: There are no targets called "Shows" in any       Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'
  pod 'Fabric'

  # Has its own copy of ShowsKit + ShowWebAuth
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end 
end
  • xcodeproj 被重命名成 project工具

  • :local 被去掉了,如今想使用本地的 pod 只能使用 :path

CocoaPods 行爲改變

  • 對於 Pod 倉庫,再也不使用 shallow clone,而是使用完整 clone。

這個 issue 裏提到以前使用 shallow clone(depth=1) 的方法會給 git 服務器帶來額外的壓力,所以改成使用完整的 clone。這個改變實話說對於國內用戶來講是很是不利的,由於會致使 repo 初次 clone 的時間進一步增長。因爲國內的網絡環境,如今 clone 須要的時間就已經很長了,這個改動更是雪上加霜。所以我更加推薦使用 CocoaPods 國內的非官方鏡像(例如 https://git.oschina.net/6david9/Specs.git ),以加快訪問速度。

  • pod install 默認再也不進行 pod repo update

這是個值得喜大普奔的消息。以前 CocoaPods 新手上來遇到的最大的問題就是 pod install 會「卡死」在 git pull 上,後來咱們知道能夠用 pod install --no-repo-update。如今不更新倉庫成了默認行爲,以前更新倉庫的行爲須要增長參數 --repo-update。這個改變讓 CocoaPods 對於新手來講更加友好了。

  • Development pods 默認再也不解鎖

對應 issue。 這個改動本意是好的,不過具體效果怎麼樣,還有待觀察。

  • link 庫的命名發生改變

這一點是我在升級舊版本的時候發現的,也是有點坑人的部分,但願官方後面會進一步完善吧。具體說,因此依賴庫最後造成的那個大庫,若是以前沒有使用 target 的話,命名是 libPods.a,如今強制使用 target,對應的命名會變成 libPods-{target}.a。可能須要手動去改一下 Build Phase,避免 link 錯誤的庫,致使程序行爲發生錯誤。

相關文章
相關標籤/搜索