我有一个带有动态框架(称为“ 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中)相同。
有什么想法吗?
答案 0 :(得分:6)
在经过数小时的艰苦的故障排除之后,我设法解决了该问题:
在Xcode中,在项目导航器中选择您的框架项目。
导航至Build Phases
标签。
添加一个Copy Files
阶段(通过点击+
按钮),然后从下拉选择器中选择Frameworks
。
将框架中使用的所有迦太基框架添加到复制文件阶段。
然后清理并重建您的框架,操场现在应该可以按预期工作。
请注意,仅当您使用迦太基构建框架项目中使用的第三方框架时,此答案才适用。