Библиотека симулятора 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/xxx-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 работает отлично. Поэтому я не могу понять, что вызывает такое поведение


person basvk    schedule 16.09.2020    source источник


Ответы (5)


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

Надеюсь, это поможет ????

person Arif Fikri Abas    schedule 01.10.2020
comment
Спасибо, это избавляет от необходимости загружать Xcode: D - person Jeroen Bakker; 01.10.2020
comment
Кажется, разработчику Apple следует добавить для этого модульные тесты, чтобы избежать этого в будущем :) - person SuryaKantSharma; 12.10.2020
comment
Спас мой день.Спасибо @Arif - person KKRocks; 28.10.2020
comment
Отлично сработал для меня и спас мне день :) @arif - person Vishal Gupta; 19.03.2021

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

person Cyborg    schedule 22.09.2020

Компоновщик говорит, что файл libnfshared (mach-o) не включает двоичный файл для симулятора, что странно, потому что это основная структура Apple.

Создайте новый проект с Xcode 12 и импортируйте фреймворк NFC. Постройте его и запустите на симуляторе. Если не произойдет сбой, сравните настройки сборки специально для DYLD между этими проектами.

Если это не помогает, удалите все симуляторы и создайте новые.

Обновлено:

Это ошибка в iOS 14, и кто-то отправил радар: openradar.appspot.com/FB8699389

person Blazej SLEBODA    schedule 16.09.2020
comment
Спасибо за предложение, но, к сожалению, я получил тот же результат: github.com/basvankuijck/CoreNFCCrashProject - person basvk; 16.09.2020
comment
@basvk удалите все симуляторы и создайте их заново - person Blazej SLEBODA; 16.09.2020
comment
По-прежнему не повезло. Добавлен только iPhone 11 Pro iOS14: gist.github.com/basvankuijck/0ed92c98d825575460f42e50 - person basvk; 16.09.2020
comment
@basvk Мне удалось собрать ваш проект только на симуляторах iOS 12 и iOS 13. - person topLayoutGuide; 16.09.2020
comment
Симуляторы iOS11, iOS12 и iOS13 работают. Попытка запустить его на симуляторе iOS14 приводит к указанной выше ошибке. Я не делал ничего особенного с xcodeproject, просто создал новый и привязал его к фреймворку CoreNFC. - person basvk; 16.09.2020
comment
Похоже, это проблема Apple. @basvk Я думаю, вам следует подать радар. - person topLayoutGuide; 16.09.2020
comment
Да, я надеялся, что это как-то связано с моей установкой / конфигурацией. Затем идем дальше с планом Б (пытаемся связаться с Apple) - person basvk; 16.09.2020
comment
Держите нас в курсе, если вы получите отзыв или найдете обходной путь! - person lechuckcaptain; 16.09.2020
comment
Я сталкиваюсь с той же проблемой и воспроизводю, что он работает на 13.5, но вылетает на iOS14. Отправляется ли в Apple отчет об ошибке, если мы считаем, что это проблема со стороны Apple? - person whawhat; 18.09.2020
comment
Да, кто-то еще представил радар: openradar.appspot.com/FB8699389 - person basvk; 18.09.2020

Немного позже, но может быть полезно для других ...

сценарий:

  • Приложение должно использовать NFC (если доступно)
  • Должен работать также на устройствах с поддержкой pre-NFC (например, iPhone 6 с iOS12)
  • Сборка для iOS12

Техника, полезная в использовании:

#if canImport(CoreNFC)

import CoreNFC
...

вместо старого:

 @available(iOS 11.0, *) .. and similar..

Примечания:

canImport работает во время компиляции, поэтому, если вы хотите решить:

dyld: Библиотека не загружена: /System/Library/Frameworks/CoreNFC.framework/CoreNFC Ссылка из: / var / ... Причина: изображение не найдено сообщение

обращаем внимание на раздел ССЫЛКИ.

Раздел ссылок:

  • Xcode 12.5 не допускает дополнительных ссылок в своих меню
  • мы должны перейти к другим флагам компоновщика и добавить:

введите описание изображения здесь

-weak_framework CoreNFC

на 2 линии

(в тексте будет: OTHER_LDFLAGS = -weak_framework CoreNFC -lstdc ++)

person ingconti    schedule 05.05.2021

У меня была такая же проблема с моим приложением, хотя я не использовал платформу CoreNFC. это решается с помощью

Xcode-12.2 beta 2. Выпущена 29 сентября 2020 г.

person Arslan Asim    schedule 30.09.2020