如何修复 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 中)时与不导入时一样工作。
有什么想法吗?
经过许多艰苦的时间解决这个问题,我设法解决了它:
在 Xcode 中,select 项目导航器中的框架项目。
导航至 Build Phases
选项卡。
添加一个 Copy Files
阶段(通过点击 +
按钮),并从下拉列表 select select Frameworks
或者.
将您的框架中使用的所有 carthage 框架添加到复制文件阶段。
然后清理并重建您的框架,现在 playground 应该可以正常工作了。
请注意,此答案仅在您使用 Carthage 构建框架项目中使用的第 3 方框架时才适用。
我有一个 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 中)时与不导入时一样工作。
有什么想法吗?
经过许多艰苦的时间解决这个问题,我设法解决了它:
在 Xcode 中,select 项目导航器中的框架项目。
导航至
Build Phases
选项卡。添加一个
Copy Files
阶段(通过点击+
按钮),并从下拉列表 select selectFrameworks
或者.将您的框架中使用的所有 carthage 框架添加到复制文件阶段。
然后清理并重建您的框架,现在 playground 应该可以正常工作了。
请注意,此答案仅在您使用 Carthage 构建框架项目中使用的第 3 方框架时才适用。