Open15

TRETNFCKit 再設計メモ

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

treastrain/TRETJapanNFCReader は、2019年の iOS 13 で行われた Core NFC の機能拡充をきっかけに開発された、Japan NFC Reader のコアとなる NFC を用いた通信部分を OSS 化して公開しているものである。

しかし、当時の私の技術力不足であったり、年数の経過からイケてない実装が随所に見られる。何度かリニューアルを試みているものの、どこかのタイミングで頓挫している。

今回はn回目の再設計に挑戦する。メモをこの Zenn のスクラップで公開していこうと思う。

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

名称を「TRETNFCKit」に改める。これは、今までアプリ名が「Japan NFC Reader」、ライブラリ名が「TRETJapanNFCReader」と意図的に寄せて命名していたのだが、やはり説明のときに少々不便だからだ。

自分の名前の接頭辞と「NFC」という略称がくっつくことで「TRETNFC」と大文字が続いてしまうが仕方がない。本当は自分の名前の接頭辞を「TR」にしたいが、これは ロイター通信 に先に取られてしまっている。

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

対応 OS

  • iOS 13.0+
  • macOS 10.15+
  • tvOS 13.0+
  • watchOS 6.0+

ただし、NFC の通信部分は iOS に限る。本当は nfcpy へのラッパーを PythonKit を使って書くことで macOS にも対応させたいが、めちゃくちゃ時間がかかってしまうだろう。

Swift のバージョン

Swift 5.7(Xcode 14)

対応するライブラリ管理ツール

  • Swift Package Manager
  • CocoaPods(優先度 低)

TRETJapanNFCReader では Carthage のことも考えて作っていたが、今回は対応しない(優先度 最低)。

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

フェーズ1

フェーズ1では、既存のファイルたちを一旦全て無効化し、新しい TRETNFCKit としての Swift Package 化する。その後、NFC を使うための最小限の構成のみを行う。

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

フェーズ3

フェーズ3では、NFCReader<NativeTag> を用いて ISO 7816 向け、MIFARE 向け、ISO 15693 向けの Reader を作成する。

treastrain / Tanaka Ryogatreastrain / Tanaka Ryoga

フェーズ5

フェーズ5では、SwiftUI から用いられる際に使用を推奨するための ViewModifier を追加する。

  • NFCReader<NDEFMessage> 向けの SwiftUI.ViewModifier
  • NFCReader<NDEFTag> 向けの SwiftUI.ViewModifier
  • NFCReader<NativeTag> 向けの SwiftUI.ViewModifier
  • FeliCaTagReader 向けの SwiftUI.ViewModifier
  • ISO7816TagReader 向けの SwiftUI.ViewModifier
  • ISO15693TagReader 向けの SwiftUI.ViewModifier
  • MiFareTagReader 向けの SwiftUI.ViewModifier