CocoaPods 1.8 将 CDN 切换为默认的 spec repo 源,并附带一些增强功能!
注意: 如转载本文章, 请联系作者, 并给出文章的源地址
CDN为默认值
CDN 支持最初是在 1.7 版本中引入的,最终在 1.7.2 中完成。 它旨在大大加快初始设置和依赖性分析。 使用 1.8 , CocoaPods 不再需要克隆现在巨大的主规格 repo 才能运行,用户几乎可以立即将他们的项目与 CocoaPods 集成。
这是在不到一分钟的时间内用新安装的 CocoaPods 1.8 集成和构建 iOS 项目的视频演示:
您可以使用以下步骤安全地删除主规格库:
首先,编辑 Podfile 以将 CDN 设置为主要来源:
- source 'https://github.com/CocoaPods/Specs.git'
+ source 'https://cdn.cocoapods.org/'
复制代码
然后,运行以下命令将其从托管存储库列表中删除:
pod repo remove master
复制代码
注意:如果您希望继续使用基于 git 的源,则必须确保通过源 DSL 在 Podfile 中明确指定它,否则 CocoaPods 将自动使用 CDN 进行依赖性解析。
就是这样! 有关 CDN 的更多信息,请阅读之前的 博客文章 !
info_plist Podspec DSL
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。
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 中提供自动应用项目名称的辅助方法。 例如,另一个分组想法是通过其平台(如 iOS 或 macOS )对 pod 进行分组。
注意: project_name 选项当前还需要启用 generate_multiple_pod_projects 安装选项才能使其正常工作。 增量安装也已更新,以考虑每个 pod 使用的项目名称,并将继续按预期工作。
测试规格增强功能
测试规范已成为 CocoaPods 的一个组成部分,并添加了一些新功能。
UI测试包支持
现在可以支持“ 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