CatHand Blog

アプリ開発やMac弄り

FailedToLaunchAppError で SwiftUI のプレビューが表示されない問題の解消法

SwiftUIのプレビューが表示されないことはよくありますが、原因が特定しづらいので困ります。今回は failed to launch... というエラーで表示されない問題が解決できたケースを紹介します。

環境:

エラーは以下です。

    FailedToLaunchAppError: Failed to launch app.bundle.id
    
    ==================================
    
    |  RemoteHumanReadableError: 操作を完了できませんでした。Transaction failed. Process failed to launch. (process launch failed)
    |  
    |  BSTransactionError (1):
    |  ==NSLocalizedFailureReason: Transaction failed. Process failed to launch. (process launch failed)
    |  ==error-description: Process failed to launch.
    |  ==transaction: <FBApplicationProcessLaunchTransaction: 0x600003b08460>
    |  ==precipitating-error: Error Domain=FBProcessExit Code=64 "The process failed to launch." UserInfo={NSLocalizedFailureReason=The process failed to launch., BSErrorCodeDescription=launch-failed, NSUnderlyingError=0x600000c4da70 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0x600000c4da10 {Error Domain=NSPOSIXErrorDomain Code=111 "Unknown error: 111" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}
    |  ==error-reason: process launch failed

いろいろ調べたところ、Excluded Architecturesの設定が怪しいようです。

これは、シミュレータ向けのApple Siliconバイナリがまだあまり出揃っていないころにビルドを通すために行った設定ですね。

www.cathand.app

Podfileの該当部分は↓。

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

この設定は今はほとんど必要ないので外してみます。

ですが、これを外してもapp側のExcluded Architecturesの設定が消えません。

使っているライブラリの中ではOpenCVが怪しそうです。podspecを確認するとEXCLUDED_ARCHSを設定しています。

github.com

OpenCVをcocoapodsで入れるのをやめて、以前作成したxcframeworkを参照するようにしてみます。

www.cathand.app

これによりExcluded Architecturesの設定が消え、プレビューが表示されるようになりました。

↑で作ったxcframeworkは少しバージョンが古いのですが、最新のものを使いたい場合は以下の方法でできるようです。

dev.classmethod.jp