你们要的 CocoaPods 1.8 Beta 版来了!

Posted 知识小集

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你们要的 CocoaPods 1.8 Beta 版来了!相关的知识,希望对你有一定的参考价值。

作者 | Dimitris Koutsogiorgas 
翻译 | 知识小集 
来源 | Cocoapods 官网

CocoaPods 1.8 将 CDN 切换为默认的 spec repo 源,并附带一些增强功能!

CDN 作为默认选项

CDN 支持最初是在 1.7 版本中引入的,最终在 1.7.2 中完成。它旨在大大加快初始化设置和依赖性分析。使用 1.8,CocoaPods 不再需要拷贝现在庞大的 master specs repo 才能运行,用户几乎可以立即将他们的项目与 CocoaPods 集成。

下面的视频演示了在不到一分钟的时间内用新安装的 CocoaPods 1.8 集成和构建 ios 项目:

您可以使用以下步骤安全地删除 master specs repo:

首先,编辑 Podfile 以将 CDN 设置为主源:

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

然后,运行以下命令将其从托管存储库列表中删除:

pod repo remove master

注意:如果您希望继续使用基于 git 的源,则必须确保通过源 DSL 在 Podfile 中明确指定它,否则 CocoaPods 将自动使用 CDN 进行依赖性解析。

就是这样!有关CDN的更多信息,请阅读我们之前的博客文章[1]

info_plist Podspec DSL

CocoaPods 在适当的时候自动为 pod、app specs 和 test specs 生成 Info.plist 文件,例如当 Podfile 通过指定 use_frameworks! 选项要求使用动态框架时。

Podspecs 现在支持通过 info_plist DSL 修改生成的 Info.plist 文件的内容。虽然我们预计这将最常用于修改框架的 bundle 标识符,但可以包含任何键值对。指定的值将覆盖 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 spec,pod 的作者能够为他们的 pod 描述一个应用程序,例如一个 demo app。新的 info_plist DSL 通过允许 podspecs 自定义生成的 Info.plist 来增强 app spec 的功能,Info.plist 可以包含重要的设置,例如 bundle id、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 文档[2]

project_name Podfile DSL

CocoaPods 1.7 引入了 generate_multiple_pod_projects 选项,该选项将每个 pod 安装到自己的 Xcode 项目中。CocoaPods 1.8 通过引入 project_name DSL 做了进一步扩展,允许 pod 使用者指定项目名称以集成给定的 pod。

这为使用者开辟了许多新的可能性,可以将某些 pods 分组在一起,这是很有意义的。请考虑以下示例:

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 使用的项目名称,并将继续按预期工作。

Test Spec 增强

test spec 已成为 CocoaPods 的一个组成部分,并添加了一些新功能。

UI Test Bundle 支持

现在可以支持“UI Test Bundles”,您现在可以指定要用于给定 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 测试包,并将自动创建要用于它的 app host。

注意:UI test bundles 需要 app host 才能运行,因此如果您选择将 test spec 集成为 UI test bundle,则必须始终指定 requires_app_host。

定制 App Host

对于大多数情况,为 test spec 生成的 app host 应可以在其中执行测试。但是,有些情况下 pod 作者可能希望进一步自定义用于 test_spec 的 app host。

例如,pod 作者可能希望为其 app host 或资源包指定其他依赖项,以便在测试期间使用。app spec 是一个很好的候选者,因为它们提供了大多数脚手架,而现在在 1.8 中,可以通过 app_host_name DSL 将 app_spec 设置为 test_spec 的 app host。

以下是一个例子:

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 作者提供了新的可能性,以用于对 test spec 的 app host 进行更精细的控制。

下一步

CocoaPods 1.8 是一个非常令人兴奋的版本,我们非常希望您试用它,并建议您升级:

$ gem install cocoapods --pre

对于未来版本,我们将继续探索允许 pod 作者和 pod 使用者将集成 pod 配置到其项目中的新方法,例如通过指定单个包或链接设置。我们已经发布了一份我们正在探索的提案,欢迎您提出意见!

完整的更新列表可以查看这里[3]

参考

[1]https://blog.cocoapods.org/CocoaPods-1.7.2/ 
[2]https://github.com/CocoaPods/CocoaPods/issues/8753 
[3]https://github.com/CocoaPods/CocoaPods/releases/tag/1.8.0.beta.1



推荐阅读

 
 
 
 


以上是关于你们要的 CocoaPods 1.8 Beta 版来了!的主要内容,如果未能解决你的问题,请参考以下文章

Beta版发布 - 感谢有你们

你们要的廉价版来了!新一代iPhone SE曝光:配置大升级

无法在 macOS Monterey 版本 12.0 Beta 中安装 Cocoapods - Xcode 13.0(13A233)

你们要的后台管理系统全套,今天它来了开源推荐

你们要的后台管理系统全套,今天它来了开源推荐

Swift3 的 Cocoapods 1.1.0 beta