RORK LABEN
RORK MAX — Rork MaxがiPhone・iPad・Apple Watch・Apple TV・Vision Pro向けのネイティブSwiftアプリを生成できるようになりましたPUBLISH — Rork Maxは Xcode不要の「2クリックApp Store公開」に対応。申請・公開までの摩擦を大きく減らしますEXPO — 標準のRorkはReact Native(Expo)ベースで、プレーンな英語の説明からiOS/Androidネイティブアプリを生成しますPRICING — Rorkは無料で始められ、有料プランは月額$25から。個人開発で試しやすい価格帯ですFUNDING — Rorkがa16z(Andreessen Horowitz)から$2.8Mを調達。AIアプリビルダー領域への資金流入が続いていますREVIEW — 実運用では生成コードの可読性・保守性、Expo由来の制約、課金・プッシュ・広告SDKの組み込みやすさが評価の鍵になりますRORK MAX — Rork MaxがiPhone・iPad・Apple Watch・Apple TV・Vision Pro向けのネイティブSwiftアプリを生成できるようになりましたPUBLISH — Rork Maxは Xcode不要の「2クリックApp Store公開」に対応。申請・公開までの摩擦を大きく減らしますEXPO — 標準のRorkはReact Native(Expo)ベースで、プレーンな英語の説明からiOS/Androidネイティブアプリを生成しますPRICING — Rorkは無料で始められ、有料プランは月額$25から。個人開発で試しやすい価格帯ですFUNDING — Rorkがa16z(Andreessen Horowitz)から$2.8Mを調達。AIアプリビルダー領域への資金流入が続いていますREVIEW — 実運用では生成コードの可読性・保守性、Expo由来の制約、課金・プッシュ・広告SDKの組み込みやすさが評価の鍵になります
記事一覧/アプリ開発
アプリ開発/2026-06-15中級

Rork Max のアプリに Core NFC でタグ読み取りを足す実装メモ

Rork Max が生成した Swift アプリへ Core NFC を組み込み、NDEF タグの読み取りを実装する手順を、Entitlement・Info.plist 設定から本番での躓きどころまで実コードでまとめました。

Rork Max155Core NFCNFCNDEFSwift15

プレミアム記事

スタンプカードのアプリを作っていたとき、QR コードではなく物理的なタグにかざすだけで来店を記録したい、という相談を受けました。カメラを起動してコードを合わせる動作は、店頭の数秒では意外と煩わしい。NFC タグなら、かざすだけで終わります。

Rork Max は Swift アプリを生成してくれますが、Core NFC のように Apple の許可(Entitlement)が絡む機能は、生成コードだけでは動きません。署名まわりと plist の設定を手で整えないと、ビルドは通っても実機でセッションが即座に閉じます。ここでは私自身が個人開発で組み込んだ順序で、つまずいた箇所まで含めて書きます。

まず Entitlement と Info.plist を整える

コードより先に設定です。ここが抜けていると、後のコードがどれだけ正しくても動きません。必要なのは次の3点です。

  1. Apple Developer のアプリ ID で Near Field Communication Tag Reading の機能を有効化する。
  2. プロジェクトに .entitlements を追加し、com.apple.developer.nfc.readersession.formatsNDEF を入れる。
  3. Info.plist に NFCReaderUsageDescription を入れ、なぜ NFC を使うのかを日本語で書く。

3 番目の説明文は審査で見られます。「タグを読み取ります」だけだと曖昧で、リジェクトの種になります。私は「来店ポイントを記録するため、レジ横の NFC タグを読み取ります」のように、利用場面が分かる文面にしています。

<!-- App.entitlements -->
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
    <string>NDEF</string>
</array>

NDEF 読み取りセッションを書く

設定が済んだら、読み取り本体です。NFCNDEFReaderSession を持つ小さなリーダークラスを作り、Rork Max が生成した画面から呼び出せるようにします。

import CoreNFC
 
final class TagReader: NSObject, ObservableObject, NFCNDEFReaderSessionDelegate {
    @Published var lastPayload: String?
    private var session: NFCNDEFReaderSession?
 
    func begin() {
        guard NFCNDEFReaderSession.readingAvailable else {
            print("NFC not available on this device")
            return
        }
        session = NFCNDEFReaderSession(
            delegate: self,
            queue: nil,
            invalidateAfterFirstRead: true
        )
        session?.alertMessage = "タグをiPhoneの上部に近づけてください"
        session?.begin()
    }
 
    func readerSession(_ session: NFCNDEFReaderSession,
                       didDetectNDEFs messages: [NFCNDEFMessage]) {
        guard let record = messages.first?.records.first else { return }
        let text = decodeText(from: record) ?? "(empty)"
        DispatchQueue.main.async { self.lastPayload = text }
    }
 
    func readerSession(_ session: NFCNDEFReaderSession,
                       didInvalidateWithError error: Error) {
        // ユーザーキャンセルや読み取り失敗もここに来る
        print("session invalidated: \(error.localizedDescription)")
    }
}

invalidateAfterFirstRead: true にすると、1枚読んだ時点でセッションが閉じます。連続でタグを読みたい場合は false にして、自分で invalidate() を呼ぶ設計にします。スタンプカードのように一度に1枚なら true が素直です。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Entitlement と Info.plist の3つの必須設定を抜けなく入れるチェックリスト
NFCNDEFReaderSession を使った読み取りの完全な実コードとデリゲート実装
読み取り失敗・iPhone の機種差・バックグラウンド読み取りなど本番で詰まる点の対処
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-06-14
WidgetKit のタイムラインを更新予算と向き合って設計する — 壁紙アプリのウィジェットが止まった理由
ホーム画面ウィジェットが「夕方になると更新されなくなる」のはなぜか。WidgetKit のタイムライン設計を、更新予算・リロードポリシー・エントリ密度の3点から整理しました。TimelineProvider の実コード、予算を使い切らないエントリ設計、relevance による優先度づけまで、個人開発で6本の壁紙アプリを運用しながら詰めた知見を共有します。
アプリ開発2026-05-30
iOSの壁紙アプリでサムネイル一覧のカクつきを消す — ImageIOダウンサンプリングの実装メモ
大量のサムネイルを並べるとスクロールがカクつき、メモリも膨らむ。原因はメインスレッドでのフルサイズ画像デコードでした。ImageIOによるダウンサンプリングとプリフェッチで、実測でメモリを約80%削減した過程をまとめます。
アプリ開発2026-04-03
Rork アプリを TestFlight でベータテストする:内部テスターから外部公開まで全工程 — 実装パターン
Rorkで作ったアプリをTestFlightでベータ配布するための完全手順。App Store Connect設定からプロビジョニングプロファイル、内部・外部テスター管理、フィードバック収集まで、App Store公開前の必須ステップを丁寧に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →