xcode 新的Swift 5类在Objective-C类中不可见

ibps3vxo  于 2023-08-07  发布在  Swift
关注(0)|答案(1)|浏览(168)

我有一个MacOS项目,有几个目标,在其中我一直在将Obj-C类重构到Swift 1 by 1。我已经这样做了几个月,一切都很好,建设良好,直到最近的一堂课。该项目只是拒绝建造。
我在Project文件夹中看到了ProjectName-Swift.h文件,但最后一个构建日期是上周,显然不包括新的类,因此Xcode抱怨它找不到新的Swift类。

  • 在回答之前,请了解以下内容:*
  • 这是一个非常古老和长期的MacOS项目,有几个目标,它不是一个新的MacOS项目。
  • 我之前已经在这个项目中添加了很多其他的Swift类,并在Obj-C .m文件中构建和使用它们,包括一个抱怨它看不到最新的Swift类的文件:ChartListTableCellView的。
  • 我已经尝试了大约50次清理和构建,并删除了派生数据。没有什么会强制重建ProjectName-Swift. h,新类肯定***NOT***在那里。
  • 没有其他的构建问题,只有这个问题与无法看到类有关。
  • 这个类以前是用Obj-C实现的,我正在移植它,那个旧的类文件目前没有被项目引用。
  • 这个Swift类ChartListTableCellView在obj.h文件中没有被引用,所以它在那里没有被前向引用。
  • 网桥标头导入到正在抱怨的.m中。

项目将不会生成,也看不到新类。这是类的声明方式,因此它应该是可见的:

@objcMembers class ChartListTableCellView : NSView
{
    private let grayBottomBorder = NSView()
    ...

    init() {
        super.init(frame: NSMakeRect(0, 0, 0, 0))
        ...
    }
    ...
 }

字符串
我被难倒了,没有主意了。

ha5z0ras

ha5z0ras1#

这个问题的解决方案是令人震惊的EZ:
1.删除/重命名旧的ProjectName-Swift.h,如果项目配置正确,Xcode将发现它并立即重建一个新的!我一直避免接触这个文件,因为很多SO帖子说永远不要删除它。绝望中,我重新命名了它,Xcode立即发现它丢失了,并生成了一个没有问题的新代码?!
1.另一个问题是项目生成设置不正确。我最近更改了Objective-C Generated Interface Header Name:
To -> $(SRCROOT)/$(SWIFT_MODULE_NAME)-Swift.h
From -> $(SWIFT_MODULE_NAME)-Swift.h
这是baaaad。别这么做此更改可能已导致它停止更新网桥头文件。我曾认为这是一个路径,并希望“未来证明”的设置,以防项目移动。但这里不需要PATH,只需要文件名,只需用途:$(SWIFT_MODULE_NAME)-Swift.h

相关问题