LoginSignup
12
5

More than 3 years have passed since last update.

EmbeddedFrameworkでCarthageを使用した際にPreviewがPotentialCrashError: Update failedになる場合の対処法

Posted at

Xcode11から使用できる様になったPreview機能はSwiftUIでの開発をサポートしてくれる強力な味方ではあるのですが、特定の状況で読み込めなくなってしまうこともあり、そうなった場合は開発が滞ったりしてしまいます。

今回、EmbeddedFrameworkとCarthageを利用してSwiftUI開発している際に、Previewが読み込めなくなってハマった際の対処法を紹介します。

環境

  • Swift5.2
  • Xcode11.5
  • Carthage
    • Nuke(画像キャッシュ)
    • Alamofire(API通信)

プロジェクトの構成はアプリのターゲットに、DomainDataStorePresentationの三つのEmbeddedFrameworkを追加しています。
スクリーンショット 2020-06-25 0.21.05.png

UI周りのコードはPresentationに全て書いているので、そのFramework内でPreviewを確認します。

PotentialCrashError: Update failed

では、早速PresentationのFramework内に試しに書いたPreviewを見てみましょう。

struct SwiftUIView_Previews: PreviewProvider {

    static var previews: some View {
        Text("Hello, World!")
    }
}

スクリーンショット 2020-06-25 0.28.47.png

読み込めない😭

エラーの詳細を見てみると・・・

スクリーンショット 2020-06-25 0.29.09.png

どうやらCarthageで導入しているNukeが読み込めないがためにPreviewが表示されないようです。

スクリーンショット 2020-06-25 0.37.05.png

しかしシミュレーターのビルドは通っているので、ちゃんとCarthageで導入したFrameworkの参照はうまくいってるはず🤔

解決法

色々と調べていると、PreviewからFrameworkの参照するためのパスの設定はBuild SettingのFramework Search PathsではなくRunpath Search Pathsから行われているようです。

スクリーンショット 2020-06-25 0.48.01.png

そうと分かれば、以下の画像のようにRunpath Search Pathに、新たにFramework Search Pathsに入力されている$(PROJECT_DIR)/Carthage/Build/iOSを追加してあげれば、Preview時にCarthageで導入したFrameworkも参照できるようになりそうです。

スクリーンショット 2020-06-25 0.51.33.png

この状態でPreviewを確認すると・・・

スクリーンショット 2020-06-25 0.56.24.png

ちゃんと表示された!😂

最後に

以上がEmbeddedFrameworkにCarthageで導入したFramework際にPreviewが表示されない場合の対処法でした。

この記事によって、誰かが私のようにこの問題を修正するために、EmbeddedFramework化を諦めそうになったり、休日の大事な時間を無駄にしたりしないことを祈ります🙏

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5