◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/ビジネス
⟐ ビジネス/2026-04-28上級

Rork Max で SwiftUI ネイティブアプリを収益化する — App Store 審査攻略からサブスクリプション設計まで

Rork Max が生成した SwiftUI コードを App Store 審査に通し、StoreKit 2 でサブスクリプション課金を組み込むまでの工程を、動くコードと審査で確認される項目つきで整理します。

rork-max41swiftui11app-store15monetization11subscription10storekitios12native-app3revenue4

✦ プレミアム記事

Rork Max が SwiftUI のコードを書いてくれる時代になっても、App Store に出して課金してもらうまでの壁は、画面を作る作業とは別の場所にあります。

先日、生成されたプロジェクトを実機に入れて購入ボタンを押したところ、サンドボックスの購入は通るのに、アプリを再起動すると有料状態が消えていました。購入した事実を端末の中で「いまの権利」として読み直す処理が、どこにも書かれていなかったのです。

見た目の完成度と、課金して使い続けられる状態は別物でした。この差を埋める作業を、審査・課金実装・価格・導線・継続の順にお伝えします。

生成物は「よくできた下書き」として扱い、審査と課金の部分だけは自分の目で読み直します。 これが、私がいまの線引きにしている原則です。

生成コードを審査前に点検する観点

Rork Max の出力は UI の骨格として十分に使えます。一方で、リリース前提で書かれていない部分が出やすいところは、毎回ほぼ同じです。

観点生成コードで起きやすいこと確認の仕方
アクセシビリティaccessibilityLabel がほとんど付かないVoiceOver で主要画面を一周する
エラー処理失敗時に何も表示されない機内モードで購入・読み込みを試す
課金処理購入後の権利の読み直しが無い、または旧 API購入後にアプリを終了し、再起動して確認する
権限要求起動時にまとめて要求する初回起動で許可ダイアログが出る回数を数える
iPad 対応iPhone 前提の固定レイアウトiPad のシミュレータで主要画面を開く

審査での指摘は、どれもこの表の延長線上にあります。以下、課金に直結する部分を中心に、直し方をお伝えします。

審査で確認される 5 つの項目と直し方

審査のガイドラインは更新されます。実装前に App Store Review Guidelines の最新版を開き、特にサブスクリプションに関する節(3.1.2 付近)を読み直してください。ここでは、生成コードで抜けやすい順に挙げます。

1. プライバシー情報の整合

必要なのは、アプリの収集内容と App Store Connect のプライバシー申告・プライバシーポリシー URL・Privacy Manifest(PrivacyInfo.xcprivacy)を一致させることです。起動時の同意画面そのものが必須というわけではありません。

私が最初に確認するのは、使っている SDK が収集するデータです。広告や解析の SDK を足したのに申告を直し忘れる——この食い違いが、いちばん起きやすいのです。

2. サブスクリプションの解約・管理導線

アプリ内に、購読の管理画面へ移れる入口を置きます。StoreKit 2 には専用の API があり、URL を自前で開くより確実です。

import StoreKit
import SwiftUI
 
struct ManageSubscriptionButton: View {
    @State private var showManage = false
 
    var body: some View {
        Button("購読を管理する") { showManage = true }
            .manageSubscriptionsSheet(isPresented: $showManage)
    }
}

manageSubscriptionsSheet は iOS 15 以降で使えます。ユーザーが解約・プラン変更をアプリの外へ出ずに行えるため、審査の際にも導線を説明しやすくなります。

3. 失敗しても止まらないエラー処理

ネットワークや課金の失敗で画面が固まると、審査でも口コミでも不利になります。ポイントは、失敗を状態として持ち、画面に出すことです。

@MainActor
final class CatalogLoader: ObservableObject {
    enum Phase { case idle, loading, loaded([String]), failed(String) }
    @Published private(set) var phase: Phase = .idle
 
    func load() async {
        phase = .loading
        do {
            let url = URL(string: "https://api.example.com/items")!
            let (data, response) = try await URLSession.shared.data(from: url)
            guard (response as? HTTPURLResponse)?.statusCode == 200 else {
                throw URLError(.badServerResponse)
            }
            phase = .loaded(try JSONDecoder().decode([String].self, from: data))
        } catch {
            phase = .failed("読み込めませんでした。通信状況を確認して、もう一度お試しください。")
        }
    }
}

print で握りつぶさず、failed を View 側で受けて再試行ボタンを出す、というのが私の線引きです。

4. 権限は使う瞬間に求める

カメラや位置情報は、その機能を開く直前に要求します。許可の理由を示す文言(Info.plist の Usage Description)も、機能の言葉で具体的に書いてください。「アプリの向上のため」のような曖昧な文言は、差し戻しの典型です。

5. iPad での見え方

iPhone 専用でない設定のまま出すなら、iPad で主要画面が破綻しないことを確認します。NavigationSplitView を使うと、一覧と詳細を自然に分けられます。

struct RootView: View {
    @State private var selection: String?
    private let items = ["Item 1", "Item 2", "Item 3"]
 
    var body: some View {
        NavigationSplitView {
            List(items, id: \.self, selection: $selection) { Text($0) }
        } detail: {
            Text(selection ?? "項目を選んでください")
        }
    }
}
✦

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

この記事の続きを読む

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

この記事で得られること
✦Rork Max の SwiftUI 出力を審査前に点検する 5 つの観点と、そのまま使える修正コード
✦StoreKit 2 の購読状態の取得・無料トライアル判定・解約導線を、検証つきで実装する手順
✦売上の見込みを自分のアプリの数字で試算するための式と、最初の 10 人に届ける現実的な順序
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⟐ ビジネス2026-04-28
Rork アプリの収益モデル比較 — 広告・サブスク・買い切りを実運用の数字で選ぶ
広告・サブスクリプション・買い切りという3つの収益モデルを、壁紙系アプリの広告運用がピークだった時期の実体験をもとに、MAU5,000という同一条件で試算し直しました。eCPMやフィルレートの実態、ハイブリッド設計、段階的な移行の順序まで整理します。
◉ AI モデル2026-04-10
Rork AI ネイティブアプリ生成の品質を上げる SwiftUI 出力対策
Rork AI が出す SwiftUI が思った形にならないとき、直すべきは出力ではなく指示の側でした。同じ画面を三通りの指示で出し直して往復回数を数えた記録と、スクリーンショットを送る前に端末側で固定しておく条件をまとめます。
⟐ ビジネス2026-04-26
Rork で作ったアプリが App Store でリジェクトされた時の対処辞典
Rork で生成したアプリが App Store の審査でリジェクトされる典型的な理由と、私自身が直面して対処した実例を整理しました。Guideline 番号別の早見表、2026年9月に必須化される年齢レーティング回答への備え、再申請チェックリスト付きです。