◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●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)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-06-18上級

Rork Max で Apple Watch のコンプリケーションを WidgetKit で実装する

Rork Max が生成した SwiftUI アプリに、watchOS のコンプリケーションと Smart Stack 対応を後から足す実装手順を、データ共有と Timeline 設計まで具体的にまとめました。

Rork Max235Apple Watch3WidgetKit11SwiftUI66watchOS

✦ プレミアム記事

Apple Watch の文字盤に自分のアプリの数字を一つ載せる。これだけのことが、Rork Max で本体アプリを出した後に意外と長い宿題として残りがちです。私自身、個人開発で配信している壁紙系・習慣記録系のアプリで「本体は動くのに、手首の上には何も出ていない」状態をしばらく放置していました。コンプリケーションは表示面積こそ小さいものの、ユーザーが一日に何十回も視線を落とす場所です。そこに居場所を作れるかどうかは、継続率にそのまま効いてきます。

ここからは、Rork Max が生成した SwiftUI アプリへ後付けで watchOS のコンプリケーションを実装し、watchOS の Smart Stack に拾わせるところまでを順番に進めます。Rork に任せられる部分と、自分の手で書く必要がある部分の線引きを、実際のコードと一緒に整理していきます。

watchOS 9 以降、コンプリケーションは WidgetKit に統一された

最初に押さえておきたいのは、いまのコンプリケーションが ClockKit ではなく WidgetKit で書くものになっている点です。watchOS 9 で ClockKit のコンプリケーション API は非推奨になり、現在は iPhone 側のホーム画面ウィジェットとまったく同じ Widget プロトコルで記述します。つまり、iOS のウィジェットを一度でも書いたことがあれば、知識の大半はそのまま流用できます。

コンプリケーションのレイアウトは、ウィジェットファミリーのうち accessory 系の4種類で表現します。

ファミリー主な表示位置使いどころ
accessoryCircular円形コンプリケーション枠進捗リングや1つの数値
accessoryRectangular横長の枠・Smart Stackタイトル+値の2〜3行
accessoryInline文字盤上部の1行短いテキストとSF Symbol
accessoryCorner文字盤の四隅ゲージ付きの小さな数値

Rork Max は本体の SwiftUI アプリを生成してくれますが、watchOS 向けのウィジェット拡張ターゲットまでは自動では作りません。ここは自分で Xcode を開いて足す作業になります。Rork Max は Xcode 不要をうたっていますが、それは「本体アプリをそのまま公開する」場合の話で、ウィジェット拡張のような別ターゲットを追加するときは、エクスポートしたプロジェクトを一度 Xcode で開く必要があります。私はこの切り替えのタイミングを「Rork に任せる範囲の終わり」と捉えるようにしています。

ターゲット構成とデータ共有の土台を作る

ウィジェット拡張は、本体アプリとは別のプロセスで動きます。そのため、本体アプリが持っているデータをそのまま参照することはできません。両者をつなぐのが App Group の共有コンテナです。

まず Xcode で File > New > Target から Widget Extension を追加します。このとき watchOS 用のターゲットとして作る点に注意してください。続いて、本体アプリとウィジェット拡張の両方の Signing & Capabilities に同じ App Group(例: group.net.dolice.myapp)を追加します。

共有コンテナへの書き込みは、本体アプリ側で行います。Rork Max が生成したデータ層に、次のような薄いブリッジを一枚かませる形が扱いやすいです。

import Foundation
import WidgetKit
 
enum SharedStore {
    static let appGroup = "group.net.dolice.myapp"
 
    private static var defaults: UserDefaults? {
        UserDefaults(suiteName: appGroup)
    }
 
    // 本体アプリから呼ぶ。値が変わったらウィジェットの再読み込みも依頼する
    static func saveStreak(_ days: Int) {
        defaults?.set(days, forKey: "currentStreak")
        WidgetCenter.shared.reloadTimelines(ofKind: "StreakComplication")
    }
 
    static func loadStreak() -> Int {
        defaults?.integer(forKey: "currentStreak") ?? 0
    }
}

ここでのポイントは WidgetCenter.shared.reloadTimelines(ofKind:) です。共有コンテナに書き込んだだけでは、コンプリケーションの表示は更新されません。本体アプリが値を更新したタイミングで、明示的に再読み込みを依頼する必要があります。Rork Max の生成コードは画面遷移やステート管理は丁寧に作ってくれますが、このプロセスをまたいだ更新の依頼までは面倒を見てくれません。ここは手で足す前提でいた方が、後で「文字盤の数字が古いままだ」と悩まずに済みます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦Rork Max の生成コードに watchOS ウィジェット拡張を足す具体的なターゲット構成と App Group 設計
✦accessoryCircular / accessoryRectangular など4ファミリーを1つの WidgetKit エントリで賄う実装
✦Smart Stack に拾わせるための TimelineEntryRelevance と更新予算の現実的な決め方
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。
⬡ 開発ツール2026-05-17
Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 — 実際に動いた機能と手を入れた機能
運用中の壁紙アプリの本番コードを基準に、Rork Max の SwiftUI ネイティブ生成を検証しました。そのまま使えた機能、手を入れた機能、生成を諦めた機能を、動くコードと実機での計測値とともにお伝えします。
⬡ 開発ツール2026-05-12
Rork Max で複数アプリ共通UIライブラリを Swift Package Manager で構築する実践ガイド
複数アプリを運営する個人開発者向けに、Swift Package Managerで共通UIライブラリを構築してRork Max生成コードの重複を排除する手順です。パッケージ構成の設計、テーマシステムとカードコンポーネント、アニメーションプリセットの共通化、テストまで詳解します。