作为子项目构建时,找不到PCH文件中的框架头文件



我有以下项目设置:

1)一个主要的iOS项目('super project')…这里没有什么特别的,项目是在Xcode的一个默认iOS模板上构建的。

2)第二个项目('子项目'),它是在Static Library模板之上创建的。我将这个项目添加到超级项目中,并在"Target Dependencies"one_answers"Link Binary with Libraries"构建阶段从超级项目中创建对它的引用。

在子项目中,我有一个C函数声明,看起来像这样:
ABAddressBookRef myABAddressBookCreateWithOptions(CFDictionaryRef options, CFErrorRef * error);

它是作为AddressBook框架中类似命名函数的替换/代理,并使用该框架中的类型(ABAddressBookRef)。声明存储在头文件中,实现存在于相应的.m文件中。为了使这种类型可用,我将框架头添加到子项目的.pch文件中:

#ifdef __OBJC__
        #import <AddressBook/AddressBook.h>
        #import <Foundation/Foundation.h>
#endif

出现以下问题:

如果我构建超级项目(发布或调试配置),构建失败,并显示此错误消息:

.../ManagedCFunctions.h:24:1: Unknown type name 'ABAddressBookRef'

我为修复问题所做的事情,或者至少知道发生了什么:

  • 单独构建子项目工作(但后续的超级项目构建失败)
  • 取消注释声明可以消除错误,但自然会在调用位置引发"Implicit Declaration of Function"警告
  • 将导入添加到超级项目的.pch文件中没有帮助
  • 直接将导入添加到函数的头文件中,但在我的场景中不是一个选项(部分代码是自动生成的,很难找出哪个文件需要哪个框架)

我怀疑也许头文件不是在Objective-C中处理的,而是C模式,所以由于导入周围的#ifdef __OBJC__宏而忽略了导入,但删除它也没有帮助。我还试图将#import <Foundation/Foundation.h>添加到函数的头文件中,以"建议"Objective-C模式,它实际上在文件中启用了正确的语法高亮显示,但对构建没有帮助。

关于为什么在.m中找到符号,而不是在.h文件中找到符号的任何建议?或者任何不需要将导入添加到特定头文件,但全局的解决方案?

今天我在project -> Info -> configuration中添加配置文件后发现了一个问题,然后我运行我的项目,它在我的pch文件中出错。

它表明xxx.h没有找到,我搜索了很多解决方案,但我不能得到正确的答案。所以我记得这一步。

我删除了配置文件,我的项目恢复正常。

我希望这对解决这类问题有帮助。

相关内容

  • 没有找到相关文章

最新更新