Library not loaded: @rpath
2017-01-17
OCプロジェクトからSwiftのframeworkを呼び出そうとするとエラーになる。
dyld: Library not loaded: @rpath/LampFrame.framework/LampFrame
Referenced from: /Users/lamplight02/Library/Developer/CoreSimulator/Devices/595F3047-43B1-4C37-B346-7F836665BE39/data/Containers/Bundle/Application/14CE5C50-9ED6-4216-B9AE-14792BF89595/LampFrameProject-Objective-C.app/LampFrameProject-Objective-C
Reason: image not found
(lldb)
試したこと
・Linked Frameworks and Libraries に該当のライブラリが設定されているか確認
・Build Phases > Copy Files に該当のライブラリが設定されているか
・Build Settings > Linking > Runpath Search Paths に @loader_path/../Frameworks/ と記述
考えられる原因
このエラーは、Swift製フレームワークからSwiftの標準ライブラリをdyld(3)しようとしたものの、そういうファイルは無いからロードできなかったために発生しています。Swiftの標準ライブラリはアプリにバンドルされたものを使うので(将来は変わるかも)、アプリの設定によって、きちんとバンドルしてあげないといけないのです。
解決策を試す
この場合、ターゲットのBuild Settingsにある[Build Options]-[Embeedded Content Contains Swift Code]が、きちんとYesになっているかどうかをチェックします。そして、もしNoになっていたらYesに変更することで、解決するはずです。
Embeedded Content Contains Swift Codeがない
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESならあったのでそれをYESにしたけど動かない
xcode build settingsの項目を追加できないか
どうやら、追加できるかもしれない
Build Settings にステージング環境を追加
Build Settings にステージング環境を追加
Project Navigator の最上部にあるプロジェクトファイルを選択
「PROJECT」ファイルのアイコンを選択し、「Info」のタブを選択
「Configuration」内の + ボタンを押下し任意の名前で追加。この例では「Staging」として追加
動かない
詰まった
よく調べるに、遅くパスの問題ではないだろうか。多分、Objectib-Cのプロジェクトでは、OS組み込みのフレームワーク(/System/Library/Frameworks)以外のところにあるフレームワークは検索パスを設定しないといけないらしい。/System/Library/FrameworksにLampframeをドラッグしようとしたら出来なかった
Framework Search Pathsを指定
/Library/Framewerks
だめ
Libraryをプロジェクトネームにしてみる
/ObjectibCFrame.app/Frameworks $(PROJECT_DIR)
だめ
Run Search Paths を設定
$(inherited) @executable_path/Products
だめ
LIBRARY SEARCH PATHSを設定する
$SRCROOT
//絶対パス→相対パスに変更
だめ
$(SRCROOT)/Classes/
だめ
Deployment Targetを合わせる
hogehoge.frameworkのBuild SettingsのOS X Deployment Targetを現在のMacのOSバージョンに合わせれば治るらしい
http://blog.dalt.me/137
だめ
次やること
~/.bash_profile にコードを書けばいけるらしい