CocoaPods 1.8 Beta的新改进

7,801

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

注意: 如转载本文章, 请联系作者, 并给出文章的源地址

CDN为默认值

CDN支持最初是在1.7版本中引入的,最终在1.7.2中完成。 它旨在大大加快初始设置和依赖性分析。 使用1.8CocoaPods不再需要克隆现在巨大的主规格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的源,则必须确保通过源DSLPodfile中明确指定它,否则CocoaPods将自动使用CDN进行依赖性解析。

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

info_plist Podspec DSL

CocoaPods在适当的时候自动为podapp规范和测试规范生成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中提供自动应用项目名称的辅助方法。 例如,另一个分组想法是通过其平台(如iOSmacOS)对pod进行分组。

注意:project_name选项当前还需要启用generate_multiple_pod_projects安装选项才能使其正常工作。 增量安装也已更新,以考虑每个pod使用的项目名称,并将继续按预期工作。

测试规格增强功能

测试规范已成为CocoaPods的一个组成部分,并添加了一些新功能。

UI测试包支持

现在可以支持“UI测试包”,您现在可以指定要用于给定test_spectest_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_specapp主机。

例如,pod作者可能希望为其应用程序主机或资源包指定其他依赖项,以便在测试期间使用。 应用程序规范是一个很好的候选者,因为它们提供了大多数脚手架和1.8,现在可以通过app_host_name DSLapp_spec设置为test_specapp主机。

这是一个例子:

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配置到其项目中的新方法,例如通过指定单个包或链接设置。 我们已经发布了一份我们正在探索的提案,欢迎您提出意见!

与往常一样,我们要感谢所有贡献者让这个版本成为现实!

签出更改日志以获取完整的更改列表。