◉ANTIGRAVITY LABEN
記事一覧/アプリ開発
▣ アプリ開発/2026-04-03上級

Antigravity × SwiftUI Live Activities & Dynamic Island:iOS 26 対応実装ガイド

AntigravityのAI支援で SwiftUI Live Activities と Dynamic Island を実装する実践ガイド。ActivityKit の設計、ロックスクリーンと Dynamic Island の UI、APNs バックグラウンド更新、配信ロスト・stale 表示・複数同時起動時の優先順位まで、個人開発でアプリを運用しながら拾った知見を書き残しました。

SwiftUI10Live ActivitiesDynamic IslandActivityKitiOS 26WidgetKit3Antigravity386個人開発108

✦ プレミアム記事

Live Activity を初めて入れたときに、まずぶつかった3つのこと

壁紙アプリの配信バッチが回り終わるのを待つあいだに、検証用の実機へ Live Activity を初めて載せてみた夜のことです。ドキュメントは一通り読んだつもりでおりました。それでも、そこから三つの壁に順番にぶつかりました。

  1. ロックスクリーンでは綺麗に出るのに、Dynamic Island のコンパクト表示にすると情報が崩れてしまいます
  2. APNs のペイロードを送っても、なぜか一定確率で更新が無声に落ちます
  3. staleDate を入れていなかったため、アプリ復帰時に過去の状態が「いま」のように表示され、問い合わせが届きました

どれも公式ドキュメントを読み直してもピンと来ず、Xcode のコンソールも沈黙したままでした。試行錯誤の途中で Antigravity の Planning Mode に「配達追跡アプリに Live Activity を後付けしたい。すでに WidgetKit のウィジェットはある」とだけ伝えたところ、ファイル構成・ターゲット設定・APNs ペイロード・stale 処理まで含めた実装計画を返してきて、そこから一気に整理が進みました。

この記事は、その実装を 1〜2 日で本番投入できるところまで持ち込むのに必要な情報を、私自身が個人開発の現場でぶつかった順番で書いています。iOS 26 で更新頻度の制限が緩和され、Xcode 26 の Dynamic Island プレビューも安定したので、いま Live Activity を入れる障壁はかなり下がりました。

対象読者は SwiftUI の基本知識がある iOS 開発者です。WidgetKit を触ったことがあると進みが速いですが、未経験でも追えるように ActivityAttributes のところから書きました。


第1章:ActivityKit の設計思想とデータモデル

1-1. Live Activities のアーキテクチャ

Live Activities は技術的には WidgetKit の拡張として実装されています。通常の Widget と異なるのは、データをリアルタイムに更新できる点と、ユーザーの操作に応じてライフサイクルを管理できる点です。

アーキテクチャは以下の 3 層から成ります:

  • App 本体(ActivityKit): Live Activity の開始・更新・終了を制御
  • Widget Extension: ロックスクリーンと Dynamic Island の UI を定義
  • ActivityAttributes プロトコル: 静的データと動的データを分離したデータモデル

1-2. ActivityAttributes の設計

ActivityAttributes プロトコルの最も重要な概念は「静的データ(attributes)」と「動的データ(ContentState)」の分離です。

import ActivityKit
 
// 配達追跡アプリを例に設計する
struct DeliveryAttributes: ActivityAttributes {
    // 静的データ:Live Activity 開始時に固定される情報
    public struct ContentState: Codable, Hashable {
        // 動的データ:update() で随時変更可能
        var status: DeliveryStatus
        var estimatedArrival: Date
        var currentLocation: String
        var progressPercentage: Double  // 0.0 ~ 1.0
    }
 
    // 静的フィールド(attributes)
    var orderID: String
    var restaurantName: String
    var itemSummary: String
}
 
enum DeliveryStatus: String, Codable {
    case preparing = "準備中"
    case pickedUp = "集荷済み"
    case nearBy = "近くに来ています"
    case delivered = "配達完了"
}

Antigravity に「ActivityAttributes を設計して、配達追跡の Live Activity を作りたい」とプロンプトすると、このような雛形を自動生成してくれます。さらに「Codable 準拠を確認して、Hashable に必要な == 演算子も生成して」と続けることで、コンパイルエラーのない完全なモデルを素早く得られます。

1-3. Antigravity でのモデル設計のコツ

Antigravity を使ったモデル設計で特に有効なプロンプトパターンがあります:

# Antigravity へのプロンプト例
「SwiftUI の Live Activities 用に ActivityAttributes を設計してください。
条件:
- アプリ名:FoodRunner(フードデリバリー)
- 静的データ:注文ID、店舗名、注文内容のサマリー
- 動的データ:配達ステータス、推定到着時刻、現在地点名、進捗率
- iOS 26 の新しい pushToken 更新方式に対応
- Sendable 準拠も含める」

このプロンプトで Antigravity が生成するコードは コンパイルエラーがほぼなく、iOS 26 の API 変更にも対応しています。モデル設計の試行錯誤に費やす時間を 70% 以上削減できた経験があります。


✦

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

この記事の続きを読む

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

この記事で得られること
✦ActivityAttributes / ContentState の設計から、Dynamic Island 3モードの UI 実装、APNs バックグラウンド更新までを一連のコードで通しで追えるようにしました
✦公式ドキュメントには書かれていない落とし穴を6つ——配信ロスト、stale 表示、トークンローテーション、コンパクト表示の情報量、審査での聞かれ方、そして複数同時起動で relevanceScore が抜け落ちる問題——実際に効いた対策と観測値で書いています
✦Antigravity の Planning Mode と Sandbox を使った Live Activity 実装の進め方を、プロンプト雛形・チェックリスト・審査時の見られ方まで含めて手順化しました
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

▣ アプリ開発2026-04-09
Antigravity × App Clip・WidgetKit・Live Activities 収益化ファネル設計ガイド
App Clip・WidgetKit・Live Activities の 3 機能を Antigravity で実装し、コールドユーザーから有料会員へ至る収益ファネルを組み立てる上級実践ガイドです。StoreKit 2 と RevenueCat の統合、公式ドキュメントにない 7 つの落とし穴まで扱います。
▣ アプリ開発2026-10-15
immutable を付けた資産を同じ URL で差し替えたら、利用者のブラウザだけが古いままでした
長期キャッシュを付けた JS を同じ URL で差し替えても、CDN をパージしてもブラウザは取り直しません。同じ URL・no-cache・クエリ付き・内容ハッシュ名の 4 方式を Chromium で並べて比べ、ビルドの最後にハッシュを付ける完全なスクリプトまでをまとめました。
▣ アプリ開発2026-09-29
Cloudflare をパージしても古い壁紙が届き続けた原因は、オリジン側で JPEG を握っていた XPageSpeed
同じ URL に上書きした壁紙画像が、Cloudflare をパージしても古いまま届き続けた運用の記録です。ローカル・オリジン・エッジの三者を突き合わせて層を名指しする検査、プレフィックスパージの使いどころ、Xserver の XPageSpeed を .htaccess で安全に切る書き方まで扱います。