CocoaPods:带有子规范的规范 lint 丢弃了父规范?

Posted

技术标签:

【中文标题】CocoaPods:带有子规范的规范 lint 丢弃了父规范?【英文标题】:CocoaPods: spec lint with subspec discards parent spec? 【发布时间】:2015-12-13 02:21:37 【问题描述】:

我有一个名为 MeshPipe 的库,我正在尝试为其编写 PodSpec。我在 Mac OS X 10.11 和 Xcode 7.1.1 上使用 CocoaPods 0.39.0。

这是一个只有三个文件的小型库。它还有一个可选部分,它实现了对我的另一个库 Cerfing 的支持。在我的 podspec 中,我只想在主 pod 中包含核心部分,并且只有对 Cerfing 支持真正感兴趣的人才能将 Cerfing 部分和依赖项拉入他们的项目中。

为此,我写了一个带有子规范的podspec:一个用于“核心”部分:

s.subspec "Core" do |core|
  core.source_files  = "MeshPipe/*.h,m"
  core.exclude_files = "MeshPipe/main.m"
  core.public_header_files = "MeshPipe/MeshPipe.h"
end

还有一个用于可选的“cerfing”部分:

s.subspec "CerfingMeshPipe" do |cerf|
  cerf.source_files  = "CerfingMeshPipeTransport/*.h,m"
  cerf.exclude_files = "CerfingMeshPipeTransport/main.m"
  cerf.dependency "Cerfing"
end

然后我告诉 CocoaPods,大多数人只想要核心部分:

s.default_subspecs = "Core"

这个 podspec 没有 lint,因为

- NOTE  | [MeshPipe/CerfingMeshPipe] xcodebuild: 
   MeshPipe/CerfingMeshPipeTransport/CerfingMeshPipeTransport.h:10:9:
   fatal error: 'MeshPipe/MeshPipe.h' file not found

如果我pod spec lint --no-clean --verbose 并打开生成的项目,项目中只有子规范源可用,主 MeshPipe 文件不见了!!

(注意这里没有 MeshPipe/Meshpipe.h,m!)

如果我尝试将子规范中的依赖项显式添加到主规范 (cerf.dependency('MeshPipe/Core')),CocoaPods 会告诉我存在从 MeshPipe/CoreMeshPipe/Core 的循环依赖项。

我也尝试过在***根级规范中包含 core 的源代码,但这产生了同样的错误。

请帮助:为什么我的子规范不能依赖于父规范?肯定有我遗漏/配置错误的东西吗?

见Full output of pod spec lint --verbose

【问题讨论】:

【参考方案1】:

我想我一定是不小心在根规范而不是子规范上添加了对 Core 的依赖。我现在得到其他错误,但不再丢失头文件,也没有关于递归依赖的错误。 subspec 块现在看起来像:

s.subspec "CerfingMeshPipe" do |cerf|
  cerf.source_files  = "CerfingMeshPipeTransport/*.h,m"
  cerf.exclude_files = "CerfingMeshPipeTransport/main.m"
  cerf.dependency "Cerfing"
  cerf.dependency "MeshPipe/Core" # was s.dependency "MeshPipe/core"
end

【讨论】:

以上是关于CocoaPods:带有子规范的规范 lint 丢弃了父规范?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cocoapods 的子规范构建 ios 框架的问题

Angular(03)-- lint风格规范和WebStorm小技巧

无法在 CocoaPods 中找到规范

Cocoapods:找不到“Firebase/Core”的规范

Cocoapods - 找不到 [Github 框架] 的规范

CocoaPods:指向 pod 规范中的一个分支