繁体   English   中英

Xcode在某些文件中没有找到Swift桥接header文件

[英]Xcode does not find Swift bridging header file in some files

我的iOs申请Xcode确实有问题,已经在Objective-C编码了,现在正在Swift的文件迁移,一个接一个。 代码通过版本控制系统 (git) 在团队成员之间共享。

我从核心课程开始,然后这样进行:

  • 我在 Swift 文件中写入新的 class,例如。 MyClass.swift(带@objc前缀关键字)
  • 我将#import "MyClass.h"替换为@class MyClass; 在 header 个文件中
  • 我在需要它的实现文件 (.m) 中添加#import "MyProject-Swift.h"
  • 我删除了 MyClass.h 和 MyClass.m 文件
  • 我清理并构建项目

这个过程已经工作了好几次,但由于某些原因,一些#import "MyProject-Swift.h"不起作用,我得到错误: 'MyProject-Swift.h' file not found

根据导致问题的不同文件,有时,Ctrl+Click 会打开“MyProject-Swift.h”文件,有时则不会(无论“未找到错误”)。

但是该文件存在,并且其中存在翻译后的 Swift 代码。

另一件事真的很奇怪,我尝试从那些使用#import "MyProject-Swift.h"的东西重新创建 new.h 和 .m 文件并遇到问题,然后它工作(有时不工作,我得到其他错误)!

由于它在某些情况下有效,我真的不明白为什么它会导致其他情况出现问题。 当然,我搜索了几十个主题,但没有找到有同样问题的人。

可能是 Xcode 设置问题,还是因为团队开发人员之间的 Xcode 版本不同?

任何的想法?

谢谢

编辑:

我用另一种观点来完成问题描述。

我确实有一个工作中的项目 state:使用我的一些新的 Swift 文件,它构建和运行良好(一些 Objective-C 文件使用 Swift 文件)。

我知道某个 .m 文件有问题:

  • 我在开头添加#import "MyProject-Swift.h" ,没有别的
  • Xcode 说找不到“MyProject-Swift.h”文件,Ctrl+Click 不起作用,项目不会构建
  • 但是,如果我单击带有四个小方块的按钮(编辑器的左上角),在显示的菜单中我有“包括”,“MyProject-Swift.h”列在它下面,然后单击“MyProject-Swift .h" 打开文件!

#import "MyProject-Swift.h"替换为#import <MyProject-Swift.h>不会改变任何东西。

我有时也会遇到这种情况:Ctrl+Click 打开“MyProject-Swift.h”,但是 Xcode 说找不到“MyProject-Swift.h”文件(它也不会构建)。

  1. 向您的项目添加一个名为[MyProjectName]-Bridging-Header.h的头文件 这将是单个头文件,您可以在其中导入您希望 Swift 代码访问的任何 Objective-C 代码。

  2. 在您的项目构建设置中,找到 Swift Compiler – Code Generation,然后在 Objective-C Bridging Header 旁边从项目的根文件夹中添加到您的桥接头文件的路径。 因此,如果文件位于项目根文件夹中,它可以通过MyProject/MyProject-Bridging-Header.h或简单地MyProject-Bridging-Header.h

您只需要一个桥接头。 将您的 #import 语句添加到此文件中,您的类现在可以在您的 Swift 代码中使用,而无需任何额外的导入语句。

我终于想出了自己的解决方案:我猜在一些 git merge 之后,project.pbxproj 文件有点损坏。 该项目的某些文件在该文件中被引用了两次,所以我删除了我认为不好的那些(可能随机选择的更接近事实)。

现在它就像一个魅力。

事实上,在我尝试将文件迁移到 Swift 之前,这对项目没有影响!

在 XCode 中有一个工具或函数来将此 project.pbxproj 文件重置为我们拥有的当前内容将是一个好主意。

基于该假设https://stackoverflow.com/a/31540611/2150954我以这种简单的方式解决了这个问题

找到目标 C 文件,编译器声称在该文件中找不到 YourProject-Swift 文件。 从项目中删除它的文件,然后添加.

之后我的项目成功编译并运行

如果您有两个目标,并且在 ObjC 代码中使用的新编辑的 swift 文件不断出现编译/语义错误,这可能是问题所在 -

你有两个<ProjectName>-swift.h文件。 就像在 mycase 中: MyProject-swift.hMyProjectSandbox-swift.h这些是包含所有 swift 类和方法的文件。 (当您在 Obj-C 代码中用 Command 键单击任何 swift 类时,这些会打开)

所以我正在研究Sandbox目标。 我发现,当我对 swift 文件和 clean-build 进行更改时,只有MyProjectSandbox-swift.h被更新。 但主要问题是 ObjC 代码指的是MyProject-swift.h文件,该文件不会更新,因为我只是在重建我正在处理的(沙箱)目标。

TL; 博士;

因此,解决方案是确保您清理并重建两个目标,以便使用最新的 swift 代码和类更新两者( MyProject-swift.hMyProjectSandbox-swift.h )。

这将更新两个文件,并且您的 ObjC 代码不会显示任何与 swift 文件无关的编译错误。

对我来说,它发生在重命名项目之后。 我所要做的就是重命名路径:

Build Settings > Framework Search Paths

以匹配新的项目名称。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM