◉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-14上級

Rork Max のネイティブアプリに歩数と睡眠を読み込む — HealthKit 連携で「数字に頼らない」癒し系アプリを作る

Rork Max が生成するネイティブ Swift アプリに HealthKit を組み込み、歩数・睡眠・心拍を読み書きする実装を、権限設計とバックグラウンド更新まで含めて整理しました。審査で弾かれやすい使用目的説明や、データが取れない本番特有のハマりどころも実例で解説します。

Rork Max235HealthKit5Swift48ウェルネス権限設計4App Store審査10

✦ プレミアム記事

癒し系のアプリを個人開発で長く運用していると、ユーザーから「今日どれだけ歩いたかを、ホーム画面の壁紙と一緒にそっと見せてほしい」といった要望が届きます。数字でせかすのではなく、静かに寄り添う見せ方をしたい。そう考えたとき、自前で歩数を数えるのではなく、iPhone がすでに記録しているヘルスデータを借りる方が筋が良いと感じました。

Rork Max はブラウザ上でネイティブ Swift アプリを生成できるため、React Native では一手間かかる HealthKit のような Apple 純正フレームワークにも素直に手が届きます。ここでは、生成されたコードに HealthKit 連携を足していく過程を、権限設計から本番でデータが取れないときの切り分けまで通しで整理します。

なぜ React Native ではなく Rork Max を選ぶ場面なのか

HealthKit は Swift / Objective-C から直接触ることを前提に設計されたフレームワークです。Expo(React Native)でも react-native-health のようなブリッジ経由で扱えますが、ヘルスデータの種類が増えるたびにブリッジの対応状況に振り回されます。私自身、Expo ベースの検証アプリで心拍変動(HRV)を扱おうとして、ブリッジが該当の HKQuantityType を公開しておらず手詰まりになった経験があります。

Rork Max が生成するのは素のネイティブアプリなので、HealthKit を import すれば Apple が公開している型にそのままアクセスできます。歩数・睡眠・心拍・ワークアウトまで、ブリッジの実装待ちを気にせず使えるのは大きな利点です。一方で、ネイティブだからこそ権限まわりとバックグラウンド配信の作法を正しく踏まないと、審査でも本番でも静かに失敗します。そこを丁寧に押さえていきます。

Step 1: Capability と Info.plist を最小範囲で設定する

最初にやるのは権限の宣言です。Rork Max のプロジェクト設定で HealthKit の Capability を有効化したうえで、使用目的を Info.plist に書きます。ここで欲張って多くの型を要求すると、App Store の審査で「なぜこのアプリに必要なのか」を問われ、リジェクトの原因になります。

<key>NSHealthShareUsageDescription</key>
<string>歩いた距離をホーム画面のテーマと一緒に振り返るために、歩数と睡眠の記録を読み取ります。</string>
<key>NSHealthUpdateUsageDescription</key>
<string>アプリ内で記録したリラックス時間を、ヘルスケアのマインドフルネス記録として保存します。</string>

ポイントは、説明文に「何を」「何のために」読むかを具体的に書くことです。「ヘルスデータを使用します」のような抽象的な文面は審査で弾かれやすく、私の場合、初回提出で NSHealthShareUsageDescription の文面が曖昧だという指摘を受けて差し戻されました。ユーザーの許可ダイアログにそのまま表示される文章なので、誠実に書くことが信頼にもつながります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦HealthKit の読み取り・書き込み権限を最小範囲で要求し、審査で弾かれない使用目的説明を書くための具体的な Info.plist と Swift コードが手に入る
✦アプリを閉じている間も歩数を取り込む HKObserverQuery + Background Delivery の実装を、登録解除の落とし穴まで含めて動くコードで理解できる
✦「権限を許可したのにデータが 0 件」という本番特有の症状を切り分ける手順と、私自身が癒し系アプリで踏んだ判断基準が得られる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-04-05
Rork Max × WidgetKit・ライブアクティビティ実装ガイド 2026 — Dynamic Island 対応まで
Rork Max で iOS Widget・ロック画面ウィジェット・Dynamic Island 対応のライブアクティビティを実装した記録。Timeline の焼き込み設計、APNs のヘッダーと優先度、push-to-start、stale-date の扱いまで実運用の判断を残します。
⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。
⬡ 開発ツール2026-05-23
Rork 生成 Expo アプリの Privacy Manifest を SDK 連鎖まで監査する — 提出前1日で洗い切る個人開発者の手順
Rork が生成する Expo アプリの依存 SDK を Privacy Manifest 観点で全数監査する手順です。Required Reason API の事前検出、ITMS-91053 と ITMS-91061 の切り分け、npm では見えない Pod を Podfile.lock から拾う照合まで、個人開発の運用としてまとめました。