XCode在某些文件中找不到Swift桥接头文件

Joh*_* S. 10 git xcode objective-c ios swift

我在使用XCode的iOs应用程序中遇到了问题.它已经在Objective-C中编码,现在我正在努力在Swift中一个接一个地迁移文件.代码在具有版本控制系统(git)的团队成员之间共享.

我从核心类开始,我这样做:

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

这个过程已经工作了好几次,但由于某些原因,有些#import "MyProject-Swift.h"不起作用,我收到错误:找不到'MyProject-Swift.h'文件.

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

但文件存在,并且翻译的Swift代码存在于其中.

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

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

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

任何的想法 ?

谢谢

编辑:

我以另一种观点完成了问题描述.

我确实让项目处于工作状态:使用我的一些新的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"文件(它也不会构建).

Bhu*_*hit 5

  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 代码中使用,而无需任何额外的导入语句。


Joh*_* S. 5

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

现在它的工作就像一个魅力.

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

在XCode中使用工具或函数将这个project.pbxproj文件重置为当前的东西是个好主意.


Nik*_*kov 5

立足于那个 asumption /sf/answers/2207842801/我在这解决了这个问题的简单方法

找到目标C文件,其中编译器声称它无法在那里找到YourProject-Swift文件.从项目中删除它,然后添加.

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

  • 这样做的效果是删除project.pbxproj中文件的所有引用(通过删除obj-c文件),然后重新创建(通过重新创建obj-c文件)。所以是的,如果您的文件很少受到影响,这可能是一个解决方案。 (2认同)