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配置到其项目中的新方法,例如经过指定单个包或连接设置。 咱们已经发布了一份咱们正在探索的提案,欢迎您提出意见!
与往常同样,咱们要感谢全部贡献者让这个版本成为现实!
签出更改日志以获取完整的更改列表。