iOS 13のCore NFC

技術書同人誌博覧会というイベントで出そうかなと思っているiOS 13本の下書きというかメモ書き的なもの。なお、NDAに配慮し、ベータ版iOSやXcodeのスクリーンキャプチャは使用せず、Appleによる公開資料の範囲で記述する。

おさらい:Core NFCの基本的な実装方法

NFCを介してNDEF(NFC Data Exchange Format)というデータフォーマットを読み取るには、`.entitlements`ファイルに次の項目を追加する。

<key>com.apple.developer.nfc.readersession.formats</key>
<array>
	<string>NDEF</string>
</array>

CoreNFCをimportして、

import CoreNFC

NFCNDEFReaderSessionというのを初期化して、beginでセッションを開始すると、

let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
session.begin()

例のハーフモーダルなNFCスキャン画面が立ち上がる。

ここで、次のようにNFCNDEFReaderSessionDelegateプロトコルに準拠した実装をしておけば、


extension ViewController: NFCNDEFReaderSessionDelegate {
   
   func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
       // do something
   }
   
   func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
       // do something
   }
}

NFCタグを読み取った際にNFCNDEFMessageオブジェクト(またはエラー)を受け取ることができる。

幻のNFCISO15693ReaderSession

iOS 11から`NFCISO15693ReaderSession`というクラスと`NFCReaderSessionDelegate`プロトコルは用意されていたが、`.entitlements`ファイルへの定義が存在しなかったため、実質的に利用不可だった。

iOS 12になってもこのクラスは使えないままだった。

〜iOS 12まで書き込み不可

また、書き込む機能も提供されていなかったので、読み取るためのNDEFデータをNFCタグに書き込むために、別途Android端末等が必要だった。

iOS 12になっても、書き込み機能は提供されず。

iOS 13での追加機能

iOS 13のCore NFCでは、多くのNFCタグを読めるようになった。

- ISO 7816
- ISO 14443
- ISO 15693
- FeliCa (= ISO 18092 ?)

(ちなみにiOS 11から存在はしていたが使えなかったクラスNFCISO15693ReaderSessionはdeprecatedになった)

またついに書き込み機能が提供されるようになった。

実装: Suica/PASMOを読む

ここから先は

2,005字 / 1画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/