具有依赖项的 CocoaPods 框架 - 在框架模块中包含非模块化标头

Posted

技术标签:

【中文标题】具有依赖项的 CocoaPods 框架 - 在框架模块中包含非模块化标头【英文标题】:CocoaPods framework with dependencies - include of non-modular header inside framework module 【发布时间】:2016-01-20 14:34:00 【问题描述】:

我正在尝试使用其他 pod 依赖项构建一个私有 CocoaPods 框架。

其中,我在 podspec 文件中添加了 Parse 作为依赖项:

s.dependency 'Parse'

但是,当我尝试对其进行 lint 处理时,

pod lib lint MyPrivateSpec.podspec  --verbose --sources 'git@bitbucket.org:MY_BITBUCKET_NAME/specs.git,https://github.com/CocoaPods/Specs'

我收到以下错误:

Target Support Files/Parse/Parse-umbrella.h:3:9:注意:在 Target Support Files/Parse/Parse-umbrella.h:3 中包含的文件中:

错误 | xcodebuild: Parse/Parse/Parse.h:12:9: 错误:在框架模块'Parse.Parse'中包含非模块化标头

[以及以下几行中的更多此类错误...]

我几乎查看了关于 SO 和 github 问题的所有相关问题,但我找不到任何对我有用的东西。有没有人遇到过这些问题,或者熟悉为什么这不起作用?

【问题讨论】:

【参考方案1】:

不幸的是,这是 Parse 库本身的问题。不久前,当我尝试在为 ios 构建的框架中使用 Parse 库时,我遇到了类似的情况。

错误的意思是 Parse 的一个公共 .h 文件中包含一个不属于模块的标头。如果我没记错的话,在 Parse 的例子中是<sqlite3.h>。如果不从 Parse 的公共标头中删除它,就不可能构建一个也包含 Parse 的框架目标。这应该作为 Parse 的错误提交,以便他们可以进行升级以支持模块化框架构建。

由于我的项目需要构建一个框架目标,因此我不得不在我的项目中使用 Parse 作为上述结果。

这里是一个类似问题的参考和类似的答案:https://***.com/a/24728646/296708

【讨论】:

似乎sqlite3.h 不在 Parse 的公共 .h 文件中,但问题仍然存在。 Searching for "sqlite3.h" in . ./Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m:13:#import <sqlite3.h> ./Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m:12:#import <sqlite3.h> ./Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m:12:#import <sqlite3.h> ./Pods/Parse/Parse/Internal/PFDateFormatter.m:12:#import <sqlite3.h> 很高兴知道。然后我猜可能还有另一个 Objective-C 或 C 库包含在 Parse 的 .h 头文件之一中,如果您仍然看到此错误,仍然会导致“包含非模块化头文件”错误。 是的,因为可以从pod lib create xxx开始复制,所以我在github中创建了一个issue供Parse参考:github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/673 真正有用的答案节省了我的时间

以上是关于具有依赖项的 CocoaPods 框架 - 在框架模块中包含非模块化标头的主要内容,如果未能解决你的问题,请参考以下文章

CocoaPods 向 Tests 项目添加重复的框架

如何使用弱链接的 CocoaPods 库构建 iOS 框架

iOS - 如何在使用 cocoapods 开发框架期间管理框架的依赖关系?

显示使用Cocoapods的Xcode项目的所有本机iOS依赖项/框架

项目和子项目的 Cocoapods

CocoaPods 不适用于框架目标