我有以下项目设置:
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'
我为修复问题所做的事情,或者至少知道发生了什么:
- 单独构建子项目工作(但后续的超级项目构建失败) 取消注释声明可以消除错误,但自然会在调用位置引发"
- 将导入添加到超级项目的
.pch
文件中没有帮助 - 直接将导入添加到函数的头文件中,但在我的场景中不是一个选项(部分代码是自动生成的,很难找出哪个文件需要哪个框架)
Implicit Declaration of Function
"警告我怀疑也许头文件不是在Objective-C中处理的,而是C模式,所以由于导入周围的#ifdef __OBJC__
宏而忽略了导入,但删除它也没有帮助。我还试图将#import <Foundation/Foundation.h>
添加到函数的头文件中,以"建议"Objective-C模式,它实际上在文件中启用了正确的语法高亮显示,但对构建没有帮助。
关于为什么在.m
中找到符号,而不是在.h
文件中找到符号的任何建议?或者任何不需要将导入添加到特定头文件,但全局的解决方案?
今天我在project -> Info -> configuration中添加配置文件后发现了一个问题,然后我运行我的项目,它在我的pch文件中出错。
它表明xxx.h没有找到,我搜索了很多解决方案,但我不能得到正确的答案。所以我记得这一步。
我删除了配置文件,我的项目恢复正常。