Xcode 8 - 找不到用户头文件路径

4
我有一个项目之前在XCode 7下使用Swift 2.2运行。然而,我开始将其迁移到Xcode 8和Swift 2.3(Swift 3稍后会出现)。这是我第一次迁移项目,所以对许多概念还不太熟悉。我一直收到以下错误: 'JBBarChartView.h'文件未找到。 这是我的项目外观(为保护隐私,已模糊处理不重要的部分)。

enter image description here

蓝色箭头指向桥接头。 这是我的桥接头的样子:enter image description here 这里是我的实际文件夹结构:enter image description here 重要的头文件,比如JBBarChartView.h,都在Vendor文件夹内。出于某种奇怪的原因,Xcode无法找到这些文件,从而无法导入桥接头。 到目前为止,我尝试过的方法是:
  • 针对相关目标,我已将 Swift Compiler - General > Objective-C Bridging Header 设置为正确的位置。
  • 我已经为该目标设置了头文件搜索路径,为../../${SRCROOT} 并启用了递归搜索。
  • 我也选择了始终搜索用户路径YES 选项。
  • 我的用户头文件搜索路径也是: ../../${SRCROOT} 并启用了递归搜索。(手动在构建设置中设置)
  • 我还有一个 xconfig 文件,内容如下:HEADER_SEARCH_PATHS = "../$(SRCROOT)/**" (还有其他内容,但它们都由空格分隔。)
  • 我已经清理了 DerivedData 文件夹,并多次重启了 Xcode。

无论我尝试什么,Xcode 都无法找到那些头文件。有人有任何想法可以尝试吗?

1个回答

0

这个 ../../${SRCROOT} 看起来不对 - 很可能你想要 ${SRCROOT}/../Vendor/(或者类似的东西)。

当你添加它时,它应该会展开 SRCROOT 宏并显示生成的实际路径...看起来正确吗?

例如,当我使用:

${SRCROOT}/../Vendor/

我得到:
/Users/DonMag/Source/TestProj/../Vendor/

这将把我正在寻找的供应商文件放在以下位置:

/Users/DonMag/Source/Vendor/

我解决这个问题的步骤:

在您的项目中创建一个新的FindMe.h文件。在其中放置#define FOUNDIT 1。将#include "FindMe.h"添加到AppDelegate.m的顶部。

didFinishLaunchingWithOptions中添加以下内容:

#ifdef FOUNDIT
    NSLog(@"Woo Hoo");
#endif

自然地,这应该可以编译和运行而没有问题。

接下来,从您的项目中删除对FindMe.h的引用,并将FindMe.h向上移动一个文件夹级别。尝试编译---您应该会收到“找不到FindMe.h”错误。

添加${SRCROOT}作为Header Search Path

尝试编译/运行。那个应该工作。如果是这样...

将FindMe.h再向上移动一个文件夹级别,并将Header Search Path更改为${SRCROOT}/../。编译/运行---应该可以工作。

继续按照这个过程-将.h向上或向下移动到新文件夹中,编辑您的Header Search Path,构建/运行以确认...直到您达到“供应商”头文件的目标文件夹。


我已经尝试了你建议的方法,使用${SRCROOT}/../Vendor/路径看起来也是正确的。但出于某种奇怪的原因,Xcode仍然无法找到这些文件。你有什么其他想法可能导致这个问题吗? - Misha
我现在正在尝试您的解决方案 - 我应该从FindMe.h中删除引用吗?是直接在Xcode中还是在项目文件夹中删除? - Misha
好的,我的问题是,无论我做什么,我甚至都没有遇到当FindMe.h丢失时可能出现的错误,因为在此之后,另一个错误“JBBarChartViewController.h丢失”总是阻止我的构建。 - Misha
好的,我尝试了你的建议 - 我创建的TempProject一切正常。但是 - 一旦我再次切换到我的真实项目,并输入相同(显然正确)的路径,我仍然会遇到上述相同的错误。 - Misha
可能是xconfig文件有问题吗?还是其他什么原因?我真的很着急,因为我必须让这个项目工作哈哈;; - Misha
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接