web-dev-qa-db-ja.com

iOSで互換性のないAPIであるdyld`dyld_fatal_errorの原因はどれですか?

プロジェクトの一部をiOS5/ARCに移行しています。最も古いプロジェクトの1つ(iOS 4.2、iPod Touch 2gをサポートするためのarmv6)は私に与えています:

dyld`dyld_fatal_error:
0x8feb1070:  int3   
0x8feb1071:  nop    

打ち上げ画像の直後、メインに行く前。 iOS 5にアップデートされたライブラリ/コードである必要がありますが、どれですか?推測よりも良い方法を使用することは可能ですか?

18
mamcx

自分で再現しようとしてこの問題に遭遇しました このプロジェクト SDKiOS5.1でXcode4.3.2を使用します。問題は、Xcode4.3.2の標準プロジェクトテンプレートがiOS5用に構成されていることでした。これには、以前のiOSバージョンではサポートされていない機能がいくつかあります。私の場合、GLKit Frameworkが引き込まれていて、iOS4.2を実行しているiPhone3Gではサポートされていませんでした。私が得ていたエラーはあなたと同じでした:

dyld`dyld_fatal_error:
0x2fe01080:  trap   
0x2fe01084:  mov    r0, r0

コンソール出力を詳しく調べると、アプリがクラッシュする原因がわかります。

dyld: Library not loaded: /System/Library/Frameworks/GLKit.framework/GLKit
Referenced from: /var/mobile/Applications/A60A53B1-F87D-467D-BB0B-82C603049202/HiJackInTheBox.app/HiJackInTheBox
  Reason: image not found
(lldb) 

このエラーは、アプリがインストールされているターゲットのiOS常駐でGLKitフレームワークが見つからなかったことを意味します。フレームワークは、Project-> BuildPhases-> LinkBinaryWithLibrariesの下のビルドに取り込まれていました。

したがって、問題を修正するには、GLKitフレームワークとそれを参照するすべてのコードを削除する必要がありました。その後、ビルドは成功し、ターゲットデバイスで実行されました。お役に立てれば!

25
grundyoso

コンソール出力に移動すると、デバイスに欠落しているフレームワークと問題の原因を示すエラーが表示されます(grundyosoが彼の回答で述べたように)。

したがって、これを修正するには、ターゲットのGeneralタブに移動し、不足しているフレームワークをEmbedded Binariesに追加します。 )セクション。

これにより、フレームワークがアプリにコピーされるため、どのデバイスでも見逃されることはありません。

5
Roberto

Reachability.frameworkにも同じ問題があります。 iPhone 5でも問題なく動作しましたが、iPhone 7S Plusでも同じコードを実行すると、エラーが表示されます。

この問題の解決策は次のとおりです。1。[一般]-> [埋め込みバイナリ]に移動します。 2.同じフレームワーク(私の場合はReachability.framework)を追加します。3。次に、リンクされたフレームワークとライブラリにlibc ++。tbdを追加します。

それがあなたのために働くことを願っています。

2
Virendra Kumar

同じ問題が発生しました。これは、iPhone 6sでアプリを実行していて、以前は機能していたときに発生します。

[製品]-> [クリーンアップ]に移動して、もう一度実行してください...

これがお役に立てば幸いです。

2
Surafel Tensai

IOS4.2を搭載したiPhone3GSでテストしたとき、xCode 4.3(cocos3dベース)プロジェクトでも同じ問題が発生しました。

プロジェクト設定に移動して更新します。
ターゲット(s)要約|リンクされたフレームワークとライブラリ| GLKit.frameworkからオプション
必須)ではなく、もう一度テストします。

この変更を行った後、今ではすべてがうまくまとめられているようです。

幸運を!

1
Logicopolis

Carthageを使用している場合は、「フレームワークのコピー」にフレームワークを追加するのを忘れている可能性があります。「ターゲット」->「ビルドフェーズ」->「フレームワークのコピー」->「フレームワークをリストに追加」に移動します。

0
Ruud Visser