【问题标题】:Xcode "Use of undeclared type 'SomeClass'" error but build succeedsXcode“使用未声明的类型'SomeClass'”错误但构建成功
【发布时间】:2019-04-02 19:10:58
【问题描述】:

我曾多次看到类似herehere 这样的问题,但我查找的所有问题似乎都已过时,或者答案与我遇到的问题不符。

我有 2 个框架 - 一个包含一些用于处理的类(我们称之为 ProcessingLibrary),另一个使用我的处理框架。

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

public class SomeClass {

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

它建立起来,一切都是美丽的,生活是美好的。

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

Import Foundation
Import ProcessingLibrary

class SomeOtherClass {
    var someClassInstance: SomeClass

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

    ...

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

所以从技术上讲,我可以只编写库,知道我需要进行哪些调用,然后忽略这些 xcode 错误,但如果能够自动完成并且不会在每一行都看到错误,那就太好了。 (事实上​​,自从我最初提出这个问题以来的最后 2 天里,我已经这样做了)

我尝试过干净构建、删除派生数据、删除并重新添加框架、重新启动 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 文件位于项目外部的另一个目录中,我只是指向它们,并为指向它的库搜索路径设置了构建设置。

我从默认值更改的唯一其他构建设置是Enable Bitcode -> NO,因为我的 C 库不支持位码。

不确定是否有任何信息与此错误有关,但希望对您有所帮助。

感谢所有给出答案的人!

【问题讨论】:

  • 让库依赖于主项目,所以它总是先构建?
  • @matt 我不确定我理解你的意思......没有“主项目”只是一个包含另一个库的库。一个库确实依赖于另一个库
  • 哦,我明白你在说什么。如果这是生成错误标记的原因,只需在 Xcode 首选项中关闭 Live Issues。
  • 感谢您的提示!这确实大大提高了我的 QOL,但它仍然不是一个解决方案——我想要自动完成并能够跳转到我的类定义,但 xcode 仍然找不到类。我构建框架的方式一定有问题,xcode 无法正确解析它,但我不确定是什么。
  • 你为什么不发布一个小型演示项目,其中包含几个由单个类组成的库来重现问题?

标签: ios swift xcode


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,但不幸的是这不是问题 - 我所有的课程都属于同一个目标
【解决方案2】:

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

为琐碎的答案道歉,但这个问题让我忙了一段时间,所以希望能帮助别人

【讨论】:

    【解决方案3】:

    您的项目设置可能有问题。我创建了一个名为 TestSOFramework 的框架,SomeClass 所在的地方和 TestSOFramework2 所在的 SomeOtherClass 所在的地方,一切似乎都在工作。你可以尝试一个新的项目,看看它是否有效?

    【讨论】:

    • 我在问题中添加了更多信息 - 这是一个使用默认 xcode 设置制作的项目,除了我在更新中添加的一对。也许它与导致它有关。
    • @Quinn Tbh。我不想制作一个静态库并对其进行测试:)
    【解决方案4】:

    在我的情况下,这些错误在我构建并运行单元测试后消失了。

    我也先尝试过的事情:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2017-05-17
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多