Библиотека симулятора Xcode12 CoreNFC не загружена
Наше приложение использует CoreNFC для сканирования тегов NFC или вы можете использовать QR, если NFC не поддерживается. Это сработало очень хорошо, и мы смогли запустить приложение в симуляторе для тестирования (пользовательского интерфейса).
До сборки Xcode12 / iOS14 GM. В iOS13 (или ниже) у нас не было бы проблем с запуском на симуляторе.
Но в Xcode12, запустив его на симуляторе iOS14 iPhone11, мы получим следующее:
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
То, что симулятор вылетает из строя, имеет для меня смысл, поскольку симулятор не может сканировать теги NFC, но вот что я сделал:
- Я уже связался с платформой CoreNFC и сделал ее необязательной, как описано здесь: Xcode 10, приложение Swift 4 с сбоями CoreNFC в обзоре на iOS 12
- Помещенный
#if canImport(CoreNFC)вокруг ,import CoreNFCи это основной NFC код. - Очистка папки сборки и удаление производных данных.
- Создал пустой проект Xcode12: https://github.com/basvankuijck/CoreNFCCrashProject, результат тот же.
- Удалены все перечисленные симуляторы и повторно добавлен один
- Добавлен
-weak_framework "CoreNFC"в настройку сборки Other Linker Flags
Очевидно, что удаление любых ссылок на платформу CoreNFC путем комментирования участков кода и удаления ссылки на платформу приводит к исчезновению сбоя. Но это неподходящий вариант.
Запуск его из Xcode12 на «устройстве» симулятора iOS13 работает отлично. Поэтому я не могу понять, что вызывает такое поведение
Ответы
Apple явно забыла добавить libnfshared.dylib по какой-то причине в окончательную версию Xcode 12 для симуляторов iOS 14. Рабочий обходной путь, пока Apple не исправит это, - скопировать недостающую библиотеку из Xcode 12 beta 6 (загрузите бета-версию из раздела загрузки для разработчиков Apple). Недостающую библиотеку можно найти здесь, и она должна находиться в том же каталоге для окончательного Xcode 12.
У меня это работает. 💯
Если вы хотите избежать хлопот с загрузкой бета-версии Xcode 12.2 11,25 ГБ для одного файла. У меня есть файл, которым я хочу поделиться.
Вы можете выполнить следующую команду, чтобы загрузить и поместить ее в пакет 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
Надеюсь, это поможет 😉
Apple явно забыла добавить libnfshared.dylibпо какой-либо причине в окончательную версию симуляторов Xcode 12 для iOS 14. Рабочий обходной путь, пока Apple не исправит это, - скопировать недостающую библиотеку из Xcode 12 beta 6 (загрузите бета-версию из раздела загрузки для разработчиков Apple). Недостающую библиотеку можно найти здесь, и она должна находиться в том же каталоге для окончательного Xcode 12:
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib
Компоновщик говорит, что файл libnfshared (mach-o) не включает двоичный файл для симулятора, что странно, потому что это основная структура Apple.
Создайте новый проект с Xcode 12 и импортируйте фреймворк NFC. Постройте его и запустите на симуляторе. Если не произойдет сбой, сравните настройки сборки специально для DYLD между этими проектами.
Если это не помогает, удалите все симуляторы и создайте новые.
Обновлено:
Это ошибка в iOS 14, и кто-то отправил радар: openradar.appspot.com/FB8699389
У меня была такая же проблема с моим приложением, хотя я не использовал платформу CoreNFC. это решается с помощью
Xcode-12.2 beta 2. Выпущена 29 сентября 2020 г.