RORK LABEN
BUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要ですBUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要です
記事一覧/アプリ開発
アプリ開発/2026-06-28上級

Rork Max でバーコードとテキストを同時に読むスキャナを VisionKit で実装する

Rork Max のネイティブ Swift アプリに、バーコードとテキストをライブで読み取る画面を VisionKit の DataScanner で実装します。SwiftUI への組み込み、可用性判定、連続検出のスロットリング、実機検証までを実装コード付きで扱います。

Rork Max233VisionKitSwiftUI64DataScanneriOS109アプリ開発77

プレミアム記事

Rork Max が生成したネイティブ Swift のひな型に「商品バーコードを読む画面が欲しい」と書き足してもらったとき、ブラウザのライブシミュレータでは枠だけが表示されてカメラが立ち上がらず、しばらく原因を探していました。結論から書きますと、VisionKit の DataScannerViewController はシミュレータでは動作せず、対応端末の実機でしか起動しません。ちょうど Rork は 2026 年に入って Companion アプリ経由の実機テストやクラウド Mac でのコンパイルを整えてきていますが、この種の「カメラ実機依存」の機能こそ、最初から実機検証を前提に組む必要があります。

ここでは Rork Max のネイティブ Swift コードに、バーコードとテキストをライブで同時認識するスキャナ画面を組み込む手順を、SwiftUI への橋渡しと実機での確認まで含めて整理します。私自身、2014 年から個人でアプリを作ってきて、カメラ系機能はとりわけ「権限」と「端末差」でつまずきやすいと感じています。その勘所も合わせて書いておきます。

なぜ AVFoundation を手書きせず DataScanner を選ぶのか

iOS でカメラからコードを読む方法は大きく二つあります。AVCaptureSession を自分で組んで AVCaptureMetadataOutput でバーコードを拾う従来の方法と、iOS 16 で入った VisionKit の DataScannerViewController です。後者はカメラのプレビュー、被写体のハイライト表示、ピンチズーム、ガイダンス UI までを一体で提供してくれます。

観点AVFoundation 手書きVisionKit DataScanner
プレビュー描画自分で AVCaptureVideoPreviewLayer を配置標準で内蔵
テキスト認識Vision を別途組み合わせるバーコードと同一 API で同時取得
ハイライト表示自前で矩形を描画isHighlightingEnabled で標準描画
対応端末カメラがあれば広く動作A12 Bionic 以降のニューラルエンジン搭載機のみ
シミュレータ制限付きで動く場合あり非対応(実機必須)

商品コードとパッケージの型番テキストをまとめて読みたい、といった用途では DataScanner が圧倒的に短く書けます。一方で対応端末が限られる点とシミュレータで動かない点は、設計の最初から織り込む必要があります。私はこの種の機能では、コードを書き始める前に「非対応時に何を表示するか」を先に決めるようにしています。

Step 1: 権限の宣言とカメラ許可の要求

まず Info.plistNSCameraUsageDescription を入れます。Rork Max のプロジェクト設定からも編集できますが、用途が具体的に伝わる文言にしておくと、App Store 審査でのリジェクト理由を一つ減らせます。

<key>NSCameraUsageDescription</key>
<string>商品のバーコードや型番を読み取るためにカメラを使用します。</string>

許可の要求は画面表示の前に明示的に行います。DataScannerViewController.isAvailable はカメラ未許可だと false を返すため、許可ダイアログを出さないまま可用性だけ見ると「非対応端末」と誤判定してしまいます。これが最初のつまずきどころでした。

import AVFoundation
 
func requestCameraAccess() async -> Bool {
    switch AVCaptureDevice.authorizationStatus(for: .video) {
    case .authorized:
        return true
    case .notDetermined:
        // 初回はここでダイアログが出る。可用性判定より前に呼ぶのが肝心
        return await AVCaptureDevice.requestAccess(for: .video)
    case .denied, .restricted:
        return false
    @unknown default:
        return false
    }
}

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

この記事の続きを読む

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

この記事で得られること
シミュレータで動かず原因が分からなかったスキャナ機能を、可用性判定を入れて実機で確実に動く状態にできる
DataScannerViewController を SwiftUI に組み込む UIViewControllerRepresentable ラッパーと、同じコードが何度も発火する問題を抑える 1.5 秒スロットリングの実装を手に入れられる
バーコードとテキストを同時に認識する画面を、権限要求から結果表示まで一通り組み立てられる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-07-01
Rork Max のネイティブ Swift で SharePlay を組む — 二人の画面を同じ状態で動かす設計
GroupActivities を使い、FaceTime 越しに二人の画面を同じ状態で動かす SharePlay を Rork Max のネイティブ Swift で組む実装メモです。GroupActivity の宣言、GroupSession への参加、GroupSessionMessenger での状態同期、遅延と競合の扱い、そして React Native 側から橋渡しするときの境界設計まで、実際に詰まった点を添えてまとめます。
アプリ開発2026-07-01
Rork Max のネイティブ Swift で ShazamKit を使い、流れている曲を認識するアプリを作る
SHManagedSession を使って、周囲で流れている曲を認識するアプリを Rork Max のネイティブ Swift で組む実装メモです。旧来の AVAudioEngine 手回しとの違い、idle・prerecording・matching の状態設計、認識精度を上げる prerecording の使いどころ、Expo からの橋渡しの境界設計まで、実際にハマった点を添えてまとめます。
アプリ開発2026-07-03
Rork Max アプリで通信の切断と復帰に強くする — NWPathMonitor によるオフライン検知と再送設計
Rork Max のネイティブ Swift アプリで、電波が切れても壊れない通信設計を NWPathMonitor で組み立てます。オフラインの検知、Low Data Mode やモバイル回線の判定、復帰時の自動再送キューまで、動く Swift コードで示します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →