CocoaPods 1.8 Beta的新改進

CocoaPods 1.8CDN切換爲默認的spec repo源,並附帶一些加強功能!git

注意: 如轉載本文章, 請聯繫做者, 並給出文章的源地址github

CDN爲默認值

CDN支持最初是在1.7版本中引入的,最終在1.7.2中完成。 它旨在大大加快初始設置和依賴性分析。 使用1.8CocoaPods再也不須要克隆如今巨大的主規格repo才能運行,用戶幾乎能夠當即將他們的項目與CocoaPods集成。swift

這是在不到一分鐘的時間內用新安裝的CocoaPods 1.8集成和構建iOS項目的視頻演示:vim

圖片

您能夠使用如下步驟安全地刪除主規格庫:api

首先,編輯Podfile以將CDN設置爲主要來源:安全

- source 'https://github.com/CocoaPods/Specs.git'
+ source 'https://cdn.cocoapods.org/'
複製代碼

而後,運行如下命令將其從託管存儲庫列表中刪除:ruby

pod repo remove master
複製代碼

注意:若是您但願繼續使用基於git的源,則必須確保經過源DSLPodfile中明確指定它,不然CocoaPods將自動使用CDN進行依賴性解析。app

就是這樣! 有關CDN的更多信息,請閱讀以前的博客文章框架

info_plist Podspec DSL

CocoaPods在適當的時候自動爲podapp規範和測試規範生成Info.plist文件,例如當Podfile經過指定use_frameworks須要動態框架時! 選項。單元測試

Podspecs如今支持經過info_plist DSL修改生成的Info.plist文件的內容。 雖然咱們預計這將最經常使用於修改框架的包標識符,但能夠包含任何鍵值對。 指定的值將覆蓋CocoaPods包含的任何默認值。

這是一個例子:

Pod::Spec.new do |s|
  s.name         = 'NetworkingLib'
  s.version      = '1.0.0'

  # ...rest of attributes here

  s.info_plist = {
    'CFBundleIdentifier' => 'com.awesomecompany.networking',
    'SERVER_URL' => 'https://example.com/api'
  }
end
複製代碼

隨着1.7中引入的app規範,pod做者可以爲他們的pod描述一個應用程序,例如演示應用程序。 新的info_plist DSL經過容許podspecs自定義生成的Info.plist來加強應用程序規範的功能,Info.plist包含重要的設置,例如包標識符,iOS安全和隱私設置,設備方向支持等。

Pod::Spec.new do |s|
  s.name         = 'ToastLib'
  s.version      = '1.0.0'

  # ...rest of attributes here

  s.app_spec 'ToastCatalog' do |app_spec|
    app_spec.info_plist = {
      'CFBundleIdentifier' => 'com.bakery.ToastCatalog',
      'UISupportedInterfaceOrientations' => [
        'UIInterfaceOrientationPortrait',
        'UIInterfaceOrientationLandscapeLeft',
        'UIInterfaceOrientationLandscapeRight',
      ],
      'UILaunchStoryboardName' => 'LaunchScreen',
      'UIMainStoryboardFile' => 'AppStoryboard',
      'NSLocationWhenInUseUsageDescription' => 'ToastCatalog uses your location to find nearby Toast!'
    }
  end
end
複製代碼

請務必注意,info_plist屬性在未生成Info.plist文件的狀況下不起做用,例如將pod集成爲靜態庫時。 若是您的庫須要始終存在Info.plist中包含的數據,咱們建議您將其做爲資源包含在內。

有關其工做原理及其背後的理性的更多詳細信息,請在此處查看RFC。

project_name Podfile DSL

CocoaPods 1.7引入了generate_multiple_pod_projects選項,該選項將每一個pod安裝到本身的Xcode項目中。 CocoaPods 1.8經過引入project_name DSL進一步擴展,容許pod使用者指定項目名稱以集成給定的pod

這爲消費者開闢了許多新的可能性,將某些豆莢分組在一塊兒,這在邏輯上是有意義的。 請考慮如下示例:

install! 'cocoapods', :generate_multiple_pod_projects => true

target 'MyApp' do
  use_frameworks!

  pod 'Moya', :project_name => 'Networking'
  pod 'Alamofire', :project_name => 'Networking'
  pod 'Result', :project_name => 'Networking'

  target 'MyAppTests' do
    inherit! :search_paths
    pod 'OCMock', :project_name => 'Testing'
  end
end
複製代碼

會產生如下結果:

圖片

消費者能夠選擇本身的分組,並在其Podfile中提供自動應用項目名稱的輔助方法。 例如,另外一個分組想法是經過其平臺(如iOSmacOS)對pod進行分組。

注意:project_name選項當前還須要啓用generate_multiple_pod_projects安裝選項才能使其正常工做。 增量安裝也已更新,以考慮每一個pod使用的項目名稱,並將繼續按預期工做。

測試規格加強功能

測試規範已成爲CocoaPods的一個組成部分,並添加了一些新功能。

UI測試包支持

如今能夠支持「UI測試包」,您如今能夠指定要用於給定test_spectest_type。 默認值爲: unit,用於建立單元測試包。 考慮咱們最喜歡的pod CannonPodder的如下示例:

Pod::Spec.new do |s|
  s.name         = 'CannonPodder'
  s.version      = '1.0.0'

  # ...rest of attributes here

  s.test_spec 'UITests' do |test_spec|
    test_spec.requires_app_host = true
    test_spec.test_type = :ui
    test_spec.source_files = 'UITests/**/*.swift'
  end
end
複製代碼

這將在安裝時成功集成CannonPodder-UI-UITests UI測試包,並將自動建立要用於它的應用程序主機。

注意:UI測試包須要應用程序主機才能運行,所以若是您選擇將測試規範集成爲UI測試包,則必須始終指定requires_app_host

可定製的應用主機

對於大多數狀況,生成的測試規範應用程序主機應足以在其中執行測試。 可是,有些狀況下pod做者可能但願進一步自定義用於test_specapp主機。

例如,pod做者可能但願爲其應用程序主機或資源包指定其餘依賴項,以便在測試期間使用。 應用程序規範是一個很好的候選者,由於它們提供了大多數腳手架和1.8,如今能夠經過app_host_name DSLapp_spec設置爲test_specapp主機。

這是一個例子:

Pod::Spec.new do |s|
  s.name         = 'CannonPodder'
  s.version      = '1.0.0'

  # ...rest of attributes here

  s.app_spec 'DemoApp' do |app_spec|
    app_spec.source_files = 'DemoApp/**/*.swift'
    # Dependency used only by this app spec.
    app_spec.dependency 'Alamofire'
  end

  s.test_spec 'Tests' do |test_spec|
    test_spec.requires_app_host = true
    # Use 'DemoApp' as the app host.
    test_spec.app_host_name = 'CannonPodder/DemoApp'

    # ...rest of attributes here

    # This is required since 'DemoApp' is specified as the app host.
    test_spec.dependency 'CannonPodder/DemoApp'
  end
end
複製代碼

會產生如下結果:

圖片

這一強大的新功能爲pod做者提供了新的可能性,他們但願對用於測試規範的app主機進行更精細的控制。

下一步是什麼?

CocoaPods 1.8是一個很是使人興奮的版本,咱們很是高興您試用它,並建議您升級:

$ gem install cocoapods --pre
複製代碼

對於將來版本,咱們將繼續探索容許pod做者和pod使用者將集成pod配置到其項目中的新方法,例如經過指定單個包或連接設置。 咱們已經發布了一份咱們正在探索的提案,歡迎您提出意見!

與往常同樣,咱們要感謝全部貢獻者讓這個版本成爲現實!

簽出更改日誌以獲取完整的更改列表。

相關文章
相關標籤/搜索