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

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

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

expo-media-library4権限7React Native242Rork611画像保存

✦ プレミアム記事

自分の 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-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-08-14
Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す
Expo SDK 57 では expo prebuild が既定で ios と android を消してから再生成します。手編集を上げる前に洗い出す方法、config plugin への移し替え、57.0.9 で解消したメモリ回帰までを実務の順序でまとめました。