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

时间:2019-01-20 18:04:41

标签: ios xcode frameworks swift-playground

我有一个带有动态框架(称为“ VisualKit”)的Xcode工作区和一个导入VisualKit的运动场。

当VisualKit没有自己的外部依赖项时(即VisualKit不依赖于任何其他动态框架时),此设置可以很好地工作。

但是,当我添加一个动态框架时(在这种情况下,我正在导入SnapKit,尽管它与什么框架无关紧要),但出现以下错误:

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

我尝试了以下方法: -清理项目,删除导入语句,然后将其放回并尝试重建操场 -删除派生数据 -从头开始重新创建工作区/操场/框架项目

...全部无济于事。

我的游乐场:

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")
    }
}

我希望游乐场与不使用SnapKit导入(在VisualKit中)相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

在经过数小时的艰苦的故障排除之后,我设法解决了该问题:

  1. 在Xcode中,在项目导航器中选择您的框架项目。

  2. 导航至Build Phases标签。

  3. 添加一个Copy Files阶段(通过点击+按钮),然后从下拉选择器中选择Frameworks

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

然后清理并重建您的框架,操场现在应该可以按预期工作。

请注意,仅当您使用迦太基构建框架项目中使用的第三方框架时,此答案才适用。