すべての記事
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 対応の本番設計を示します。