ios Xcode12 CoreNFC模拟器库未加载

lc8prwob  于 2023-04-22  发布在  iOS
关注(0)|答案(5)|浏览(181)

我们的应用程序使用CoreNFC来扫描NFC标签,或者如果不支持NFC,您可以使用QR。这工作得很好,我们能够在模拟器中运行应用程序进行(ui)测试。
直到Xcode 12/iOS 14 GM构建。在iOS 13(或更低版本)中,我们在模拟器上运行它不会有任何问题。
但是在Xcode 12中,在iOS 14模拟器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框架的任何引用,可以使崩溃消失。但这不是一个合适的选择。
在iOS 13模拟器“设备”上从Xcode 12运行它工作得很好。所以我似乎无法找出导致这种行为的原因

wvyml7n5

wvyml7n51#

苹果显然忘记在最终版的Xcode12 for iOS14模拟器中添加libnfshared.dylib了。在苹果解决这个问题之前,一个可行的解决方案是从Xcode12beta6中复制丢失的lib(从苹果的开发者下载部分下载beta)。丢失的lib可以在这里找到,并且必须进入最终版Xcode12的相同目录
这对我很有效。
如果你想避免为一个文件下载11. 25 GB的Xcode 12. 2测试版的麻烦。我有这个文件要分享。
您可以执行以下命令下载并将其放置在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
hwamh0ep

hwamh0ep2#

Apple显然忘记在iOS 14模拟器的Xcode 12最终版本中添加libnfshared.dylib。在Apple解决这个问题之前,一个可行的解决方案是从Xcode 12 beta 6中复制缺失的lib(从Apple的开发者下载部分下载beta)。缺失的lib可以在这里找到,并且必须进入最终Xcode 12的同一目录:
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib

lstz6jyr

lstz6jyr3#

Linker说文件libnfshared(mach-o)不包含模拟器的二进制文件,这很奇怪,因为它是Apple核心框架。
使用Xcode 12创建一个新项目,导入NFC框架。构建它并在模拟器上运行它。如果它没有崩溃,然后比较这些项目之间专门针对DYLD的构建设置。
如果这没有帮助,请删除所有模拟器并重新创建新的模拟器。

更新时间:

这是iOS 14中的bug,有人提交了一个雷达:openradar.appspot.com/FB8699389

xtupzzrd

xtupzzrd4#

有点晚了,但可能对其他人有用...
场景:

  • 应用程序必须使用NFC(如果可用)
  • 还必须在NFC之前的设备上工作(即iPhone 6与iOS 12)
  • 为iOS 12构建
    一些“好用”的技术:
#if canImport(CoreNFC)

import CoreNFC
...

而不是旧的:

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

备注:

“canImport”在编译时工作,所以如果你想解决:

  • “dyld:库未加载:/System/Library/Frameworks/CoreNFC.framework/CoreNFC参考自:/var/...原因:找不到图像”* 消息

我们必须注意LINK部分。

链接部分:

  • Xcode12.5不允许在它的菜单中有“可选”链接
  • 我们必须转到“其他链接器标志”并添加:

-weak_framework核心NFC
两行
(in文本将是:OTHER_LDFLAGS = -weak_framework CoreNC-lstdc ++)

5cnsuln7

5cnsuln75#

我有同样的问题与我的应用程序,虽然我没有使用Corenfc框架.这得到解决与
Xcode-12.2 beta 2.发布于2020年9月29日

相关问题