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/Core
到 MeshPipe/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 丢弃了父规范?的主要内容,如果未能解决你的问题,请参考以下文章
Angular(03)-- lint风格规范和WebStorm小技巧
Cocoapods:找不到“Firebase/Core”的规范