iOS 11 CoreNFC Как проверить, поддерживает ли устройство NFC?

Как определить, есть ли у iPhone возможность использовать чип NFC, предоставляемый базовой платформой NFC?

Я знаю, что сейчас он работает только на iPhone 7 и 7 плюс, но я не хочу жестко кодировать аппаратные строковые идентификаторы, так как не знаю, какие устройства появятся в будущем.

4 ответа

Решение

Вы можете использовать readingAvailable свойство класса:

if NFCNDEFReaderSession.readingAvailable {
    // Set up the NFC session
} else {
    // Provide fallback option
}

Обновление для iOS 12:

1) Если вы хотите запустить свое приложение только для iPhone 7 и более новых моделей, вы можете добавить требование NFC в Info.plist:

<key>UIRequiredDeviceCapabilities</key>
    <array>
        // ... your restrictions
        <string>nfc</string>
    </array>

С этим требованием только устройства с NFC смогут загружать наше приложение из App Store.

2) Для iPhone старше iPhone 7 и для поддержки iPad также необходимо проверить, Core NFC доступен, потому что он не включен для этих устройств. Вот почему вы должны связать Core NFC фреймворк с использованием Weak Linking:

Слабое связывание базовой инфраструктуры NFC

а затем проверьте Core NFC наличие в коде:

var isNFCAvailable: Bool {
    if NSClassFromString("NFCNDEFReaderSession") == nil { return false }
    return NFCNDEFReaderSession.readingAvailable
}

Если isNFCAvailableвозвращается true тогда вы можете использовать все API, предоставляемые Core NFC не беспокоясь о сбое вашего приложения.

Также проверьте устройства с iOS < 11.0 т.е. iPhone 5

import CoreNFC
.
.
// Check if NFC supported
if #available(iOS 11.0, *) {
   if NFCNDEFReaderSession.readingAvailable {
      // available  
   }
   else {
     // not
   }
} else {
  //iOS don't support
}

Можно проверить список устройств от Apple https://developer.apple.com/support/required-device-capabilities/ (он длинный, используйте: cmd-f + "nfc")

Другие вопросы по тегам