RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/アプリ開発
アプリ開発/2026-05-31中級

iOSアプリから壁紙を『設定』まで導く現実的な設計 — Save to Photos の権限と Shortcuts 連携

iOSでは壁紙をアプリから直接設定できません。add-only 権限での保存、Live Photo の扱い、設定アプリへの誘導、Shortcuts オートメーションまで、6本の壁紙アプリで詰めてきた実装と計測値をまとめます。

iOS108壁紙アプリ28expo-media-library3権限設計4Shortcuts3Rork515

プレミアム記事

壁紙アプリを作るとき、最後の最後で一番手こずるのは「壁紙に設定」というたった一つのボタンです。画像を並べ、お気に入りを同期し、広告を入れ、課金を組んでも、肝心のこのボタンがiOSでは思ったように作れません。多くの個人開発者がここで「保存しただけで終わってしまい、ユーザーがそのあとどうしていいか分からない」という壁に当たります。

私自身、2014年から個人開発を続けてきて累計5,000万ダウンロードに到達した中で、壁紙・癒し系のアプリを今も6本並行で運用しています。アーティストとして作る画像をどう「相手の手元の画面」に届けるかは、技術というより設計の問題でした。その6本で実際に詰めてきた保存フローの実装と、計測して分かった数値を、ここで共有します。

iOSは「壁紙に設定」をアプリに開放していません

まず受け止めなければならない前提があります。iOSには、サードパーティのアプリがユーザーのロック画面やホーム画面の壁紙をプログラムから差し替えるための公開APIが存在しません。Androidの WallpaperManager.setBitmap() に相当するものは、iOSのアプリ開発者には渡されていないのです。

つまり「壁紙に設定」ボタンができることは、実際には次の2つに限られます。

  1. 画像をユーザーの写真ライブラリ(カメラロール)に保存する
  2. ユーザーを設定アプリの壁紙画面へ誘導し、保存した画像を選んでもらう

この事実を知らずに設計を始めると、「ワンタップで壁紙が変わる」体験を約束してしまい、レビューで「設定されない」という低評価が並ぶことになります。私の場合、最初のバージョンでボタンのラベルを「壁紙に設定」にしていたところ、実際には保存しかしていなかったため、ユーザーの期待と挙動がずれて初週のレビュー平均が下がりました。ラベルを「写真に保存」に変え、保存後の導線を丁寧に作り直したことで、この齟齬は解消しています。

保存だけなら add-only 権限で足ります

写真ライブラリへの保存というと、つい「写真へのアクセス」をまるごと要求しがちです。けれども壁紙アプリがやりたいのは「足す」ことだけで、ユーザーの既存の写真を「読む」必要はありません。ここで使えるのが、iOS 14 で導入された 追加のみ(add-only) の権限レベルです。

フル権限(PHAccessLevel.readWrite)を求めると、ユーザーには「すべての写真へのアクセスを許可しますか」という重たいダイアログが出ます。一方 add-only(PHAccessLevel.addOnly)なら、「写真の追加を許可しますか」という、はるかに軽い文言になります。壁紙を保存するだけのアプリが他人の写真を全部見たがる理由はありませんし、審査でもプライバシー上の説明責任が軽くなります。

ネイティブ側では、Info.plist に保存専用の説明文を入れます。

<key>NSPhotoLibraryAddUsageDescription</key>
<string>選んだ壁紙をあなたの写真に保存するために使用します。既存の写真を読み取ることはありません。</string>

NSPhotoLibraryUsageDescription(読み書き用)ではなく NSPhotoLibraryAddUsageDescription を使うのが肝心な点です。前者を入れてしまうと、保存しかしないのにフル権限の説明文が要求され、審査側に「なぜ全写真へのアクセスが必要か」を問われる余地を残します。

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

この記事の続きを読む

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

この記事で得られること
PHAccessLevel.addOnly でフル写真権限を求めずに保存だけ通す具体的な実装
Live Photo 壁紙が静止画になってしまう原因と、PHLivePhoto を保存する分岐
6アプリで計測した『保存→設定完了率』72%と、権限ダイアログを出す順番の最適化
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-06-23
壁紙アプリの色がくすむ問題と Display P3 — 広色域を配信パイプラインで詰める
同じ壁紙が実機ではくすんで見える。原因は広色域(Display P3)とsRGBの取り違えでした。6本の壁紙アプリで色域を詰めた実装手順に加え、画素が本当に広色域かを見分ける方法、配信前ゲートのスクリプト、Android広色域までまとめます。
アプリ開発2026-07-14
壁紙を長押しして、プレビューと保存メニューを出す — Rork の Expo アプリで context menu を組む
壁紙ギャラリーのカードを長押ししても何も起きない。iOS利用者はプレビュー付きのメニューを期待します。Pressableだけでは届かない理由から、zeegoでのネイティブcontext menu実装、スクロールとの競合解消、保存・共有アクション、Android向けの自前フォールバックまで、動くコードでまとめます。
アプリ開発2026-06-29
クリップボード連携のUXを整える — iOSのペースト許可バナーを増やさずに「コピー」と「貼り付け」を成立させる
expo-clipboard で「コピー」と「貼り付け」を実装するとき、iOS のペースト許可バナーが頻発して使い勝手を損なうことがあります。バナーの発生条件を押さえ、hasStringAsync で内容を読まずにボタンを出し分ける設計をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →