簡體   English   中英

Xcode12 CoreNFC 模擬器庫未加載

[英]Xcode12 CoreNFC simulator library not loaded

我們的應用程序使用 CoreNFC 來掃描 NFC 標簽,如果不支持 NFC,您可以使用 QR。 這工作得很好,我們能夠在模擬器中運行該應用程序以進行 (ui) 測試。
直到 Xcode12 / iOS14 GM 構建。 在 iOS13(或更低版本)中,我們在模擬器上運行它不會有任何問題。

但是在 iOS14 模擬器 iPhone11 上運行它的 Xcode12 中,我們會得到以下結果:

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 框架的任何引用,會使崩潰消失。 但這不是一個合適的選擇。

在 iOS13 模擬器“設備”上從 Xcode12 運行它可以完美運行。 所以我似乎無法弄清楚是什么導致了這種行為

無論出於何種原因,Apple 顯然忘記在 iOS 14 模擬器的 Xcode 12 最終版本中添加 libnfshared.dylib。 在 Apple 修復此問題之前,一個可行的解決方法是從 Xcode 12 beta 6 復制丟失的 lib(從 Apple 的開發人員下載部分下載 beta)。 可以在此處找到丟失的庫,並且必須進入最終 Xcode 12 的同一目錄

這對我有用。 💯

如果您想避免為單個文件下載 11.25GB Xcode 12.2 beta 的麻煩。 我有文件要分享。

您可以執行以下命令下載並將其放入 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 顯然忘記在 iOS 14 模擬器的 Xcode 12 最終版本中添加libnfshared.dylib 在 Apple 修復此問題之前,一個可行的解決方法是從 Xcode 12 beta 6 復制丟失的 lib(從 Apple 的開發人員下載部分下載 beta)。 丟失的庫可以在這里找到,並且必須進入最終 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

稍后介紹,但可能對其他人有用......

設想:

  • 應用程序必須使用 NFC(如果可用)
  • 也必須在 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/...原因:找不到圖像”消息

我們要注意LINK部分。

鏈接部分:

  • Xcode 12.5 不允許在其菜單中使用“可選”鏈接
  • 我們必須轉到“其他鏈接器標志”並添加:

在此處輸入圖片說明

-weak_framework CoreNFC

在 2 行

(文本將是: OTHER_LDFLAGS = -weak_framework CoreNFC -lstdc++ )

我的應用程序遇到了同樣的問題,盡管我沒有使用 CoreNFC 框架。 這得到解決

Xcode-12.2 beta 2. 2020 年 9 月 29 日發布

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM