如何修复 Swift 游乐场中的“无法查找符号”错误

How to fix 'Couldn't lookup symbols' error in Swift Playground

我有一个 Xcode 工作区,其中有一个动态框架(称为 'VisualKit')和一个 playground,它导入了 VisualKit。

当 VisualKit 没有自己的外部依赖项时(即当 VisualKit 不依赖于任何额外的动态框架时),此设置工作正常。

然而,当我添加一个动态框架时(在本例中我正在导入 SnapKit,尽管它是什么框架并不重要),我收到以下错误:

error: Couldn't lookup symbols:
  VisualKit.ItemsLabel.__allocating_init() -> VisualKit.ItemsLabel
  type metadata accessor for VisualKit.ItemsLabel

我试过以下方法: - 清理项目,删除导入语句,然后将其放回去并尝试重建操场 - 删除派生数据 - 从头开始​​重新创建 workspace/playground/framework 项目

...都无济于事。

我的游乐场:

import UIKit
import PlaygroundSupport
import VisualKit

class MyViewController: UIViewController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = UIColor.red

        let label = ItemsLabel()
        label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        label.text = "Hello"

        view.addSubview(label)
        self.view = view
    }
}

PlaygroundPage.current.liveView = MyViewController()

ItemsLabel(在 VisualKit 动态框架项目中):

import UIKit
import SnapKit

public class ItemsLabel: UILabel {
    public init() {
        super.init(frame: .zero)
    }

    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

我希望 playground 在导入 SnapKit(在 VisualKit 中)时与不导入时一样工作。

有什么想法吗?

经过许多艰苦的时间解决这个问题,我设法解决了它:

  1. 在 Xcode 中,select 项目导航器中的框架项目。

  2. 导航至 Build Phases 选项卡。

  3. 添加一个 Copy Files 阶段(通过点击 + 按钮),并从下拉列表 select select Frameworks或者.

  4. 将您的框架中使用的所有 carthage 框架添加到复制文件阶段。

然后清理并重建您的框架,现在 playground 应该可以正常工作了。

请注意,此答案仅在您使用 Carthage 构建框架项目中使用的第 3 方框架时才适用。