【发布时间】:2019-01-20 18:04:41
【问题描述】:
我有一个带有动态框架(称为“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")
}
}
我希望 Playground 使用 SnapKit 导入(在 VisualKit 中)与没有导入时一样。
有什么想法吗?
【问题讨论】:
-
我遇到了类似的问题,看起来像这样。我通过在 Playground 中导入第二个框架来解决。在你的情况下,尝试在你的 Playground 文件中
import SnapKit,关闭并重新打开 Xcode。 -
@ajeferson 有趣的想法。问题是我正在使用 Carthage 构建 SnapKit,并将构建的框架直接链接到 VisualKit 中。这意味着在我当前的设置中,SnapKit 对于要导入的操场实际上是不可见的。你有类似的设置吗?如果是这样,您是如何导入设置中的 SnapKit 的?
-
实际上,我使用的是 Cocoapods。我有两个我拥有代码的动态框架,我们称它们为框架 A 和 B。A 依赖于 B,这是使用 A 的 podspec 文件说明的。这种依赖导致在运行
pod install事件时安装 B,我认为我没有在我的项目的Podfile上直接声明 B。但是,当我尝试在操场上导入 A 时,遇到了同样的错误。我找到的解决方案是添加B对项目Podfile的依赖,清理(我也删除了派生数据的目录,以防万一),关闭,重新打开并重建项目。 -
无论如何,我都无法通过将 SnapKit 导入我的 Playground 来解决问题。不过我很欣赏这个主意。
标签: ios xcode frameworks swift-playground