Ios 如何修复Swift游乐场中的“无法查找符号”错误
我有一个Xcode工作区,有一个称为“VisualKit”的动态框架和一个导入VisualKit的游乐场 当VisualKit本身没有外部依赖项时,即VisualKit不依赖任何其他动态框架时,此设置工作正常 但是,在本例中,当我添加动态框架时,我正在导入SnapKit,尽管它是什么框架并不重要,但我得到以下错误:Ios 如何修复Swift游乐场中的“无法查找符号”错误,ios,xcode,frameworks,swift-playground,Ios,Xcode,Frameworks,Swift Playground,我有一个Xcode工作区,有一个称为“VisualKit”的动态框架和一个导入VisualKit的游乐场 当VisualKit本身没有外部依赖项时,即VisualKit不依赖任何其他动态框架时,此设置工作正常 但是,在本例中,当我添加动态框架时,我正在导入SnapKit,尽管它是什么框架并不重要,但我得到以下错误: error: Couldn't lookup symbols: VisualKit.ItemsLabel.__allocating_init() -> VisualKit.
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()
VisualKit动态框架项目中的ItemsLabel:
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")
}
}
我希望游乐场在VisualKit中使用SnapKit导入时与不使用SnapKit导入时一样工作
有什么想法吗?经过几个小时的艰苦努力,我终于解决了这个问题: 在Xcode中,在项目导航器中选择框架项目 导航到“构建阶段”选项卡 点击+按钮添加复制文件阶段,并从下拉选择器中选择框架 将框架中使用的所有迦太基框架添加到复制文件阶段 然后清理并重建你的框架,操场现在应该按照你的预期工作
请注意,这个答案只适用于使用迦太基构建框架项目中使用的第三方框架的情况。我也遇到过类似的问题。我通过在游乐场中导入第二个框架解决了这个问题。在您的情况下,尝试在游乐场文件中导入SnapKit,关闭并重新打开Xcode。@Ajefferson有趣的想法。问题是我正在用迦太基构建SnapKit,并在VisualKit中直接链接构建的框架。这意味着在我当前的设置中,SnapKit对于要导入的游乐场实际上是不可见的。你有类似的设置吗?如果是这样的话,你是如何导入你安装的SnapKit的呢?在我的例子中,实际上我使用的是Cocoapods。我有两个动态框架,我拥有这些代码,让我们称它们为框架A和B。A依赖于B,这是使用A的podspec文件声明的。这种依赖性导致在运行pod安装事件时安装了B,而我认为我并没有在项目的pod文件中直接声明B。然而,当我尝试在我的游乐场中导入一个时,得到了相同的错误。我找到的解决方案是添加B对项目Podfile的依赖关系,clean我还删除了派生数据的目录,以防万一,关闭、重新打开并重建项目。无论如何,我无法通过将SnapKit导入我的游乐场来解决问题。不过我很欣赏你的想法。你没有准备好/usr/local/bin/carthage复制框架脚本吗?