专栏名称: CainLuo
iOS
目录
相关文章推荐
938重庆私家车广播  ·  《阿凡达3》预计年底上映,卡梅隆:为三部中最佳电影 ·  14 小时前  
938重庆私家车广播  ·  《阿凡达3》预计年底上映,卡梅隆:为三部中最佳电影 ·  14 小时前  
科幻世界SFW  ·  新书上市 | ... ·  3 天前  
奔腾融媒 都市全接触  ·  今起,呼和浩特开通临时公交专线! ·  3 天前  
51好读  ›  专栏  ›  CainLuo

CocoaPods 1.8 Beta的新改进

CainLuo  · 掘金  ·  · 2019-08-07 23:31

正文

阅读 173

CocoaPods 1.8 Beta的新改进

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






请到「今天看啥」查看全文