お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2019-09-29

iOSの自作フレームワーク読み込み後のビルドでエラー

自作というよりは自社製っていう感じなんですが、お客さんのアプリにインストールしている際に発生したエラーです。

以下のエラーが出ました。

no matching architecture in universal wrapper

dyld: Library not loaded: @rpath/libswiftCore.dylib
  Referenced from: /Users/hoge/Library/Developer/CoreSimulator/Devices/977028FF-E9A8-4608-AF32-7436C0542091/
  data/Containers/Bundle/Application/9A7DA83A-9C33-404E-89ED-49D3715489F4/Dev.app/
  Frameworks/myFramework.framework/myFramework
  Reason: no suitable image found.  Did find:
    /Users/hoge/Library/Developer/CoreSimulator/Devices/977028FF-E9A8-4608-AF32-7436C0542091/data/Containers/Bundle/
        Application/9A7DA83A-9C33-404E-89ED-49D3715489F4/Dev.app/Frameworks/myFramework.framework/
        Frameworks/libswiftCore.dylib: 
        no matching architecture in universal wrapper

このエラーは、ユニバーサルフレームワークとしてビルドしたFrameworkをインストールする前は全く出ておらず、 対応を行った後に出るようになった上、universal wrapperという文言につられて、 x86_64i386arm系のバイナリは入っているのになぜ発生するのかと暫く頭を悩ませました。

結論からいうと、導入対象のプロジェクトがObjective-C製であり、このフレームワークはSwift製で、Swiftの動作に必要な標準ライブラリがロードされていない為でした。

Objective-C製のプロジェクトはデフォルトでこの様な状態らしく、以下設定を変更する必要がありました。

Always Embed Swift Standard Librariesを有効にする

Build Settings -> Build Options にあるAlway Embed Swift Standard Librariesを有効にします。

上記を有効にする事で無事ビルドと動作の確認が出来ました。

よかったらシェアしてください!