链接!== 复制。
有 C 风格 #include ... 和 Objective-C 风格 #import ...
两者的工作方式几乎相同..
其中 #import 读取标题,但如果完成一次则不会再次包含。因为这有时会并且确实会失败(通常是因为在不同的方言中混合了 C、C++、Objc、Objc++),我们经常使用#define 规则来确保所包含的代码被读取一次并且再次不 ,这反过来也适用于包含代码并使用 #include 声明的代码。它将被包含但不会编译两次。
#ifndef SOME_HumanReadableFlag_h
#define SOME_HumanReadableFlag_h
// ... your header code here..
@interface XyzObject : FromInheritedClass
@end
#endif
现在为什么重要?
从其他类的角度来看,包含头文件内容的#define 规则可能会隐藏头文件。当类没有正确编写并考虑到最终开发人员的结构时,这种情况经常发生。它可能适用于开发人员的工作台,但不适用于其他实施它的人。
您的错误清楚地表明“File not found ..”
所以首先看看导入/包含规则的一般区别是什么
-
#import <LibFrameworkName/LibFrameworkName.h>
意味着您必须链接框架或库,即使您在该项目中自己开发了一个。该规则与您的项目相关,LibFrameworkName 是一个框架/库。
如果在某处找到 #include 是不正确的,除非您想以 c 样式将此框架标头包含到您的二进制标头中,2) 告诉您一些原因..
-
#import "LibFrameworkName/LibFrameworkName.h"
意味着您必须将此标头复制/提供到您的项目中,并使用名称为 LibFrameworkName 的子文件夹。一旦在某个地方正确声明,Xcode 可能会找到并应用标头,即使稍后在该特定类中使用错误的规则声明,您也应该在 IDE 中收到警告。在 AFNetworking 的情况下,您不想将系统 SDK 框架复制到您的项目中,也不要复制到第三方框架中,除非您知道自己在做什么。此规则与项目结构中的文件位置相关,这意味着它会尝试在带有此规则的文件下方查找名称为 LibFrameworkName 的文件夹。
它说的是什么:因为框架没有链接,编译器会尝试使用给定的名称来查找它,而忽略 < 和 > 就好像它在哪里像 2) 一个文件该文件夹名称,然后将找不到它并引发错误或警告。
为了强制预编译器解析某些特定文件夹,我们有时会使用 标题搜索路径 来明确告知在哪里可以找到它。被广泛使用并且最麻烦,因为它还向开发人员隐藏了错误定义的规则,因为 Xcode 会跳过代码中仍然存在的错误导入规则,假设它已经知道这个头文件。或者它会在一切正常时发出警告。其他开发人员会遇到麻烦,文件结构和标题列表根本不匹配。所以请记住,当您可以避免使用标头搜索路径列表时,请使用它。它也将不会解决您的问题。
'<AFNetworking/AFNetworking.h>' File not found 表示您的项目不知道框架模块。此标头是框架的一部分。
解决方案:您必须转到 Projects Settings 并向下滚动到 Frameworks and Libraries,点击此列表下方的 [+]。它应该打开对话框,显示您选择的项目目标中的所有 SDK 以及您自己项目的所有已知 Pod 或已知框架,当您开发一些时。按名称搜索框架或库,单击它,点击“添加”.. 完成..
从那里开始 - 有一些选项可以习惯它。
因为链接并不意味着在默认情况下在编译时复制到您的资源中。通常 Xcode 知道它不必将系统 SDK 复制到项目框架文件夹中,所有 macUsers 都在他们的系统上预先安装了正确版本的框架。链接到像 ${SOMEFLAGWHEREEVERTHISPOINTSTO}/AFNetworking/AFNetworking.framework/Headers 这样的特定文件夹实际上是错误的,除非有人想要否决系统框架标题,也可能是二进制文件。
所以AFNetworking 不应出现在 Build Phases > Copy Bundle Ressources 列表中,但在完成上述过程后,它将出现在 Link Binary with Libraries 下,当 Xcode 需要知道某些库/框架必须有它才能编译时,它也可以放在 Dependencies 中。最后提到的选项是因为当某些框架丢失或不可用时,您可以拥有一个在运行时适应的框架。所以这个 Entry 可以帮助 Xcode 弄清楚它必须以哪种排序方式来编译你的东西。
在 Header Search Paths 中找到 ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers 我猜一定有问题.. 因为框架很可能没有复制到 Pods 文件夹中。它应该与 Xcode 附带的 SDKs 文件夹相关。上面提到的链接过程应该可以解决这个问题,然后您可以从标题搜索路径中删除该条目。