CocoaPods 1.8將CDN切換爲默認的spec repo源,並附帶一些加強功能!git
注意: 如轉載本文章, 請聯繫做者, 並給出文章的源地址github
CDN支持最初是在1.7版本中引入的,最終在1.7.2中完成。 它旨在大大加快初始設置和依賴性分析。 使用1.8,CocoaPods再也不須要克隆如今巨大的主規格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的源,則必須確保經過源DSL在Podfile中明確指定它,不然CocoaPods將自動使用CDN進行依賴性解析。app
就是這樣! 有關CDN的更多信息,請閱讀以前的博客文章!框架
CocoaPods在適當的時候自動爲pod,app規範和測試規範生成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。
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中提供自動應用項目名稱的輔助方法。 例如,另外一個分組想法是經過其平臺(如iOS或macOS)對pod進行分組。
注意:project_name選項當前還須要啓用generate_multiple_pod_projects安裝選項才能使其正常工做。 增量安裝也已更新,以考慮每一個pod使用的項目名稱,並將繼續按預期工做。
測試規範已成爲CocoaPods的一個組成部分,並添加了一些新功能。
如今能夠支持「UI測試包」,您如今能夠指定要用於給定test_spec的test_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_spec的app主機。
例如,pod做者可能但願爲其應用程序主機或資源包指定其餘依賴項,以便在測試期間使用。 應用程序規範是一個很好的候選者,由於它們提供了大多數腳手架和1.8,如今能夠經過app_host_name DSL將app_spec設置爲test_spec的app主機。
這是一個例子:
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配置到其項目中的新方法,例如經過指定單個包或連接設置。 咱們已經發布了一份咱們正在探索的提案,歡迎您提出意見!
與往常同樣,咱們要感謝全部貢獻者讓這個版本成爲現實!
簽出更改日誌以獲取完整的更改列表。