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-04-18Intermediate

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.

Rork515wallpaper app23App Store78indie dev28app release2iOS109

A wallpaper app is one of the more approachable genres for an indie developer. The feature set is simple, the content is the star, and it has many of the traits of apps that stick around on the App Store for a long time.

I've run wallpaper and calming-themed apps as an indie developer for years. Building a new one with Rork was a natural extension of that, and this piece is a full record of taking it from zero to release. I'll be honest about the parts that went smoothly and the parts that got stuck. In particular, the fact that iOS won't let an app set the wallpaper directly is something worth knowing before you plan anything — it changes the design — so I give it proper space below.

Planning — deciding not to build "just another wallpaper app"

The first thing I did was install more than thirty existing wallpaper apps and actually use them. What struck me was how many were just "a big pile of images stuffed into an app."

What I wanted to build was an app with a small, curated set of images, made carefully all the way down to the download experience. My goal was that ten images someone loves the taste of would beat a hundred generic ones.

Deciding this direction up front kept my instructions to Rork consistent. When the experience you want is put into words, that's exactly what carries over to a generative tool.

Building the UI in Rork — what worked and what fought back

What worked:

A wallpaper app's main screen is a grid of images. This is squarely in Rork's wheelhouse, and when I said "make a gallery screen that shows images in a grid, and opens a full-screen preview on tap," it produced a surprisingly complete first version.

Placing the "download" button in the detail view was also just a few rounds of natural-language tweaking to land where I wanted it.

What fought back:

The skeleton animation while images load (the grey placeholder frames) was hard to fine-tune. "Make the fade-in a bit slower" didn't land well, and I ended up editing Rork's generated code directly. Generative tools are great at framing the whole structure at once, but for this kind of feel-based adjustment, it's sometimes faster to touch the output yourself.

On iOS, an app can't set the wallpaper directly — this is the design fork

This is the single most important thing to know before building a wallpaper app. iOS has no public API for an app to set the home or lock screen wallpaper programmatically. Private APIs that attempt it exist, but submitting one to the App Store gets you rejected. Even if you want an app that finishes the job with a "Set as wallpaper" button, that experience simply can't be built officially.

There's really only one realistic design. You save the image to Photos (the camera roll) first, then guide the user: "Please set it as your wallpaper from the Photos app or the Settings app." Rork produces React Native (Expo) apps, so saving uses expo-media-library.

import * as MediaLibrary from 'expo-media-library';
import * as FileSystem from 'expo-file-system';
 
// Save the wallpaper to the camera roll. Since iOS can't "set wallpaper"
// directly, this function's only job is to hand a full-res image to Photos.
async function saveWallpaper(remoteUrl) {
  const { status } = await MediaLibrary.requestPermissionsAsync();
  if (status !== 'granted') {
    // If permission was denied, surface a path to the Settings app
    return { ok: false, reason: 'permission-denied' };
  }
 
  const target = FileSystem.cacheDirectory + 'wallpaper.jpg';
  const { uri } = await FileSystem.downloadAsync(remoteUrl, target);
  await MediaLibrary.saveToLibraryAsync(uri);
 
  return { ok: true };
}

Turned around, this constraint means the one sentence right after saving decides the quality of the experience. When a save succeeds, I show an "Open Photos" button and a short three-step guide (open Photos → share → set as wallpaper). The limitation itself can't be changed, so the idea is to differentiate on how gracefully you guide. Explanations like "you can choose home screen, lock screen, or both" also live in that guidance text, not in a screen the app pretends to control.

Rork's in-editor preview can't fully verify the save-and-permission behavior, so I iterated on a real device with Rork Companion. The photo-library permission dialog is one of those things you can only truly judge on hardware.

Preparing the images — where most of the time went

More than the technical implementation, preparing the content took the most time. Images used as wallpaper need to be clearly cleared for copyright. I combined images I shot and made myself with CC0-licensed material.

Prepare resolution for the largest iPhone display. Recent large models sit around 1290×2796px, so I export with headroom — roughly 3000px on the long edge — and optimize from there for delivery. File size ties directly to perceived speed, so I recommend converting to WebP.

# Convert a source image to WebP. Quality around 82 tends to be the
# sweet spot between fidelity and file size.
cwebp -q 82 wallpaper_3000.png -o wallpaper_3000.webp
 
# To convert a whole folder at once
for f in originals/*.png; do
  cwebp -q 82 "$f" -o "webp/$(basename "${f%.png}").webp"
done

For the same image, WebP is often 20–30% smaller than JPEG, and it makes grid scrolling smoother. That said, at the moment of "saving" a wallpaper I want to avoid degradation, so I hand over the original high-quality image and use WebP only for the list thumbnails — a two-tier setup.

App Review will sometimes ask where the image copyright resides, so keep a note of sources and rights during this prep stage. It makes the first response to a rejection remarkably easy.

Structuring revenue — where to place ads without breaking the experience

Wallpaper apps are commonly distributed free and run on ad revenue. My own indie work has long been anchored on ad income too. The key here is not to let ads ruin how the work is seen.

Here's the placement I settled on.

Ad typeWhereIntent
InterstitialRight after a save actionSlip it in at a natural break. Frequency-cap to once every few times
RewardedUnlocking a limited packOnly those who want to watch, watch. Never forced
BannerAvoid on principleNever fix one over the grid or the preview

The thing I most wanted to avoid was overlaying a banner on the full-screen preview. A wallpaper's core value is showing that image large and pleasingly, so putting an ad on top of it erodes the very experience. Interstitials shown every time drive people away too, so I started at roughly one per three saves and tightened the frequency while watching real data. Rather than rushing to raise impressions, earning across total session volume by keeping people around longer tends to make revenue more stable in this kind of app.

App Store review — the road to approval

My first submission was bounced because the screenshot specs didn't meet requirements. I'd used the app screenshots straight from Rork, but the App Store needs screenshots at different resolutions per iPhone model.

I rebuilt the screenshots at each device size in Figma and resubmitted, and it was approved. From first submission to passing review took about six days; including the back-and-forth from rejection to resubmission, about ten days total. This varies a lot by app, but it's easier on you to treat a rejection as expected and prepare for it.

For wallpaper apps specifically, review tends to look at two things: rights, and whether there's substantive functionality. An app that only lines up images to save can be judged thin, so having one or two basic "app-like" touches — favorites, or category sorting — keeps things stable.

What I learned running it after launch

Looking back at the first month's numbers, downloads grew most not right after launch, but around three weeks in, when the in-App-Store search ranking started to climb.

Keyword settings (the "Keywords" field in App Store Connect) matter. Beyond "wallpaper," including compound keywords like "phone background" and "aesthetic iphone wallpaper" made the app surface across a wider range of queries. You can register more terms by packing the 100-character field with commas instead of spaces.

The biggest ongoing cost of running a Rork-built app on the App Store is content updates, not development. Designing a weekly or monthly cadence for adding new wallpapers from the start makes long-term operation far easier. I keep a stock of images a month ahead so updates never stall.

For anyone about to do the same with Rork

Building a wallpaper app with Rork turned out to be a very good entry point into indie development. The simple feature set stays within Rork's strengths, and since the quality of the content (the images) gives the app its character, it's a genre where you can lean on strengths outside engineering.

Rather than aiming for a perfect 100-image app from day one, aim for a curated 10–20 images someone will say "I love this selection" about. Add a save flow that understands the iOS constraint, and an ad design that doesn't break the experience. That order, I believe, is the entry point to indie development that lasts. Start with a single wallpaper you genuinely think is good. Thank you for reading.

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 →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

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-05-31
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.
Dev Tools2026-05-18
Adapting Your Rork iOS App to iPhone Air and 17 Pro Series — Layout Patterns for 2026's New Resolutions
When iPhone Air added a new point resolution to the mix, existing Rork apps needed layout adjustments. Based on updating 4 iOS apps simultaneously — including Beautiful HD Wallpapers with 50M+ downloads — this guide covers device constant management, Safe Area handling, and full-screen wallpaper display fixes.
📚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 →