具有依赖项的 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 框架 - 在框架模块中包含非模块化标头的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 如何在使用 cocoapods 开发框架期间管理框架的依赖关系?