react-native-status-keycard/ios/StatusKeycard.swift
2020-11-25 10:24:35 +01:00

62 lines
1.8 KiB
Swift

import Foundation
import Keycard
@objc(StatusKeycard)
class StatusKeycard: NSObject {
@available(iOS 13.0, *)
private(set) lazy var keycardController: KeycardController? = nil
@objc(multiply:withB:withResolver:withRejecter:)
func multiply(a: Float, b: Float, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
resolve(a*b)
}
@objc
func select() {
if #available(iOS 13.0, *) {
keycardController = KeycardController(onConnect: { [unowned self] channel in
do {
let cmdSet = KeycardCommandSet(cardChannel: channel)
let info = try ApplicationInfo(cmdSet.select().checkOK().data)
print(info)
self.keycardController?.stop(alertMessage: "Success")
} catch {
print("Error: \(error)")
self.keycardController?.stop(errorMessage: "Read error. Please try again.")
}
self.keycardController = nil
}, onFailure: { [unowned self] error in
print("Disconnected: \(error)")
self.keycardController = nil
})
keycardController?.start(alertMessage: "Hold your iPhone near a Status Keycard.")
} else {
print("Unavailable")
}
}
@objc
func hasKeycardSDK(_ resolve: RCTPromiseResolveBlock, rejecter _: RCTPromiseRejectBlock) -> Void {
if #available(iOS 13.0, *) {
resolve(true)
} else {
resolve(false)
}
}
@objc
func hasNFC(_ resolve: RCTPromiseResolveBlock, rejecter _: RCTPromiseRejectBlock) -> Void {
if #available(iOS 13.0, *) {
resolve(KeycardController.isAvailable)
} else {
resolve(false)
}
}
@objc
static func requiresMainQueueSetup() -> Bool {
return true
}
}