iOS の家計簿アプリをつくる(交通系 IC カード読み取り編)

advent_calendar アドベントカレンダー

はじめに

こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 10 日目の記事です。

10 日目は交通系 IC カード読み取り処理を作成します。
私が使っているのは ICOCCA なので Core NFC を使って ICOCCA を読み取れるようにします(他のカードも同様にできるはず)。
完成形はこんな感じです。

1

ほぼこちらの記事を参考にしました。

iOSでSuicaの履歴を読み取る - Qiita
WWDC2019で発表されたように、iOS13からCoreNFCがFeliCaの読み書きに対応しました 🎉FeliCaといえばSuicaなどの交通系ICカードの履歴を読み取るのがお約束かと思うので…

権限追加

Core NFC を使うために権限を追加していきます。

TARGETS > Signing&Capabilities > + Capability から「Near Field Communication Tag Reading」を追加します。

2

TARGETS > Info に「Privacy - NFC Scan Usage Description」を追加します。

3

TARGETS > Info に「ISO18092 system codes for NFC Tag Reader Session」を追加し Array の 1 つ目に「0003」を追加します。

4

よくわかりませんが交通系 IC カードのシステムコードは「0003」らしいです。
FeliCa データ構造などについては下記記事参考。

[PASMO] FeliCa から情報を吸い出してみる - FeliCaの仕様編 [Android][Kotlin] - Qiita
ご指摘いただきありがとうございました。完全に「PASUMO」だと勘違いしてました。「PASMO」が正しいんですね。Suica/PASMO の券面に印字された情報が NFC の機能で取得できるのか…

読み取り処理

FeliCaSession.swift ファイルを作成し下記のように実装します。

注意しなければいけないのは下記のコードコメントの部分です。
履歴は 20 件読み取れるらしいのですが 1 度に 12 件までしか読み取れないので取得処理を 2 回にわける必要があります。

RegisterView の読み取りボタンの処理を下記のように修正すれば読み取りは完成です。

データ整形

交通系 IC カードから読み取った 16 byte のデータから下記内容を取得する必要があります。

  • 乗車日
  • 乗車駅
  • 降車駅
  • 金額

解析処理は下記を参考にしました。

iOSでSuicaの履歴を読み取る - Qiita
WWDC2019で発表されたように、iOS13からCoreNFCがFeliCaの読み書きに対応しました 🎉FeliCaといえばSuicaなどの交通系ICカードの履歴を読み取るのがお約束かと思うので…

FeliCaDataFormatter.swift ファイルを作成し下記のように実装します。

これで家計簿データに整形できましたがこのままだと乗車駅・降車駅が「001-230」などどの駅かわかりません。

駅名の取得

読み取った「001-230」というのは駅コードを表しているらしく下記サイトを参考に該当する駅を探します。

Yoiko - 自動改札機の研究: 駅コード

すべての駅に対応させるのはしんどいので自分がよく利用する駅のみ対応するようにします。
FeliCaStation.swift というファイルを作成し下記のように実装します。

FeliCaDataFormatter の駅の解析処理を下記のように修正します。

これで駅名表示もできるようになりました。

データの追加

あとは RegisterView に下記のようにデータ追加処理を書けば交通系 IC カードの読み取り処理は完成です。

おわりに

ICOCCA しか持っていないので他の交通系 IC カードでは試していませんがおそらく同じように読み取れるはずです。
あまり NFC などに詳しくないのですが検索すればやり方がでてくるのでいい時代になりましたね。

私は Sendable についてあまり理解していないので Swift 6 に対応したことを少し後悔し始めましたが頑張って続けていきます!
明日はレシート読み取り機能を作成予定です。

Amazon.co.jp:NFCカード NTAG215カード 白無地 ホワイトカード 10枚セット: パソコン・周辺機器
オンライン通販のAmazon公式サイトなら、NFCカード NTAG215カード 白無地 ホワイトカード 10枚セットをパソコン・周辺機器ストアで、いつでもお安く。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常送料無料。(一部商品を除く)

コメント

タイトルとURLをコピーしました