【发布时间】:2019-04-02 19:10:58
【问题描述】:
我曾多次看到类似here 和here 这样的问题,但我查找的所有问题似乎都已过时,或者答案与我遇到的问题不符。
我有 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.m 和 CWrapper.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 无法正确解析它,但我不确定是什么。
-
你为什么不发布一个小型演示项目,其中包含几个由单个类组成的库来重现问题?