Bibliothèque de simulateur Xcode12 CoreNFC non chargée

Sep 16 2020

Notre application utilise CoreNFC pour scanner les balises NFC ou vous pouvez utiliser QR si NFC n'est pas pris en charge. Cela a plutôt bien fonctionné et nous avons pu exécuter l'application dans le simulateur à des fins de test (ui).
Jusqu'à la construction de Xcode12 / iOS14 GM. Dans iOS13 (ou inférieur), nous n'aurions aucun problème à l'exécuter sur un simulateur.

Mais dans Xcode12 en l'exécutant sur un simulateur iOS14 iPhone11, nous obtiendrions ce qui suit:

dyld: launch, loading dependent libraries
DYLD_SHARED_CACHE_DIR=/Users/xxx/Library/Developer/CoreSimulator/Caches/dyld/19G73/com.apple.CoreSimulator.SimRuntime.iOS-14-0.18A372
DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot
DYLD_LIBRARY_PATH=/Users/xxx/Library/Developer/Xcode/DerivedData/BeeSafe-awnlestrbvesqqbynrhmluzhbcsc/Build/Products/Debug-iphonesimulator:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libBacktraceRecording.dylib:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSi
dyld: Library not loaded: /usr/lib/libnfshared.dylib
  Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/CoreNFC.framework/CoreNFC
  Reason: no suitable image found.  Did find:
    /usr/lib/libnfshared.dylib: mach-o, but not built for platform iOS-sim

Que le simulateur se bloque a du sens pour moi, car le simulateur ne peut pas scanner les tags NFC, mais c'est ce que j'ai fait:

  • J'ai déjà lié au framework CoreNFC et l'ai rendu facultatif, comme décrit ici: Xcode 10, l'application Swift 4 avec CoreNFC plante en revue sur iOS 12
  • Mettez #if canImport(CoreNFC)autour import CoreNFCet c'est le code NFC sous-jacent.
  • Nettoyage du dossier de construction et suppression des données dérivées.
  • Création d'un projet Xcode12 vide: https://github.com/basvankuijck/CoreNFCCrashProject, même résultat.
  • Suppression de tous les simulateurs répertoriés et ré-ajout d'un
  • Ajouté -weak_framework "CoreNFC"au paramètre de construction Other Linker Flags

Évidemment, la suppression de toute référence au framework CoreNFC en commentant les sections de code et en supprimant le lien du framework fait disparaître le crash. Mais ce n'est pas une option appropriée.

L'exécuter à partir de Xcode12 sur un `` appareil '' de simulateur iOS13 fonctionne parfaitement. Donc je n'arrive pas à comprendre ce qui cause ce comportement

Réponses

40 ArifFikriAbas Oct 01 2020 at 13:09

Apple a évidemment oublié d'ajouter libnfshared.dylib pour une raison quelconque dans la version finale de Xcode 12 pour les simulateurs iOS 14. Une solution de contournement jusqu'à ce qu'Apple corrige cela consiste à copier la bibliothèque manquante de Xcode 12 beta 6 (téléchargez la version bêta à partir de la section de téléchargement des développeurs d'Apple). La bibliothèque manquante peut être trouvée ici et doit aller dans le même répertoire pour le Xcode 12 final

Cela fonctionne pour moi. 💯

Si vous voulez éviter les tracas liés au téléchargement de 11,25 Go Xcode 12.2 beta pour un seul fichier. J'ai le fichier à partager.

Vous pouvez exécuter la commande suivante pour le télécharger et le placer dans le package Xcode:

sudo curl https://storage.googleapis.com/mobile-simulator-build/libnfshared.dylib -o /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libnfshared.dylib

J'espère que ça aide 😉

25 Cyborg Sep 22 2020 at 16:37

Apple a évidemment oublié d'ajouter libnfshared.dylibpour une raison quelconque dans la version finale de Xcode 12 pour les simulateurs iOS 14. Une solution de contournement jusqu'à ce qu'Apple corrige cela consiste à copier la bibliothèque manquante de Xcode 12 beta 6 (téléchargez la version bêta à partir de la section de téléchargement des développeurs d'Apple). La bibliothèque manquante peut être trouvée ici et doit aller dans le même répertoire pour le Xcode 12 final:

Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib

9 BlazejSLEBODA Sep 16 2020 at 16:28

Linker dit que le fichier libnfshared (mach-o) n'inclut pas le binaire d'un simulateur, ce qui est étrange car il s'agit du framework de base Apple.

Créez un nouveau projet avec Xcode 12 et importez le framework NFC. Construisez-le et exécutez-le sur un simulateur. S'il ne plante pas, comparez les paramètres de construction spécialement pour DYLD entre ces projets.

Si cela ne résout pas le problème, supprimez tous les simulateurs et recréez-en de nouveaux.

Mis à jour:

C'est un bug dans IOS 14 et quelqu'un a soumis un radar: openradar.appspot.com/FB8699389

1 ArslanAsim Sep 30 2020 at 17:36

J'avais le même problème avec mon application, même si je n'utilisais pas le framework CoreNFC. ceci est résolu avec

Xcode-12.2 beta 2. Sortie le 29 septembre 2020