web-dev-qa-db-ja.com

OS Xフレームワークライブラリがロードされていません:「画像が見つかりません」

私は基本的なOS Xフレームワークを作成しようとしています、今私はテストフレームワークを作成しました:TestMacFramework.frameworkそしてそれを真新しいOS Xアプリケーションプロジェクトにインポートしようとしています。

.frameworkファイルをビルドして新しいプロジェクトにインポートしました。フレームワークはリンクしているように見えます。フレームワークビルドフェーズのセクションに追加したパブリックヘッダーファイルを参照できます。

ただし、コンテナアプリケーションを実行しようとすると、次のエラーが発生します。

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

ちょっとゴーグルした後、私はコンテナアプリケーションのビルドフェーズにCopy Filesセクションを追加する必要があることに気づいたので、これを行い、そのように設定しました...

enter image description here

しかし、まだランタイムエラーが発生しています。私は明らかにここで何か間違ったことをしていますが、このためのアップルの開発者ライブラリリソースはXcode 2を参照しているので、あまり役に立ちません!

何を逃しましたか?

更新:

TestMacFramework.frameworkが.app contents/frameworksディレクトリにコピーされているが、HDのLibrary/Frameworksディレクトリにはインストールされていないことがビルドログで確認できます。

enter image description here

更新2:

手動でTestMacFramework.frameworkLibrary/Frameworksディレクトリにコピーした場合、ビルドは正しくリンクします

226
Sammio2

[Xcode 6 - > 7.3から]

(はい、まだXcode 10、iOSおよびmacOSで作業中)

やるべきことは、あなたのアプリターゲットのGeneralタブのEmbedded binariesセクションにフレームワークを追加することです。

Screenshot from Xcode

467
Kappe

それで私はそれをうまく動かすことができました、あなたが正しい指示を持っているとき、それは非常に簡単です。私が探していたのは、システムライブラリフォルダに書き込まれるのではなく、Appバンドルに含まれる「プライベート」フレームワークでした。

フレームワークの構築

  1. Cocoaフレームワークを作成するためのターゲットを追加する
  2. その中の「Build Settings」内で、「Installation Directory」を「@executable_path /../ Frameworks」に設定します。
  3. ライブラリを構築し、アーカイブまたは製品ディレクトリから.frameworkにアクセスします。

フレームワークを含む

  1. 作成した.frameworkファイルをXcodeプロジェクトにドラッグします。必ず 'Copy Files to Directory'をチェックしてください。
  2. 含まれているアプリケーションのターゲットに、新しい「ファイルのコピービルドフェーズ」を追加します。
  3. 'Destination'を 'Frameworks'に設定してください。
  4. 作成した.frameworkをドラッグします
52
Sammio2

それは私にとっては非常に簡単だった、私はちょうどアプリのターゲットの下で私の埋め込みバイナリに私のフレームワークを追加しました

18
Robin Delaporte

上記のオプションを含めることはできません。 Runpath Search Pathを指定して解決しました

これは ' ビルド設定 'タブにあります。 ' Linking 'セクションにあります。 ' Runpath Search Paths 'を$(inherited) @executable_path/Frameworksに変更してください。

13
Vincent

これらの問題のどれも私のためにこれを解決しませんでした。最後の問題はかなり簡単でした。それは私がこの問題を記録しそしてAppleバグ下で修正したそのかなり主要なXcodeバグ:29820370のように見えます。バグレポーターにバグを投げかける: https://bugreport.Apple.com/ そして私が可視化するために上げたバグを参照する。私はXcodeを以前の喜びに戻したいと思います - そしてこれは私がXcodeがそれ自身を直すべきだったと確信しているものです。

修正はここにあります:1. Open Keychain - Apple Worldwide Developer Certに行ってください。 2.それをダブルクリックします。3.システムのデフォルトを使用するように「常に信頼する」から許可レベルを変更します。4.保存して閉じます。5. Xcodeを再起動し、プロジェクトを消去してビルドします。

正しい設定の下のスクリーンショット: Keychain access fixed これが役立つことを願っています!

7
Mobile Bloke

私は同じ問題に遭遇しましたが、受け入れられた解決策は私のために働きませんでした。代わりに、解決策はフレームワークのインストール名を変更することでした。

元の投稿のエラーは次のとおりです。

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

ライブラリがロードされていない の後の最初のパスに注意してください。フレームワークは絶対パスからロードされています。このパスはフレームワークのインストール名(rpathとも呼ばれる)から来ています。

otool -D MyFramework.framework/MyFramework

フレームワークがアプリに埋め込まれている場合、このパスは相対パスで、次の形式になります。 @ rpath/MyFramework.framework/MyFramework フレームワークのインストール名が絶対パスの場合、実行時にロードされない可能性があり、上記のようなエラーが発生します。

解決策は、インストール名を変更することです。

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

この変更により、もうエラーにはなりません

6
Amos Joshua

派生データを削除して保存した

6

カスタムフレームワークをXcode 10.1の下のプロジェクトにドラッグすると、フレームワークはと想定されますシステムフレームワークを作成し、ターゲットの下の「ビルドフェーズ」の「ライブラリとバイナリをリンク」セクションにフレームワークを配置します。

システムフレームワークは既にデバイス上にあるため、デバイスにコピーされないため、実行時に実行できないため、KABOOM(__abort_with_payloadでクラッシュし、エラーを通知します:「理由:イメージがありません見つかりました」)。これは、フレームワークコードがデバイスにコピーされないためです...

実際には、Xcodeでカスタムフレームワークをリンクし、コードとともにiOSデバイス(実際またはシミュレーター)に確実にコピーするには、カスタムフレームワークを「バンドルリソースのコピー」に移動する必要があります。これにより、最終的にフレームワークがコード実行可能ファイルとともにパッケージ化され、デバイスで一緒に利用できるようになります。

カスタムフレームワークをプロジェクトに追加し、Appleクラッシュを回避するには:

  1. カスタムフレームワークをiOSプロジェクトファイルリストにドラッグします
  2. ナビゲータで「ProjectName」をクリックします-> TargetName->「Build Phases」-> Link Binary With Librariesの開閉トライアングル
  3. カスタムフレームワークを下の「バンドルリソースのコピー」セクションにドラッグアンドドロップします(Xcode nowmovesXcode 10で修正されたフレームワーク参照)
  4. シミュレーターまたはデバイスで実行する

したがって、カスタムフレームワークは、コードとともにターゲットデバイスにコピーされ、実行時に使用可能になります。

enter image description here

[社説:あなたはthinkと思うでしょう私は知らない、プロジェクトのルートディレクトリ階層で... ????]

4
William Cerniuk

'/ usr/local/bin/carthage copy-frameworks'と一緒に 'Build Phases'に 'Run Script'があるはずです。

その 'Run Script'の 'Input Files'に、あなたのライブラリへのパスを追加するべきです。このような:

Build Phases Run Script

3
thacilima

誤ってキーチェーンをリセットした場合は、キーチェーンにAppleの証明書がないために発生する可能性があります。私は問題を解決するために これ に従った。

私は同じ問題を抱えていて、WWDR(Apple Worldwide Developer Relations証明機関)を再ダウンロードすることによって修正することができました。ここからダウンロードします: http://developer.Apple.com/certificationauthority/AppleWWDRCA.cer

3
user1742302

Xcode 8では、古くなった製品の中には派生データフォルダから削除されるものもあります - この解決策 を参照してください。

アップル: macOS 10.12以降では、Xcodeは古い派生データ、プリコンパイル済みヘッダー、およびモジュールキャッシュをクリーンアップします。 (23282174)

Xcodeビルドシステムは、以前のビルドで作成されたが、その後プロジェクトから削除された、いくつかの種類のビルドアーティファクトの古いファイル削除をサポートします。

著者の考えに基づいて、私は私のケースからこのビルドログを見つけました。

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

新しいファイルコピーフェーズを作成し、ターゲットstale frameworkをFrameworks destinationにコピーすると、再構築後に上記の削除ログが消えます。

自分の状況と理由を明確にしてください。誰かに役立つことを願います。

1
Itachi

私にとってこれは解決策でした、何時間もの検索の後!

何らかの理由で、Swift 2.3のカスタムフレームワークの開発にうまくいって、Xcode 8はDYLIB_INSTALL_NAME_BASEファイルからproject.pbxproj設定を削除しました。 Build Settings / Dynamic Library Install Name Base設定を少し@rpathに戻して修正しました。

https://forums.developer.Apple.com/thread/4687 から)

1
encaps

私は多くの修正を試みましたが、私にとってうまくいったのはビルドスキームのビルドタブにリストされている足りないターゲットを削除することでした。現在のスキームの編集ウィンドウを開くことでそれに到達することができます。

編集:私のUIテストの目標はうまく機能していなかった、そして私が見つけた解決策はそれを削除してそれを再び生成することだった。

0
Gonzalo

私は別の理由で同じ問題を抱えていました。私はDebug and Releaseに新しい設定を作成しました(PROJECT - > Infoタブ - > Configurationの下)。そして私はそれを機能させるために私のポッドフレームワークのシェルスクリプト(Targets Support Filesの下のPods- "appName" -frameworks.sh)を変更しなければならなかった。

[Xcode 9]

0
Yuval

Xcode 11 thを使用している場合、フレームワーク、ライブラリ、およびターゲット設定-埋め込みのコンテンツの埋め込みにフレームワークが追加されていることを確認してください。埋め込みステータスを「埋め込み不可」から「埋め込みと署名」に変更します

0
Sachin Nautiyal

これはさまざまな理由で発生する可能性があるため、この問題を解決するための固定された方法はないと思います。私も先週この問題を抱えていました。Xcodeを使ってシミュレータで実行したり電話にインストールしようとしたりしたときにだけ、いつ、そして何がこの問題を引き起こしているのかわかりません。端末でreact-native run-iosで実行しても問題ありません。

証明書の更新、Xcodeでの設定変更(上記のすべての方法)など、インターネットに掲載されているすべての方法を確認しました。実際には、Xcodeのすべての設定は以前の要求どおりに設定されています。今朝、ポッドを削除して再インストールするまで、1週間後にエラーがようやく発生します。あなたもcocoapodを使用していて、それからエラーが特別な理由もなく現れただけだったら、多分あなたは私の方法を試すことができます。

  1. 私のcocoapodsのバージョンを確認してください。
  2. 利用可能な新しいバージョンがある場合はそれを更新してください。
  3. プロジェクトフォルダに移動し、Podfile.lock、Podsファイル、project xcworkspaceを削除します。
  4. ポッドインストールを実行する
0
Jack

私は、この問題はコードの署名と証明書のみに関連しており、コード自体には関連していないことがわかりました。これを確認するには、基本的なシングルビューアプリを作成し、デバイスを変更せずに実行してみます。同じエラータイプが表示される場合、これはコードが問題ないことを示しています。私のようにあなたはあなたの証明書が無効であることに気付くでしょう。もう一度ダウンロードして、期限切れのものを修正してください。その後、エラーが報告されないように基本的なアプリが表示されたら、Xcodeを終了してMacを再起動してからもう一度試してください。それがついにこの悪夢を終わらせました。実行しようとしたときにBuild Successfulメッセージが表示される場合は特に、これはコードとは無関係です。ちなみに

0
iOS4Fun

私のために解決したのは、私のPodfileのメインターゲットのためにabstract_targettargetに変更することでした。私は以前にそれをabstract_targetに設定していました、そして、これは記述されたエラーを引き起こしました。今では魅力のように機能します

0
Francesco D.M.

Xcode 9ベータ版を試してXcode 8に戻ったときに問題が発生しました。ターゲット上の単純なクリーンで問題が解決しました。

0
Xavier

xcodeを開く - >一般 - >組み込みバイナリ - > QBImagepicker.frameworkとRSKImageCropperの追加 - >プロジェクトのクリーン

埋め込みバイナリにQBImagePicker.frameworkとRSKImageCropper.frameworkを追加するだけで動作します

0
Agustiar

私のために働いた唯一のこと:

[ターゲット]> [ビルドフェーズ]> [CP] Podsフレームワークの埋め込み[ビルドログに環境変数を表示する]および[インストール時にのみスクリプトを実行する]のチェックを外します。

0
Neil