これまでObjective-Cだけで作ってきたプロジェクトに、Swift製のフレームワークをimport&embedして実行すると、次のような実行時エラーが出てアボートすることがあります。
dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/A593E29F-12A5-4C42-A81E-E192AB7A99EB/foo.app/Frameworks/MySwiftFramework.framework/MySwiftClass
Reason: image not found
このエラーは、Swift製フレームワークからSwiftの標準ライブラリをdyld(3)
しようとしたものの、そういうファイルは無いからロードできなかったために発生しています。Swiftの標準ライブラリはアプリにバンドルされたものを使うので(将来は変わるかも)、アプリの設定によって、きちんとバンドルしてあげないといけないのです。
この場合、ターゲットのBuild Settingsにある[Build Options]-[Embeedded Content Contains Swift Code]が、きちんとYes
になっているかどうかをチェックします。そして、もしNo
になっていたらYes
に変更することで、解決するはずです。
きちんとYes
になっていれば、次図のようにアプリのバンドル内に一連のSwift用ライブラリも含まれ、無事に動くようになります。
この設定、Objective-Cとしてプロジェクトを作成した場合はデフォルトでOFFなので(当然と言えば当然ですが)、注意が必要です。