CocoaPods 1.8 Beta的新改进

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

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

CDN为默认值

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

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

与往常同样,咱们要感谢全部贡献者让这个版本成为现实!

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

相关文章
相关标签/搜索