動的フレームワーク( 'VisualKit'と呼ばれます)と、VisualKitをインポートする遊び場を備えたXcodeワークスペースがあります。
この設定は、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
を選択します。
フレームワークで使用されているすべてのカルタゴフレームワークをファイルコピーフェーズに追加します。
次に、フレームワークをクリーンアップして再構築すると、プレイグラウンドが期待どおりに機能するようになります。
この回答は、Carthageを使用してフレームワークプロジェクトで使用されるサードパーティのフレームワークを構築している場合にのみ適用されることに注意してください。