Swiftpack.co - Package - tattn/NFCReader

NFCReader

Scan and decode NFC tags on iOS

Features

  • [x] Scan NFC Tag (see below about supported tags)
  • [x] 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

Swift Package Manager (Recommended)

You can install this framework with Swift Package Manager in Xcode 11.

Carthage

github "tattn/NFCReader"

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

let reader = Reader<FeliCa>
reader.read(didDetect: { reader, result in
    switch result {
    case .success(let tag):
        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 tags 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 tags

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

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Support this project

Donating to help me continue working on this project.

Donate

License

NFCReader is released under the MIT license. See LICENSE for details.

Author

Tatsuya Tanaka

Twitter GitHub

Github

link
Stars: 38
Help us keep the lights on

Dependencies

Used By

Total: 0

Releases

1.0.0 - Aug 25, 2019