6

コマンド ラインから iPhone アプリを実行するときにプロジェクトにフレームワークを追加するときに、いくつかの問題に直面します。私の最終的な目標は、自動化されたビルド プロセスからアプリケーション テストを実行することです。

xCode からアプリを実行すると:

「ファイルのコピー」ビルド フェーズをターゲットに追加すると、すべてうまくいきます。コピーは「絶対パス」として $(BUILT_PRODUCTS_DIR) に設定されます

端末から (iphonesim プロジェクトを使用して) アプリを実行すると、次のエラーが発生します。

 dyld: Library not loaded: @rpath/OCMock.framework/Versions/A/OCMock

 UIKitApplication:indemnisation[0xb894][26380]     Referenced from: /Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8/indemINT.app/indemINT

私が理解していないのは、コピー ビルド フェーズがフレームワーク ファイルをアプリと同じディレクトリにコピーするだけだということです。

コマンド ラインからアプリを実行すると、フレームワーク ファイルは既に同じディレクトリにあります。なぜそれがうまくいかないのか誰にも分かりますか?

また、次のディレクトリに OCMock.framework を追加しようとしました (成功しませんでした)。

 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library

 /Library/Frameworks

 /Users/Admin/Library/Application Support/iPhone Simulator/User/Applications/CD5729B5-A674-49B2-91F6-AD398094B6F8

前もってありがとう、ヴィンセント。

4

3 に答える 3

8

LionのXcode4.2(4D199)でもまったく同じエラーが発生しました。OCMock.frameworkフォルダーをプロジェクトにドラッグ/ドロップし、[ファイルのコピー]チェックボックスを選択しました。上記の回答を見て、フレームワークを所定の位置に移動するために「ファイルのコピー」ビルドフェーズを追加することを怠ったことに気付きました。ファイルのコンパイルフェーズの直後に1つ追加してドラッグし、テストを再実行しようとしました。「ファイルのコピー」フェーズで宛先を「製品ディレクトリ」に変更するまで、それを機能させることができませんでした。「Frameworks」または「SharedFrameworks」の使用は機能しませんでした。

于 2011-12-18T03:23:24.770 に答える
2

iPhone は、従来の Mac OS X フレームワークをサポートしていません。iPhone は「.framework」で終わるフォルダーを使用しますが、これらのフォルダーは一般的な Mac OS X フレームワークとは異なる構造になっています。最も顕著なのは、iPhone フレームワークは静的ライブラリの使用のみを許可されているのに対し、典型的な Mac OS X フレームワークは動的にロードされることです。メッセージが dyld からのものであるということは、共有ライブラリを使用していることを示しています。ただし、iPhone を対象とするアプリケーションは、静的にリンクすることしかできません。

于 2010-03-18T17:47:28.837 に答える
0

OCMock はフレームワークとして配布されており、iPhone では独自の任意のフレームワークを構築することはできません (RAM が 128MB しかなく、スワップがないデバイスでこれを行うのには十分な理由があります)。

Web の多くの場所で見られる解決策は、OCMock.framework を /Library/Frameworks または標準フレームワーク検索パスの他の場所に配置することです。これはあまり良い解決策ではありません。ビルド システムは、特定のマシンの状態に依存するようになりました。良くない。

別のオプションは、OCMock のソースを単体テスト ターゲットに追加することです。これは機能しますが、テストが iPhone で実行されることは決してないため不要です2。Mac OS X バイナリである iPhone シミュレーター用にビルドされた実行可能ファイルは、動的ライブラリーに問題なくリンクできます。これを有利に利用できます。

以下は、OCMock を iPhone プロジェクトで動作させるための最良の方法であると私が信じていることです。

まず、OCMock.framework をプロジェクトに追加します。アプリケーションではなく、単体テストのターゲットに追加されていることを確認してください。

次に、ユニット テスト ターゲットにファイルのコピー フェーズを追加します。次のように設定します。

宛先:絶対パス フルパス:$(BUILT_PRODUCTS_DIR)

次に、OCMock.framework を新しい Copy Files フェーズにドラッグして、コピーするファイルのリストに追加します。

最後に、「Copy OCMock」という名前に変更したファイルのコピー フェーズを、[ソースのコンパイル] フェーズと [バイナリをライブラリにリンク] フェーズの間にドラッグします。

それでおしまい!テストを実行 (および実行とはビルドを意味します) すると、すべてが正しく機能するはずです。

于 2012-02-24T06:10:28.033 に答える