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

时间:2013-04-12 09:44:51

标签: xcode frameworks import header subproject

我有以下项目设置

1)一个主要的iOS项目('超级项目')......这里没什么特别的,项目是建立在Xcode的默认iOS模板之上的。

2)第二个项目('子项目'),它是在静态库模板的基础上创建的。我将此项目添加到超级项目中,并在“目标依赖项”和“链接二进制文件库”构建阶段中从超级项目创建了对它的引用。

在子项目中,我有一个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文件中找到符号的建议?或者不需要将导入添加到特定头文件但是全局的任何解决方法?

1 个答案:

答案 0 :(得分:0)

今天我在项目中找到了一个isuue - &gt;信息 - &gt;配置添加配置文件,然后我运行我的项目,它在我的pch文件中出错了。

它显示xxx.h未找到,我搜索了很多解决方案,但我无法得到正确的答案。所以我记得那一步。

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

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