RORK LABJP
TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the roundTOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
Articles/App Dev
App Dev/2026-05-31Intermediate

Getting Users All the Way to 'Set as Wallpaper' on iOS — Save-to-Photos Permissions and Shortcuts

iOS apps cannot set the wallpaper directly. Here is how I handle add-only photo permissions, Live Photo saving, guiding users to Settings, and Shortcuts automation, with real numbers from running six wallpaper apps.

iOS109wallpaper app23expo-media-library3permissions7Shortcuts3Rork515

Premium Article

When you build a wallpaper app, the single hardest thing to ship is one tiny button: "Set as Wallpaper." You can lay out the gallery, sync favorites, wire up ads, and add a paywall — but on iOS that one button never behaves the way you expect. This is where a lot of indie developers hit a wall: the app saves the image and then leaves the user wondering what to do next.

I have been building apps on my own since 2014, and across that time my Dolice apps have passed 50 million cumulative downloads. I still run six wallpaper and calming-image apps in parallel. As someone who makes images as an artist, the real problem was never the code — it was the design of how a picture actually reaches someone's screen. This article shares the save flow I have refined across those six apps, along with the numbers I measured along the way.

iOS Does Not Let Apps Set the Wallpaper

Start by accepting one constraint: iOS exposes no public API for a third-party app to change the user's lock-screen or home-screen wallpaper programmatically. There is no equivalent of Android's WallpaperManager.setBitmap() available to iOS app developers.

So a "Set as Wallpaper" button can really only do two things:

  1. Save the image into the user's photo library (camera roll)
  2. Guide the user into the Settings app's wallpaper screen to pick the saved image

If you design without knowing this, you promise a "one tap and the wallpaper changes" experience, and your reviews fill with "it doesn't actually set anything." In my first version the button said "Set as Wallpaper" while it only saved the file. The mismatch between expectation and behavior pulled down my first-week review average. Renaming it to "Save to Photos" and rebuilding the post-save guidance fixed the gap.

Saving Only Needs add-only Permission

People reach for full "Photos access" when all they want is to save. But a wallpaper app only needs to add; it never needs to read the user's existing photos. That is exactly what the add-only access level, introduced in iOS 14, is for.

Asking for full access (PHAccessLevel.readWrite) shows the heavy "Allow access to all your photos?" dialog. Add-only (PHAccessLevel.addOnly) shows the much lighter "Allow adding to Photos?" wording instead. A wallpaper app has no reason to want to see all of someone's pictures, and review scrutiny over privacy is lighter when you ask for less.

On the native side, give a save-specific usage string in Info.plist:

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Used to save your chosen wallpaper to your photos. We never read your existing photos.</string>

The key detail is using NSPhotoLibraryAddUsageDescription (add-only) rather than NSPhotoLibraryUsageDescription (read/write). If you include the latter, you are declaring full-access intent for an app that only saves, which leaves room for a reviewer to ask why you need access to every photo.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Saving with PHAccessLevel.addOnly so you never ask for full photo-library access
Why Live Photo wallpapers end up static, and the PHLivePhoto branch that fixes it
A measured 72% save-to-set completion rate across six apps, and the permission-timing change that moved it
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

App Dev2026-06-23
Why Wallpapers Look Dull on Device: Taming Display P3 in the Delivery Pipeline
The same wallpaper looked dull once set on device. The culprit was a mix-up between wide-gamut Display P3 and sRGB. Beyond embedding profiles, here is how to tell whether the pixels are truly wide-gamut, a pre-delivery gate script, and the Android wide-color story, across six wallpaper apps.
App Dev2026-04-18
Building a Wallpaper App with Rork and Getting It on the App Store — A Full Account
A complete record of building a wallpaper app with Rork from zero to the App Store — the iOS wallpaper API limitation, WebP optimization, and how to structure revenue without breaking the experience.
Dev Tools2026-04-23
Why Your Rork App Can't Save Images to the Camera Roll — A Complete Fix
Image and video saving often breaks the moment a Rork-generated app leaves the simulator. This guide walks through the permission model, expo-media-library quirks, and Android 13+ scoped storage changes that reliably trip people up.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →