RORK LABEN
MAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できますMAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できます
記事一覧/開発ツール
開発ツール/2026-06-21上級

Rork で作ったアプリの「写真に保存」が一部の端末だけ失敗する——expo-media-library の権限スコープと保存設計

Rork で生成したアプリの画像保存機能が、自分の端末では動くのに一部のユーザーだけ失敗する——その正体は expo-media-library の権限スコープです。writeOnly 権限・iOS の限定アクセス・Android 14 の部分許可を踏まえた、保存処理とアルバム設計の実装手順をまとめます。

expo-media-library3権限5React Native172Rork430画像保存

プレミアム記事

自分の iPhone では一度も失敗しないのに、レビューには「保存できません」と書かれる

個人開発で壁紙アプリをいくつか運用していると、ときどき不思議なレビューが届きます。「ボタンを押しても写真アプリに何も入りません」というものです。自分の手元の端末では、開発中も審査前も一度として失敗しません。にもかかわらず、星1つと一緒に「保存できない」という声だけが少しずつ積み上がっていきます。

原因を実機で追っていくと、たいていは画像ダウンロードの失敗でも、ストレージ不足でもありませんでした。expo-media-library権限スコープが、端末の OS バージョンや、ユーザーが過去に一度押した許可ダイアログの選択によって、自分の想定と違う状態になっていたのです。

このすれ違いが厄介なのは、開発者の端末で再現しにくいことです。多くの開発者は最初の起動で「すべての写真へのアクセスを許可」を選んでいて、その後ずっとフルアクセスのまま開発を続けます。一方で実ユーザーの中には「選択した写真のみ」を選んだ人、Android 14 で「一部のみ許可」を選んだ人、そもそも保存だけしたいのに読み取り権限まで要求されて不信感から拒否した人が混ざっています。ここでは、この保存だけのための権限を正しく設計し、端末差を吸収する保存フローを組む手順を共有します。

なぜ端末によって保存の成否が変わるのか

expo-media-library の許可は、単純な「許可/拒否」の二択ではありません。OS ごとに段階があり、しかもその段階は年々細かくなっています。

iOS は写真ライブラリへのアクセスを4つの状態で持っています。フルアクセス、限定アクセス(ユーザーが選んだ写真だけ見える)、拒否、そして「追加のみ(add-only)」です。最後の追加のみは、保存はできるが既存の写真は一切読めない、という保存専用の権限です。これが今回の鍵になります。

Android はさらにバージョンで分岐します。Android 12 以前は WRITE_EXTERNAL_STORAGE、Android 13 は READ_MEDIA_IMAGES、Android 14 では「選択した写真のみ」にあたる部分許可(READ_MEDIA_VISUAL_USER_SELECTED)が加わりました。やっかいなのは、MediaStore 経由で自分のアプリが作った画像を Pictures/ 配下に書き込むだけなら、Android 10 以降は読み取り権限が本来は不要だという点です。にもかかわらず、読み取り権限まで一括で要求する実装になっていると、保存しか使わないユーザーにまで重い許可を求めてしまい、拒否率が上がります。

整理すると、保存の成否を分けているのは次の3つの組み合わせです。

要因開発者の典型つまずくユーザー
iOS のアクセス状態フルアクセス限定アクセス / 追加のみ / 拒否
Android のバージョン最新の検証端末Android 13・14 で挙動が変わる
要求している権限の広さ読み書き一括保存だけしたいのに読み取りまで拒否

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

この記事の続きを読む

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

この記事で得られること
自分の端末では保存できるのにレビューで「保存できない」と言われていた人が、端末ごとの権限スコープの違いを切り分けて原因を特定できる
writeOnly 権限・iOS 限定アクセス・Android 14 部分許可に対応した保存処理とアルバム作成のコードを、そのまま自分のアプリに移植できる
権限拒否やアルバム作成失敗を握りつぶさず、ユーザーが自力で復帰できる導線まで含めた保存フローを設計できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-04-23
Rork アプリで画像・動画をカメラロールに保存できない問題の完全解決ガイド
Rork で生成したアプリで画像・動画を iOS のカメラロール/Android のギャラリーに保存できない問題を、権限設定・expo-media-library の仕様・SDK 51+の変更点まで掘り下げて解決していきます。
開発ツール2026-06-21
Rork のお気に入り一覧を長押しドラッグで並べ替える — 再レンダリングを抑えた reorderable list と並び順の永続化
Rork が生成したお気に入り一覧に、長押しドラッグの並べ替えを後から足す実装手順です。再レンダリングを抑える設計、worklet の境界、並び順の永続化、ジャンクやゴーストカードの回避までを実コードでまとめました。
開発ツール2026-06-20
Rork の一覧が増えるほどスクロールで重複と欠落が出る——カーソルページネーションと再取得の状態設計
Rork が生成する素朴な offset ページネーションは、リストが更新されるたびに重複や欠落を起こします。カーソル方式の契約設計、取得状態を一つに束ねる usePaginatedList フック、失敗時の指数バックオフ再試行まで、本番運用で詰まらない一覧の作り方を実装中心に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →