web-dev-qa-db-ja.com

Swift Playgroundの「シンボルを検索できませんでした」エラーを修正する方法

動的フレームワーク( '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の場合)を使用する場合と使用しない場合とで同じように機能することを期待します。

何か案は?

9
justinkaufman

これをトラブルシューティングするために多くの骨の折れる時間を費やした後、私はそれをなんとか解決しました:

  1. Xcodeでは、プロジェクトナビゲーターでフレームワークプロジェクトを選択します。

  2. Build Phasesタブに移動します。

  3. Copy Filesフェーズを追加し(+ボタンをタップして)、ドロップダウンセレクターからFrameworksを選択します。

  4. フレームワークで使用されているすべてのカルタゴフレームワークをファイルコピーフェーズに追加します。

次に、フレームワークをクリーンアップして再構築すると、プレイグラウンドが期待どおりに機能するようになります。

この回答は、Carthageを使用してフレームワークプロジェクトで使用されるサードパーティのフレームワークを構築している場合にのみ適用されることに注意してください。

8
justinkaufman