Xcode“使用未声明类型'SomeClass'的错误”,但构建成功

时间:2019-04-02 19:10:59

标签: ios swift xcode

我见过类似herehere这样的问题,但是我所查找的所有问题似乎都已过时或答案与我所遇到的问题不符拥有。

我有2个框架-一个框架带有一些要处理的类(我们称之为ProcessingLibrary),另一个框架则利用了我的处理框架。

ProcessingLibrary框架中,我在一个快速文件中声明了一个公共类,如下所示:

public class SomeClass {

    public init(_ stuff: String) {
        // do stuff
    }
    ...

它可以建造,一切都美好,生活也很美好。

然后在另一个尝试使用SomeClass的框架中,我将.framework文件导入到Linked Frameworks and Libraries并将其添加到框架搜索路径中,然后有另一个类尝试创建一个SomeClass的实例如下:

Import Foundation
Import ProcessingLibrary

class SomeOtherClass {
    var someClassInstance: SomeClass

    init() {
        someClassInstance = SomeClass("stuff")
    }

    ...

当我这样做时,xcode告诉我someClassInstance是ErrorType并给我带来Use of undeclared type SomeClass错误,但是,如果我构建该库,它将成功,没有警告,也没有错误。实际上,我什至可以将其存档并在其他项目中使用。

因此,从技术上讲,我可以只编写库知道我需要进行的调用,而忽略这些xcode错误,但是能够具有自动完成功能并且在每一行都看不到错误会很好。 (实际上,自从我最初问这个问题以来的最近两天里,我就这样做了)

我尝试进行干净的构建,删除派生数据,删除并重新添加框架,重新启动xcode ...似乎没有任何解决方法。

可能需要注意的是,xcode会自动完成ProcessingLibrary的导入行,并且它唯一可以通过自动完成/跳转到ProcessingLibraryVersionNumber的定义的内容是ProcessingLibrary.h头文件。

我需要分发此外部框架,但是似乎我包含该外部框架的任何地方也存在相同的问题,即xcode找不到其类/方法定义,但它将成功构建。

更新

好的,因此,根据答案,肯定还有其他一些我不包括引起问题的遗漏。

因此,我在原始帖子中没有提到的唯一信息(因为我认为这是未实现的)是ProcessingLibrary还包括一个静态C代码库,并且基本上只是该C的快速包装器代码。

它有一个CWrapper.mCWrapper.h文件,它们导入了我需要的C代码并为其提供了更简单的调用,而ProcessingLibrary.h则将CWrapper.h导入为:

#import <ProcessingLibrary/CWrapper.h>

CWrapper.h是公共标头。

然后,该项目的大部分代码都在SomeClass.swift中,该代码通过我的CWrapper文件进行C调用。

静态c库.a文件位于项目外部的另一个目录中,我只指向它们,并具有指向它的库搜索路径的构建设置。

由于默认的C库不支持位代码,因此我更改的唯一其他构建设置是Enable Bitcode -> NO

不确定该信息是否与该错误有关,但希望能有所帮助。

感谢所有给出答案的人!

4 个答案:

答案 0 :(得分:2)

只是重新启动XCode对我有用。

道歉,但这个问题使我忙了一段时间,希望能对其他人有所帮助

答案 1 :(得分:1)

我相信这是因为您的课程不属于同一目标。过去这对我有用,我希望对您也有用。

选择文件>打开文件检查器>确保选中所有目标框: enter image description here

答案 2 :(得分:0)

您的项目设置可能有问题。我创建了一个名为TestSOFramework的框架,该框架位于SomeClass,而另一个地方是TestSOFramework2,该框架位于SomeOtherClass,一切似乎正常。您可以尝试一个新的项目,看看是否可行?

enter image description here

答案 3 :(得分:0)

就我而言,这些错误在我构建并运行单元测试后就消失了。

我也首先尝试过的事情:

  • 搁置了我所有的更改
  • 清理了构建文件夹
  • 重新启动Xcode