2013-03-02 5 views
5

RMSharedPreferencesフレームワークを使用するMacアプリを作成しました。アプリを開くとすぐにクラッシュし、次のエラーが表示されます。エラーアプリケーションを起動するときに「ライブラリが読み込まれません」

Dyld Error Message: 
    Library not loaded: @rpath/RMSharedPreferences.framework/Versions/A/RMSharedPreferences 
    Referenced from: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp 
    Reason: image not found 

フレームワークが見つからないようです。私はフレームワークをコピーする必要があり、Finderでアプリの内容をブラウズするときにコピーファイルフェーズをターゲットに追加しようとしましたが、正しくコピーされているようです。

このエラーの原因は何ですか?

EDIT:オプションの枠組みを設定すると、エラーなしでアプリケーションの起動を作るんしかしアプリケーションは完全には動作しません。 RMSharedPreferencesに関連するコールはすべて無視されます。

Copy framework. Contents of app.

答えて

10

アプリとフレームワークをバンドルしているので、あなたは、フレームワークのインストール場所を設定する必要があります。フレームワークのターゲットビルド設定の "インストール先"に設定することができます。あなたは、あなたのされていない(枠組みを再構築することができない場合には

@executable_path/../Frameworks/ 

をしかし:あなたはまた、あなたが使用することになり、あなたのフレームワークのための別のフォルダを使用することができ

@executable_path 

:のようなものを使用します

install_name_tool -id @executable_path/../Frameworks/<framework_name> <your_framework> 

Here you can find a reference for this.

:I)は、一般的に言って、あなたは、このような事前構築フレームワークのインストールパスを変更することができます

フレームワークを別のフレームワークにバンドルする場合は、@executable_pathの代わりに@loader_pathを使用できます。

+0

これはすばらしい答えです。インストール場所を '@executable_path /../ Frameworks 'に設定すると、この問題が解決されました。答えとアップルのドキュメントを参照していただきありがとうございます。 – simonbs

+0

うれしかったです! – sergio

4

@rpathは、より柔軟なキーワードであり、その使用が推奨されています。

これを行うより良い方法は、Xcodeで "Runpath Search Paths"ビルド設定を設定することです。

これにより、フレームワークを変更するためのビルドフェーズスクリプトを追加する必要がなくなります。あなたは、フレームワーク内からのフレームワークをロードしようとしている場合

は例えば、あなたの状況では、あなたは

@executable_path/../Frameworks 

または

@loader_path/../Frameworks 

に「実行パス検索パス」を設定することができます。

+1

ビルド設定のセッションをリンクするの下にある「ランパス検索パス」を意味しますか? – ingaham

+0

はい、申し訳ありません。ありがとう。 –

関連する問題