我有一个带有动态框架(称为“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中)相同。

有任何想法吗?

最佳答案

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

  • 在Xcode中,在项目导航器中选择您的框架项目。
  • 导航到Build Phases选项卡。
  • 添加Copy Files阶段(通过点击+按钮),然后从下拉选择器中选择Frameworks
  • 将框架中使用的所有迦太基框架添加到复制文件阶段。

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

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

    10-08 12:11