アプリ開発
React NativeとExpoを軸にしたアプリ設計の考え方、ストア用スクリーンショットなどの素材制作、パフォーマンス改善、リリース後の運用まで、個人開発でモバイルアプリを作り届けるための実践的な記事をまとめています。
Rork Max アプリから予定をカレンダーに登録する — EventKit の権限3段階と書き込み専用アクセスの設計
iOS 17 以降の EventKit は許可不要UI・書き込み専用・フルアクセスの3段階になりました。Rork Max アプリで許可率を落とさずカレンダー・リマインダー連携を実装する手順と審査対策をまとめます。
Rork Max のゲームに Game Center を組み込む — 認証・リーダーボード・実績とスコア改ざんへの向き合い方
Rork Max で作った iOS ゲームに Game Center を組み込む手順を、認証・リーダーボード・実績の動く Swift コードと、スコア改ざんへの現実的な向き合い方まで含めて整理します。
Rork Max × MapKit で場所検索マップを実装する — MKLocalSearch・ピン集約・位置情報許可の設計
Rork Max のネイティブ Swift で場所検索マップ画面を作る実装手順です。MKLocalSearch の周辺検索、ピンが増えたときの SwiftUI Map と MKMapView の使い分け、位置情報許可と審査対策まで、試作で実際に詰まった点を交えて整理します。
パスワードを預からないログインへ — Rork Max アプリにパスキー認証を組み込む実装手順
Rork Max が生成した Swift アプリに AuthenticationServices のパスキー認証を組み込む手順です。Associated Domains の設定から WebAuthn サーバー検証、実機テストの落とし穴まで動くコードでまとめました。
Rork Max のネイティブ Swift で MusicKit を使う — Apple Music の認可・検索・再生を最小構成で通す
Rork Max で生成した Swift アプリに MusicKit を組み込む手順。MusicAuthorization の認可、MusicCatalogSearchRequest での検索、ApplicationMusicPlayer と SystemMusicPlayer の使い分け、未加入ユーザーへのオファー表示までを実装コードで解説します。
Rork Max のネイティブ Swift で SharePlay を組む — 二人の画面を同じ状態で動かす設計
GroupActivities を使い、FaceTime 越しに二人の画面を同じ状態で動かす SharePlay を Rork Max のネイティブ Swift で組む実装メモです。GroupActivity の宣言、GroupSession への参加、GroupSessionMessenger での状態同期、遅延と競合の扱い、そして React Native 側から橋渡しするときの境界設計まで、実際に詰まった点を添えてまとめます。
Rork Max のネイティブ Swift で ShazamKit を使い、流れている曲を認識するアプリを作る
SHManagedSession を使って、周囲で流れている曲を認識するアプリを Rork Max のネイティブ Swift で組む実装メモです。旧来の AVAudioEngine 手回しとの違い、idle・prerecording・matching の状態設計、認識精度を上げる prerecording の使いどころ、Expo からの橋渡しの境界設計まで、実際にハマった点を添えてまとめます。
ブロック画面を自分のアプリらしく作り替える — Rork Max で ShieldConfiguration とボタン処理を実装する
スクリーンタイム系アプリで表示される灰色の遮蔽画面を、自分のアプリのトーンに作り替えます。ShieldConfiguration 拡張でUIを差し替え、ShieldAction でボタンの挙動まで制御する実装を、Rork Max のネイティブ構成に組み込む形でまとめました。
Rork Max のネイティブ Swift で AlarmKit のタイマーを実装する — 消音・集中モードを越えて鳴らす
ローカル通知が消音モードや集中モードで鳴らない問題を、iOS 26 の AlarmKit で解決する実装メモです。認可・カウントダウンの schedule・ロック画面と Dynamic Island の Live Activity・実行中タイマーの一覧までの Swift コードと、Rork Max のネイティブ生成や Expo からの橋渡しの境界設計を、実際にハマった点を添えてまとめます。
AccessorySetupKit で Bluetooth 機器のペアリング画面をネイティブに作る
iOS 18 の AccessorySetupKit を使うと、Bluetooth の全許可ダイアログを出さずに、特定の機器だけをシステム製のシートでペアリングできます。Rork Max が生成するネイティブ Swift を前提に、宣言・ピッカー表示・接続までの実装を動くコードでまとめました。
ユーザー投稿画像を表示前に端末内で判定する — SensitiveContentAnalysis 実装メモ
AI 生成画像やユーザー投稿を扱うアプリで、不適切な画像を表示前に端末内で弾くための実装メモです。Apple の SensitiveContentAnalysis フレームワークを Swift で呼び、Rork Max が生成したネイティブコードや Expo のネイティブモジュールへ組み込むところまでを、実際にハマった点を添えて解説します。
Rork アプリでファイルを「その場で見せる」— Quick Look をアプリから安全に呼ぶ設計
PDF や画像、Office 文書をアプリの外に出さずにその場で見せる、Quick Look(QLPreviewController)をRork(Expo)から呼ぶ設計です。リモートファイルの事前ダウンロード、ローカル URL の条件、Android の FileProvider 代替、共有ボタンの扱いまで実装手順でまとめます。
クリップボード連携のUXを整える — iOSのペースト許可バナーを増やさずに「コピー」と「貼り付け」を成立させる
expo-clipboard で「コピー」と「貼り付け」を実装するとき、iOS のペースト許可バナーが頻発して使い勝手を損なうことがあります。バナーの発生条件を押さえ、hasStringAsync で内容を読まずにボタンを出し分ける設計をまとめました。
従量制回線と低データモードを尊重して先読みを止める通信設計
画像中心の Rork(Expo)アプリで、従量制回線や低データモードのときに先読みを抑える通信設計を扱います。NetInfo の details から回線の性質を読み、画質を落とし、プリフェッチを遅延させる適応ロジックを実装コードとともに整理します。
オンデバイス Core ML を、起動の重さとサーマルで破綻させない設計
Rork Max が生成するネイティブ Swift でオンデバイス Core ML を載せると、精度よりも先に「最初の推論が遅い」「使っていると熱で重くなる」という壁にぶつかります。コールドスタートとサーマル予算を前提にした設計を、動く Swift とともに整理します。
Rork Max でバーコードとテキストを同時に読むスキャナを VisionKit で実装する
Rork Max のネイティブ Swift アプリに、バーコードとテキストをライブで読み取る画面を VisionKit の DataScanner で実装します。SwiftUI への組み込み、可用性判定、連続検出のスロットリング、実機検証までを実装コード付きで扱います。
「本当に削除しますか?」を出す前に — 取り消せる削除という選択肢
リストの項目を消すたびに確認ダイアログを出すと、ユーザーは反射的にOKを押すようになります。Rork(Expo)アプリで「取り消せる削除」を実装し、確認を出すべき場面と出さない場面を切り分ける設計ノートです。
アップデート後の「新着情報」を、しつこくなく一度だけ出す設計 — バージョン境界とseen状態の作り方
更新後に出すアプリ内「新着情報」画面が、新規インストールにまで出たり毎回出たりして嫌われる問題を、バージョン境界とseen状態の設計で一度だけ確実に届ける。Rork(Expo)の実コードと、複数アプリで使い回す型までまとめます。
端末の時計を戻されても「今日の1枚」が崩れない設計 — 日替わりコンテンツの日付境界とストリーク整合
日替わりの「今日のコンテンツ」がタイムゾーン移動や端末時計の巻き戻しで二重表示・欠落・ストリーク消失を起こす問題を、決定論的な日付キーと単調クロックで防ぐ設計を、Rork(Expo)アプリの実コードでまとめます。
画面を離れてもアニメーションが回り続ける — Rork(Expo)アプリのフォーカス連動でバッテリーを守る
Rork が生成した Expo アプリで、別画面に進んだりホームに戻ったあともグラデーションや呼吸アニメーションが裏で回り続け、ジャンクとして表に出ないままバッテリーを静かに削っていく——その原因は Reanimated の withRepeat が UI スレッドで走り続けることと、ナビゲーションスタックが画面をマウントしたまま保持することにあります。useIsFocused と AppState を束ねたライフサイクル設計で、画面外とバックグラウンドのループを確実に止める実装を、動くコードで示します。
アラビア語に切り替えても画面が鏡像化されない — Rork(Expo)アプリのRTL対応と再起動の罠
Rork が生成した Expo アプリにアラビア語を足したのに、画面が左右反転せず戻るボタンが逆側に残る——その原因は I18nManager.forceRTL が再起動を要求することにあります。expo-localization での方向判定、Updates.reloadAsync での確実な反映、marginStart への置き換え、矢印だけの鏡像化まで、動くコードで RTL 対応の本番設計を示します。
Rorkで本格的なiOSアプリを構築する実践ガイド
Rork は Expo / React Native アプリを生成します。本番リリースに向けたアーキテクチャ、クラッシュの見える化、一覧画面のパフォーマンス、eas submit の運用、iOS 審査つまずきの潰し方を、審査を往復して学んだ実例で整理します。
再インストールしたユーザーが「初回」に戻らない — Rork(Expo) アプリの初回判定と状態永続の非対称設計
Rork で生成した Expo アプリで、再インストール時に初回判定やオンボーディング・無料トライアルの状態が崩れる問題を、ストレージの永続性の非対称として整理し、設計で解く方法を共有します。Keychain と AsyncStorage の生存差、インストールと更新の軸の分離、サーバ権威の権利判定まで実装込みで解説します。
言語を増やすたびに未翻訳が本番へ漏れる — Rork(Expo) アプリの文言カタログ運用と抜け検出の設計
Rork で生成した Expo アプリを多言語化したあと、言語を足すたびに未翻訳が本番へ漏れる問題を仕組みで止めるための設計を共有します。文言カタログの一元化、CI でのキー抜け・余り検出、フォールバック連鎖、複数形、擬似ロケールでのレイアウト検証まで実装込みで解説します。
広告とサブスクを入れた途端に増える「Appプライバシー」の申告 — 実際にチェックを付けた項目の記録
AdMob・RevenueCat・Crashlytics を組み込んだ Rork(Expo) アプリで、App Store Connect の「Appプライバシー」に何をどう申告したか。トラッキングとATTの連鎖まで、6本運用の手元メモとして整理しました。
リリースビルドだけ落ちる — Expo(Android) で R8 が剥がしたクラスを keep ルールで救う
AAB を小さくしようと R8 のコード圧縮を有効化したら、本番だけ特定画面でクラッシュ。剥がされたクラスを mapping.txt から突き止め、expo-build-properties で keep ルールを当てるまでの手順をまとめました。
dev・staging・本番を同じ iPhone に並べる — Rork(Expo) アプリの環境分離設計
Rork が生成した Expo アプリを dev / staging / 本番の3ビルドに分け、同じ端末に共存させる設計をまとめました。app.config.ts の動的切り替え、eas.json のプロファイル、通知・分析・課金の隔離まで具体的に解説します。
Next.js × Supabase で必ず向き合う3つの実装 — RLS・状態管理・リアルタイム更新
Webアプリの土台を組んだ先で必ず詰まる3つ、DBのアクセス制御(RLS)・画面の状態管理・リアルタイム更新を、Next.jsとSupabaseのコードを交えて実装レベルで解説します。購読の解除忘れによるメモリリークや、認証とRLSの連動といった、本番でハマる落とし穴まで。
プログラミングは分かる人が、初めてWebアプリを公開するときの地図 — Next.jsとSupabaseで掴む全体像
アルゴリズムは書けるのに、フロントエンドとバックエンドの違いやReactのコンポーネントで詰まる。そんな経験者向けに、Next.jsとSupabaseを例にWebアプリの全体像を一枚の地図として整理します。サーバーで動くコードとブラウザで動くコードの境界まで。
壁紙アプリの色がくすむ問題と Display P3 — 広色域を配信パイプラインで詰める
同じ壁紙が実機ではくすんで見える。原因は広色域(Display P3)とsRGBの取り違えでした。6本の壁紙アプリで色域を詰めた実装手順に加え、画素が本当に広色域かを見分ける方法、配信前ゲートのスクリプト、Android広色域までまとめます。
壁紙グリッドに戻ると一番上に戻ってしまう — スクロール位置を「戻る」とプロセス復帰の両方で保つ
壁紙アプリの一覧で詳細を見て戻ると先頭に飛んでしまう問題を、ナビゲーションの戻りとプロセス復帰の二つに分けて設計し直しました。getItemLayout と保存タイミング、復元時のちらつきまで含めた実装メモです。
Rork Max で Apple TV のアンビエント表示アプリを組み立てる
Rork Max が生成するネイティブ Swift を土台に、Apple TV で静かに流し続けるアンビエント表示アプリを設計します。Top Shelf・フォーカスエンジン・途切れない映像ループの実装を、運用で気づいた勘どころとともにまとめました。
Rork Max のアプリに Apple Wallet のスタンプカードを足す — 署名と更新の実装メモ
店舗のスタンプカードを Apple Wallet に入れたい——Rork Max が生成した Swift アプリから PassKit のパスを発行する際、難所はデザインではなく『署名』と『リモート更新』でした。実装の勘所を整理します。
初回起動の前に壁紙パックを落としておく — Rork Max と Background Assets の使いどころ
コンテンツの多いアプリは、初回起動時に空のグリッドを見せてしまいがちです。アプリ本体とは別枠でコンテンツを先回りして落とす Background Assets を、Rork(Expo)では届かない領域として Rork Max のネイティブ Swift でどう実装するか、運用判断まで含めてまとめます。
Rork Max で iMessage 拡張を作り、アプリの世界観をメッセージに持ち込む — 配布導線としての実装メモ
Rork Max が生成するネイティブ Swift プロジェクトに iMessage 拡張を追加し、アプリの素材をメッセージ上で共有する実装を整理しました。コンパクト/拡張表示の切り替え、メッセージ送信、ドロワーに出てこないときの切り分けまで、個人開発の配布目線で押さえます。
Rork Max で WeatherKit を使う天気アプリ — 認証とアトリビューションの落とし穴
Rork Max が生成したネイティブ Swift アプリに WeatherKit を組み込む際、最初に詰まるのは認証とアトリビューションでした。トークンの扱い、レート上限、必須の出典表示まで、実装で確認した手順を整理します。
Rork Max のアプリに Core NFC でタグ読み取りを足す実装メモ
Rork Max が生成した Swift アプリへ Core NFC を組み込み、NDEF タグの読み取りを実装する手順を、Entitlement・Info.plist 設定から本番での躓きどころまで実コードでまとめました。
WidgetKit のタイムラインを更新予算と向き合って設計する — 壁紙アプリのウィジェットが止まった理由
ホーム画面ウィジェットが「夕方になると更新されなくなる」のはなぜか。WidgetKit のタイムライン設計を、更新予算・リロードポリシー・エントリ密度の3点から整理しました。TimelineProvider の実コード、予算を使い切らないエントリ設計、relevance による優先度づけまで、個人開発で6本の壁紙アプリを運用しながら詰めた知見を共有します。
壁紙パックをアプリ審査なしで配る — リモートアセットのバージョニングと差分配信を6本で運用する設計
新しい壁紙を追加するたびにアプリを再申請していると、運用が止まります。マニフェスト方式のバージョニングと差分ダウンロード、キャッシュ無効化とロールバックを、6本並行運用の実装と転送量の実測値とともに整理しました。
使われない機能をいつ、どう削るか — Rork 製アプリの機能棚卸しと安全な撤去の設計
使われない機能が増えるほど、アプリは静かに壊れやすくなります。壁紙アプリ6本の並行運用で固めた、使用率の計測方法・削る残す隠すの判断基準・Remote Config による三段階の取り下げフローを、実装コードつきでまとめました。