Help us understand the problem. What is going on with this article?

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

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化を諦めそうになったり、休日の大事な時間を無駄にしたりしないことを祈ります🙏

fr0g_fr0g
ダブルフロッグ
andfactory
Smartphone Idea Companyとして、人々の生活に「&(アンド)」を届ける。
https://andfactory.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした