NFCReader
Scan and decode NFC tags on iOS
Features
- Scan NFC Tag (see below about supported tags)
 - Scan custom NFC tags
 
Supported Tags
- IC cards for transit in Japan
- Suica, Pasmo, Kitaca, ICOCA, TOICA、manaca、PiTaPa、nimoca、SUGOCA、はやかけん
 
 - IC cards for shopping in Japan
- nanaco
 - Edy
 - WAON
 
 
Requirements
- Xcode 11.x
 - Swift 5.1+
 - iOS 13.0+
 
Installation
You can install this framework with Swift Package Manager in Xcode 11.
Usage
Read histories
import NFCReader
let reader = Reader<Suica>() // `Nanaco`, `Edy` or `Waon`
reader.read(didBecomeActive: { _ in
	print("didBecomeActive")
}, didDetect: { reader, result in
	switch result {
	case .success(let suica):
		let balance = suica.boardingHistory.first?.balance ?? 0
		reader.setMessage("Your balance is ¥\(balance) .")
	case .failure(let error):
		reader.setMessage("something wrong")
	}
})You can see more details at  Sources/NFCReader/Tags:
Scan multiple tags
private let reader = Reader<FeliCa>
self.reader.read(didDetect: { reader, result in
    switch result {
    case .success(let tag):
        let balance: UInt
        switch tag {
        case .edy(let edy):
            print(edy)
        case .nanaco(let nanaco):
            print(nanaco)
        case .waon(let waon):
            print(waon)
        case .suica(let suica):
            print(suica)
        }
    case .failure(let error):
        print(error)
    }
})The reader can also read just specific tags. Please see Sources/NFCReader/Tags/FeliCa/FeliCa.swift.
Scan repeatedly
reader.read(didDetect: { reader, result in
	switch result {
	case .success(let suica):
		let balance = suica.boardingHistory.first?.balance ?? 0
		reader.setMessage("Your balance is ¥\(balance) .")
		reader.restartReading() // continue to scan
	case .failure(let error):
		reader.setMessage("something wrong")
		reader.restartReading()
	}
})Custom message
var configuration = ReaderConfiguration()
configuration.message.alert = "Hold your iPhone near the Suica."
let reader = Reader<Suica>(configuration: configuration)Read custom tag
Please see ./Sources/NFCReader/Tags/FeliCa/nanaco/Nanaco.swift.
ToDo
- Decode entrance and exit histories of Suica. (service code: 108F)
 - Decode SF entrance histories of Suica. (service code: 10CB)
 - Support more NFC tags.
 
Contributing
- Fork it!
 - Create your feature branch: 
git checkout -b my-new-feature - Commit your changes: 
git commit -am 'Add some feature' - Push to the branch: 
git push origin my-new-feature - Submit a pull request :D
 
Support this project
Donating to help me continue working on this project.
License
Suica is released under the MIT license. See LICENSE for details.
Author
Tatsuya Tanaka