web-dev-qa-db-fra.com

Quelle est la cause de dyld`dyld_fatal_error, une api incompatible sur iOS?

Je déplace une partie de mes projets vers iOS 5/ARC. Un des projets les plus anciens (iOS 4.2, armv6 pour le support iPod Touch 2g) me donne:

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

Juste après l'image de lancement mais avant de passer à l'écran principal. Doit être une lib/code mis à jour pour iOS 5, mais lequel? Est-il possible d'utiliser une meilleure méthode que deviner ??

18
mamcx

A couru à ce problème moi-même essayant de reproduire ce projet en utilisant Xcode4.3.2 avec SDK iOS5.1. Le problème était que le modèle de projet standard sur Xcode4.3.2 configurait pour iOS5, qui présente certaines fonctionnalités que les versions antérieures d’IOS ne prennent pas en charge. Dans mon cas, le cadre GLKit était en cours d’installation et n’était pas pris en charge sur mon iPhone3G sous iOS4.2. L'erreur que je devenais était juste comme la tienne:

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

En examinant de plus près la sortie de la console, vous pouvez voir ce qui cause le blocage de l'application:

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) 

L'erreur signifiait que la structure GLKit n'était pas trouvée dans le résident iOS sur la cible où l'application était installée. La structure était en train d'être extraite de la construction sous Projet-> BuildPhases-> LinkBinaryWithLibraries.

Donc, pour corriger le problème, il fallait que je supprime le framework GLKit et tout le code y faisant référence. Ensuite, la construction a réussi et a été exécutée sur le périphérique cible. J'espère que cela t'aides!

25
grundyoso

Si vous allez dans Console Output vous verrez une erreur indiquant quel framework manque dans le périphérique et causant le problème (comme le disait grundyoso dans sa réponse).

Donc, pour résoudre ce problème, vous pouvez aller dans Général tab de la cible et ajouter le framework manquant dans la section Binaires incorporés .

Cela copiera le cadre dans l'application pour qu'il ne soit jamais oublié sur aucun appareil.

5
Roberto

J'ai le même problème avec Reachability.framework. Cela a bien fonctionné pour l'iPhone 5, mais si le même code est utilisé pour l'iPhone 7S Plus, il indique l'erreur.

La solution à ce problème est la suivante: 1. Allez dans Général -> Binaires incorporés. 2. Ajoutez le même framework (dans mon cas, Reachability.framework) 3. Ajoutez ensuite libc ++. Tbd dans les cadres et les bibliothèques liés.

J'espère que cela fonctionne pour vous.

2
Virendra Kumar

J'avais le même problème et cela se produisait lorsque j'utilisais l'application sur mon iPhone 6s, et cela fonctionnait auparavant.

Il suffit d'aller à Produit -> Nettoyer et relancez-le ...

J'espère que ça aide.

2
Surafel Tensai

J'ai eu le même problème avec mon xCode 4.3 (basé sur cocos3d) projet lorsque j'ai testé sur un iPhone 3GS avec iOS 4.2.

Accédez aux paramètres de votre projet et mettez à jour:
Cible (s) | Résumé | Cadres et bibliothèques liés | GLKit.framework to Facultatif
(plutôt que Required ) puis testez à nouveau.

Après ce changement, tout semble bien se tenir pour moi maintenant.

Bonne chance!

1
Logicopolis

Si vous utilisez Carthage, vous avez peut-être oublié d'ajouter un cadre à "Copier les cadres". Allez à Cible -> Phases de construction -> Copier les cadres -> Ajouter le cadre à la liste.

0
Ruud Visser