Xcode11から使用できる様になったPreview機能はSwiftUIでの開発をサポートしてくれる強力な味方ではあるのですが、特定の状況で読み込めなくなってしまうこともあり、そうなった場合は開発が滞ったりしてしまいます。
今回、EmbeddedFrameworkとCarthageを利用してSwiftUI開発している際に、Previewが読み込めなくなってハマった際の対処法を紹介します。
環境
- Swift5.2
- Xcode11.5
- Carthage
- Nuke(画像キャッシュ)
- Alamofire(API通信)
プロジェクトの構成はアプリのターゲットに、Domain
、DataStore
、Presentation
の三つのEmbeddedFrameworkを追加しています。
UI周りのコードはPresentation
に全て書いているので、そのFramework内でPreviewを確認します。
PotentialCrashError: Update failed
では、早速PresentationのFramework内に試しに書いたPreviewを見てみましょう。
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
Text("Hello, World!")
}
}
読み込めない😭
エラーの詳細を見てみると・・・
どうやらCarthageで導入しているNukeが読み込めないがためにPreviewが表示されないようです。
しかしシミュレーターのビルドは通っているので、ちゃんとCarthageで導入したFrameworkの参照はうまくいってるはず🤔
解決法
色々と調べていると、PreviewからFrameworkの参照するためのパスの設定はBuild SettingのFramework Search Paths
ではなくRunpath Search Paths
から行われているようです。
そうと分かれば、以下の画像のようにRunpath Search Path
に、新たにFramework Search Paths
に入力されている$(PROJECT_DIR)/Carthage/Build/iOS
を追加してあげれば、Preview時にCarthageで導入したFrameworkも参照できるようになりそうです。
この状態でPreviewを確認すると・・・
ちゃんと表示された!😂
最後に
以上がEmbeddedFrameworkにCarthageで導入したFramework際にPreviewが表示されない場合の対処法でした。
この記事によって、誰かが私のようにこの問題を修正するために、EmbeddedFramework化を諦めそうになったり、休日の大事な時間を無駄にしたりしないことを祈ります🙏