【发布时间】:2015-07-31 13:52:20
【问题描述】:
我正在尝试将我的“-Swift.h”文件导入我的 Objective-C .h 文件之一,但 xcode 一直告诉我该文件不存在
#import "Aesculus-Swift.h"
如果我命令单击文件名,它将带我进入生成的头文件,因此我知道它存在。为什么xcode找不到?
【问题讨论】:
标签: objective-c xcode swift
我正在尝试将我的“-Swift.h”文件导入我的 Objective-C .h 文件之一,但 xcode 一直告诉我该文件不存在
#import "Aesculus-Swift.h"
如果我命令单击文件名,它将带我进入生成的头文件,因此我知道它存在。为什么xcode找不到?
【问题讨论】:
标签: objective-c xcode swift
这似乎只是 Xcode 的另一个问题,它是静态分析器和编译器的复杂工具链。
Openradar 列出了radar://21362856 - Swift to Objective-C bridging is unreliable。我敢肯定还有更多,但我在为这个例子找到了一个之后就停止了寻找。
作者imarcelv在说明中注明:
我在实验室问过 WWDC 的一位 Swift 工程师,他甚至不知道如何解决这个问题。
复制步骤:
- 将随机 Swift 类添加到 Objective-C 项目中
- 添加 Xcode 自动生成的#import "ModuleName-Swift.h" 文件
- 尝试使用它或只是尝试编译项目
- 有时它根本不起作用
在这个问题上最好file a radar,因为似乎其他人已经在大声疾呼了。
您可以尝试的另一件事...
从历史上看,Xcode 有可能完全失去它的语法高亮显示,您总是可以通过增加 clang 的日志级别来找出静态分析器放弃了哪些文件。
我不确定它是否仍然相关,但如果我处于你的位置,我会尝试这个命令:
defaults write com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3
这会生成日志,您可以使用 Console.app 搜索 xcode 以突出显示消息。您会希望丢弃项目的派生数据以强制其重新编译。
虽然与您所看到的问题不同,但我已经将 this post 的语法高亮问题标记为书签多年,以便在这种情况下尝试上述 defaults write 命令。
【讨论】:
我最近通过将以下条目添加到我的 .xcconfig 解决了这个问题(如果您愿意,可以将其添加到 Xcode 的构建设置 > 用户标头搜索路径中)。
USER_HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/MyFramework.framework/Headers
这告诉编译器在构建输出目录中搜索头文件,这是 Xcode 放置生成的头文件的地方(至少在这个框架的情况下)。
在我的例子中,这是一个类似~/Library/Developer/Xcode/DerivedData/MyProject-LongCode/Build/Products/Debug-iphonesimulator/MyFramework.framework/Headers/MyFramework 的目录。您也可能会在其中找到生成的标头。
Xcode 的标头和依赖管理是一团糟,它不适合你也就不足为奇了。
【讨论】:
我在处理这些东西时遇到了麻烦,发现您的 -Swift 文件是您的目标的产品名称(而不仅仅是您的目标的名称)。我发现这里的详细信息很有帮助:http://ericasadun.com/2014/08/21/swift-calling-swift-functions-from-objective-c/
【讨论】: