2

我有以下项目设置

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文件中的任何建议?或者任何不需要将导入添加到特定头文件但全局的解决方法?

4

1 回答 1

0

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

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

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

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

于 2016-08-08T12:01:30.640 回答