web-dev-qa-db-ja.com

フレームワークを含むiOSアプリがデバイスでクラッシュした、dyld:ライブラリがロードされていない、Xcode 6 Beta

このクラッシュはブロッキングの問題でした、基本的に私は問題を再現するために次のステップを使用しました:

  • Cocoa Touch Frameworkプロジェクトを作成する
  • Swiftファイルとクラスを追加する Dog
  • デバイス用の構築フレームワーク
  • Swiftでシングルビューアプリケーションを作成する
  • アプリプロジェクトにフレームワークをインポートする
  • ViewControllerのフレームワークからSwiftクラスをインスタンス化する
  • 端末でアプリをビルドして実行する

起動するとすぐにアプリがクラッシュしました。コンソールログは次のとおりです。

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

私はiOS 7.1と8.0のデバイスでビルドしようとしました、それらは両方とも同じクラッシュをしています。しかし、私はアプリをビルドしてシミュレータ上でうまく実行することができます。また、フレームワークを 必須 から オプション in ライブラリとのバイナリリンク に変更することもできますが、問題は完全には解決されませんでした。 Dog のインスタンスを作成するとクラッシュしました。動作はデバイスとシミュレータによって異なります。ベータ版のXcodeを使用してデバイス用のフレームワークを配布することはできないと思います。誰もがこれに光を当てることはできますか?

519
vladof81

ターゲットの General タブには、 Embedded Binaries というフィールドがあります。そこにフレームワークを追加するとクラッシュは解決します。

参照は ここ アップルデベロッパフォーラムにあります。

919
vladof81

IOSが8以上の場合

ターゲットの[General]タブの[Embedded Binaries]セクションにフレームワークを追加します。これにより、フレームワークがコンパイル済みにコピーされ、実行時にリンクできるようになります。

enter image description here

なんでこんなことが起こっているの? : リンクしているフレームワークは動的にリンクされたフレームワークとしてコンパイルされているため、実行時にリンクされます。

注: /カスタムフレームワークの埋め込みはiOS> 8でのみサポートされているため、古いバージョンのiOSで機能する代替ソリューションが続きます。

IOSが8未満の場合

あなたがこのフレームワークに影響を与えている(ソースコード/ビルドプロセスにアクセスできる)場合は、このフレームワークを動的リンクではなく静的リンクに変更することができます。これにより、実行時にリンクされるのではなく、コードがコンパイル済みのアプリケーションに含まれるようになり、フレームワークを埋め込む必要がなくなります。

使い方: フレームワークのBuild SettingタブのLinkingセクションで、 Mach-O Type をStatic Libraryに変更します。これで、フレームワークを埋め込みバイナリの下に含める必要がなくなります。

Static Framework

アセットを含める: イメージ、オーディオ、xib/nibファイルなどを含めるには、バンドル(基本的にはディレクトリ、詳細はこちらbit.ly/ios_bundle)を作成し、NSBundleを使用してバンドルからアセットを読み込むことをお勧めします。

242
Dawson

フレームワークをプロジェクトにドラッグするだけでは十分ではありません。それは同じ野球場にいるのですが、あなたの子供を見つけることができないということです。次の手順を実行します:

1)フレームワークを作成する

  • あなたのフレームワークを開発してください。
  • 開発が完了したら、COMMANDname __ + Bname__でフレームワークをビルドし、「Build Succeeded」と表示されることを確認します。

enter image description here

2)あなたのフレームワークにアクセスする

  • フレームワークプロジェクトが正常にビルドされると、プロジェクトのProductsname__フォルダーにアクセスできるようになります。

enter image description here

  • .frameworkを右クリックして「Show in Finder」を選択してください。

enter image description here

3)プロジェクトにフレームワークを配置する

  • Finderウィンドウからアプリケーションプロジェクトの "Framework"フォルダに.frameworkをドラッグアンドドロップします。

enter image description here

4)フレームワーク用にアプリプロジェクトを設定する

  • プロジェクトの最上位を選択

enter image description here

  • ターゲットを選択してください

enter image description here

  • "Build Phases"、そして "Link Binary to Libraries"に行き、あなたのフレームワークがオプションのselectedを含む)であることを確認してください。

enter image description here

  • それでも "Build Phases"の中で、左上に行き、+ボタンを選択してください。ドロップダウンで、[新しいファイルコピーフェーズ]を選択します。

enter image description here

  • 新しい "ファイルのコピー"セクションまでスクロールし、Destinationname__を "Frameworks"に設定したことを確認します。サブパスを空のままにします。次に、左下の+ボタンをクリックしてください。

enter image description here

  • あなたはあなたのプロジェクトの階層が表示されます。手順3でフレームワークを追加した "Frameworks"フォルダまでスクロールするか、上部の検索バーでそれを検索します。フレームワークを選択して[追加]をクリックしてください。

enter image description here

  • あなたのフレームワークが選択された "Code Sign On Copy"で含まれていることを確認してください。

enter image description here

5)きれいにしてからプロジェクトを実行してください

  • COMMANDname __ + SHIFTname __ + Kname__
  • COMMANDname __ + Rname__
91
Brandon A

まずCommand + Option + Shift + Kを押してからビルドしてみてください。

誰かがXcode 8でこのエラーに直面しているなら、あなたのフレームワークステータスをあなたのターゲットのGeneralタブの下でRequiredの代わりに Optional に変更してください。

enter image description here

46
Desert Rose

Swift3/Xcode 8.1を使用してフレームワークを作成し、それをObjective-C/Xcode 8.1プロジェクトで使用していました。この問題を解決するには、Always Embed Swift Standard Librariesの下のBuild Optionsオプションを有効にする必要がありました。

このスクリーンショットを見てください。

enter image description here

それが役立つことを願っています!

44
NeverHopeless

IOS 9.xバージョンでも同じような問題がありました

問題です:  以下のエラーでアプリを開くとすぐにアプリがクラッシュします。
dyld:ライブラリがロードされていません:/System/Library/Frameworks/UserNotifications.framework/UserNotifications 参照元:/var/containers/Bundle/Application/######/TestApp.app /TestApp 理由:画像が見つかりません

私はこの問題を解決するために、Linked Frameworks and LibrariesフレームワークのUserNotifications.frameworkRequiredOptionalに変更しました。

25
jfalexvijay

私は(ここで述べたことに加えて)Build Settingstab)の下のRunpath Search Pathに次の行を追加しなければなりませんでした。
@executable_path/Frameworks

enter image description here

25
Aviel Gross

実行時にフレームワークがアプリケーションバンドルに確実にコピーされるようにするには、フレームワークを新しいファイルのコピービルドフェーズに追加する必要があります。

「ファイルをコピーするビルドフェーズ」を自分のターゲットに追加する方法 詳細を参照してください。

公式Apple Docs: https://developer.Apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreaatingACopyFilesBuildPhase.html

24
liamnichols

組み込みバイナリにフレームワークを追加する enter image description here

それからきれいにし、造りなさい。

13
Vineesh TP

私の場合の解決策は、ワークスペース内のスタンドアロンプ​​ロジェクトである組み込みバイナリからコンパイル済みフレームワークを削除し、それをクリーンアップして再構築し、最後に組み込みバイナリに追加することでした。

9
Andrea Leganza

驚くべきことに、少なくともXcode 8に関して、必要な部分のすべてがここに文書化されているわけではありません。

私の場合は、同じワークスペースの一部としてカスタムビルドされたフレームワークでした。それは間違って造られていたことがわかります。このスレッドに対するjeremyhuの最後の返信に基づいて:

https://forums.developer.Apple.com/thread/4687

Framework)のDynamic Library Install Name Baseの下にDYLIB_INSTALL_NAME_BASEBuild Settings)を設定してから再構築する必要がありました。誤って$(LOCAL_LIBRARY_DIR)に設定され、@rpathに変更する必要がありました。

そのため、リンク処理段階では、ホストアプリケーションに実行時に_(App-to-App/Library/Frameworks/fw.Framework/fwではなく)/Frameworks/fw.Framework/fwファイルシステムのルートなど)から動的にロードするように指示していました。

他のすべての設定に関して:it _(doesBuild Phases内の3か所になければなりませんが、ホスティングアプリケーションのGeneralタブのEmbedded Binaries設定に追加すると、これらはすべて同時に設定されます。

私はnotを追加のCopy Filesフェーズを設定する必要がありました。これはとにかく埋め込み段階に関して直感的に冗長に思えます。ビルドトランスクリプトの末尾をチェックすることによって、それが不要であることを保証できます。

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[多くの冗長な行は削除されたが、Xcode UIの単純化された書き起こしから明らかである。]

私にはまだnoXcodeがDYLIB_INSTALL_NAME_BASEの値を間違って設定している理由があります。

7
BaseZen

サードパーティのフレームワークを使用していて、依存関係マネージャとしてCocoapodを使用している場合は、pod installを実行してポッドを更新してみてください。

このクラッシュは私が使用しているサードパーティのライブラリで発生していたので、上記の解決策がうまくいってくれて嬉しいです。

7

私の環境:Cocos2d 2.0、Box2d、Objective C

上記の他の答えをすることに加えて、私はついに一般タブに行き、WatchKit Optionalを作りました。

Target General Linked Frameworks and Libraries Watchkit.framework Optional

7
Jim Rota

enter image description here

[ビルドフェーズ] - > [埋め込みフレームワーク]で[インストール時にのみコピーする]の選択を解除することで解決しました。

5
Shohin

私は同じ問題を抱えていました。私はこれまで使ったことのないiPhoneで自分のプロジェクトを構築しようとしましたが、新しいフレームワークを追加しませんでした。私にとっては、クリーンアップはうまくいきました( Shift + Command + K )。たぶん、私はXcode 7のベータ5とiOS 9ベータのiPhone 6を使っていますが、うまくいったのでしょう。

5
henrik-dmg

開発ポッドを持っている場合ポッドからシミュレータインストールからあなたのアプリを削除します - >クリーン - >もう一度実行してください...

2
Rajesh Kumar

私の場合、私のプロジェクトはObjective-Cで書かれており、ライブラリにはSwiftファイルがあります。そこで私は "常に標準ライブラリを埋め込む" 私のプロジェクトの ビルド設定 タブを はい に変更し、それは全く問題なくなった。

2
User18474728

インターネット上で利用可能なすべての方法と私自身の試行錯誤を100回試した後。ついに私はそれを解決することができました。 - Apeksha Sahu 6分前
マックでiTunesに行く - >アカウント - >このコンピューターを認証する - Apeksha Sahu 5分前
第2ステップ.... iPadおよびiPhoneの設定で開発者に移動し、識別子を使用してインデックスを付け直し、すべてのコンピュータを信頼します。それは私のために働いた........ .......すべての証明書を更新した後、Xcodeの最新バージョンを再インストールするために、Mac OS seirra beta最新バージョンからMac OSHigh seria 10.13.15バージョンを再インストールした後。 etc etc etc ...あなたが私がしたと思うことができるのと同じくらい多くの方法。 - enter image description here

1
Apeksha Sahu

ビルド設定のフラグALWAYS_EMBED_Swift_STANDARD_LIBRARIES(以前のxcodeバージョンではEmbedded Content Contains Swift Code)をNOからYESに変更してみてください。

1
Vittal Pai

私が新しい Configuration and Build Schemeを作成したときも同じことが言えました。

だから私のための解決策は実行することでした

pod install

この新しく作成された設定に対して。

1
atereshkov

ランタイムエラーです

エラーLibrary not loaded with @rpath- [約] は、Xcodeがフレームワークを見つけられないことを示します。

  1. フレームワークがGeneral -> Embedded Binariesに追加されたかどうかを確認します

  2. @rpathBuild Settings -> Runpath Search Pathsに正しいパスが含まれているかどうかを確認します。

続きを読む こちら

0
yoAlex5
  1. Xcodeでファイルに移動 - >ワークスペース設定
  2. / Users/Apple/Library/Developer/Xcode/DerivedDataの横にある矢印をクリックします。
  3. 派生データを選択してゴミ箱に移動します。
  4. Xcodeをかなり上げて、もう一度開きます。
  5. プロジェクトをクリーンにして、もう一度実行してください。

上記の手順で問題が解決しました。

0
john raja