dyld: библиотека не загружена: @rpath/CoreNFC.framework/CoreNFC, iOS11 и Xcode 9 beta
Я получаю эту ошибку и приложение вылетает при запуске CoreNFC sample
код в Xcode 9.0 бета 2
dyld: Library not loaded: @rpath/CoreNFC.framework/CoreNFC
Referenced from: /var/containers/Bundle/Application/2837709C-C852-4811-B696-38F2725554D4/iOS-11-by-Examples.app/iOS-11-by-Examples
Reason: image not found
Кто-нибудь знает как это исправить?
2 ответа
Я объединил некоторые ответы вместе, чтобы исправить это благодаря комментарию @Chinchan Zu
вот как пометить Core NFC как необязательный вопрос stackru
Сначала вы делаете импорт в NFCCore в "Связанных фреймворках и библиотеках" как необязательный, как на этом скриншоте
Затем внутри вашего кода вы оборачиваете свой код этой проверкой #if. Вот класс, который я использовал
#if canImport(CoreNFC)
import Foundation
import CoreNFC
#endif
class NFCManagar: NSObject {
#if canImport(CoreNFC)
var session: NFCNDEFReaderSession?
#endif
var items = [Item]()
var completion: ((_ success: Bool, _ error: Error?)-> Void)?
func beginScanning(items: [Item], completion: @escaping (_ success: Bool, _ error: Error?)-> Void) {
self.completion = completion
self.items.removeAll()
self.items.append(contentsOf: items)
#if canImport(CoreNFC)
session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
session?.alertMessage = "Hold your iPhone near check in/out device."
session?.begin()
#endif
}
}
#if canImport(CoreNFC)
extension NFCManagar: NFCNDEFReaderSessionDelegate {
// MARK: - NFCNDEFReaderSessionDelegate
/// - Tag: processingTagData
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
debugPrint("Nfc is detected")
}
/// - Tag: endScanning
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
// Check the invalidation reason from the returned error.
if let readerError = error as? NFCReaderError {
// Show an alert when the invalidation reason is not because of a success read
// during a single tag read mode, or user canceled a multi-tag read mode session
// from the UI or programmatically using the invalidate method call.
if (readerError.code != .readerSessionInvalidationErrorFirstNDEFTagRead)
&& (readerError.code != .readerSessionInvalidationErrorUserCanceled) {
debugPrint("Nfc didInvalidateWithError \(error)")
}
}
// A new session instance is required to read new tags.
self.session = nil
}
}
#endif
CoreNFC доступен только на устройствах iPhone 7 и iPhone 7 Plus. Убедитесь, что вы запускаете свой код на одном из них.
См. Сессию WWDC и соответствующую документацию для получения дополнительной информации.
Для Xcode 11 сделайте CoreNFC.framework "Не вставлять". А также оберните свой код с помощью #if check.