CocoaPods 1.9 增加了对 XCFrameworks 的支持,服务于 Pod 发布者的基于配置的依赖关系,所生成方案的代码覆盖率,以及其他增强功能和错误修复!
除了重要的错误修复之外,此版本还包括多项功能强化。
XCFramework 支持
随着 Xcode 11 的发布,Apple 引入了使用
.xcframework
文件扩展名的新 bundle 格式。这种格式允许将为不同架构和平台编译的框架的多个副本组合为单个结构。二进制依赖项还需要 XCFrameworks,以支持 macOS Catalina 中引入的新 Catalyst 平台。
此版本引入了让 Pod 发布者使用现有的
vendored_framework
DSL 来支持 XCFrameworks 的方法。例如:
Pod::Spec.new do |s|
s.name = 'ToastLib'
s.version = '1.0.0'
# ...rest of attributes here
s.vendored_frameworks = 'ButterLib.xcframework'
end
复制代码
对于包含动态框架的 Pod 的应用程序,将在项目中添加一个名称为
[CP] Prepare Artifacts
的新脚本阶段,以方便将
.xcframework
包含在应用程序包中。
有关如何创建 XCFramework 的更多详细信息,请查看 Apple 的 WWDC 演讲
Binary Frameworks in Swift
。
Podspec 的基于配置的依赖关系
CocoaPods 长期以来一直支持在配置文件中排除一些依赖项。例如,对于只在开发调试期间使用的依赖,可以使用
pod
Podfile DSL 上的
:configurations
选项来设置:
target 'BananaApp' do
pod 'Toast', :configurations => ['Debug']
end
复制代码
新版本将该功能扩展到 Pod 发布者。 相同的
:configurations
选项现在可以与
dependency
Podspec DSL一起使用:
Pod::Spec.new do |s|
s.name = 'ToastLib'
s.version = '1.0.0'
# ...rest of attributes here
s.dependency 'ButterDebugging', :configurations => ['Debug']
s.dependency 'ErrorReportingTool', :configurations => ['Release']
end
复制代码
注意:当前仅支持 Debug 和 Release 配置。将来可能会添加对自定义配置名称的支持。
测试规范中的代码覆盖率
CocoaPods 在 1.7 版中首次引入了配置为 Podspecs 生成的 Xcode 方案的功能。此版本通过在
scheme
DSL 中指定
code_coverage
选项,增加了对启用代码覆盖率的支持:
Pod::Spec.new do |s|
s.name = 'Networking'
s.version = '1.0.0'
# ...rest of attributes here
s.test_spec 'Tests' do |test_spec|
test_spec.scheme = {
:code_coverage => true, :environment_variables => {'FOO' => 'BAR' }
}
end
end
复制代码
Swift 版本变体
着新的 Swift 版本发布,Pod 发布者可以通过使用
swift_versions
Podspec DSL 增加对多个 Swift 版本进行编译的支持。
为了更好地支持此功能,Podfile DSL 在 1.7 中进行了更新,以允许用户使用
supports_swift_version
DSL 指定其应用程序支持的 Swift 版本。
如果两个不同的 target 包含相同的依赖关系,但需要不同的 Swift 版本,则 CocoaPods 现在将为同一 Pod 创建多个不同的目标,以适应所使用的不同 Swift 版本。
如以下 Pod:
Pod::Spec.new do |s|
s.name = 'CannonPodder'
s.version = '1.0.0'
# ...rest of attributes here
s.swift_versions = ['4.0', '5.0']
end
复制代码