●TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13●OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude Code●SIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App Store●MAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessage●NATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core ML●SEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round●TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13●OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude Code●SIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App Store●MAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessage●NATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core ML●SEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
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.
When I opened Beautiful HD Wallpapers on the new iPhone Air, I noticed the wallpaper preview in the home screen settings was slightly off. Not dramatically broken — just enough to be noticeable to anyone paying attention to the quality of what they're building. That pushed me to work through the same resolution update exercise I've done every year since 2013, when I started developing iOS apps independently.
I currently maintain four of them: Beautiful HD Wallpapers, Ukiyo-e Wallpapers, Relaxing Healing, and Law of Attraction Everyday — with cumulative downloads that crossed 50 million some time ago. Each year, Apple introduces new hardware, and each year some layout assumption somewhere in the codebase turns out to be wrong. In 2026, iPhone Air introduced a previously unseen 420pt width that sits between the standard and Plus/Max models, which is exactly the kind of subtle change that breaks conditional logic that felt solid the year before.
Rork generates good layout code, but when a device appears with dimensions the AI hasn't seen in its training context, the generated code won't automatically account for it. The resolution-specific adjustments have to come from you. This article walks through the approach I took when updating all four apps simultaneously, with the goal of making future device adjustments a single-file change rather than a codebase-wide hunt.
The 2026 iPhone Point Resolution Matrix
Before writing any fix, it helps to have the relevant numbers in one place. iOS layouts operate in points (pt), not pixels. On Retina displays, 1pt maps to 2px or 3px depending on the screen density, but the numbers your layout code deals with are always points. This is also true in Rork's React Native environment.
The primary iPhone families you need to account for in 2026:
iPhone Air (2026): 420pt × 912pt (3x Retina)
iPhone 17 Pro: 402pt × 874pt (3x Retina)
iPhone 17 Pro Max / 16 Pro Max: 440pt × 956pt (3x Retina)
The number to pay close attention to is iPhone Air's 420pt width. It doesn't match any previous device, falls between the standard (393pt) and Plus (430pt) sizes, and breaks width-based categorization logic. Any conditional that reads width > 400 ? 'large' : 'standard' will classify iPhone Air as 'large', even though it's considerably narrower than Pro Max at 440pt.
Height variations matter too, particularly for image-heavy or full-screen apps. iPhone 17 Pro runs 22pt taller than the standard model; Pro Max runs 82pt taller. For any application that renders content edge-to-edge — wallpaper viewers, photography apps, meditation apps with full-bleed backgrounds — those differences translate directly to misalignment.
Getting Screen Dimensions in a Rork Project
Since Rork runs on Expo and React Native internally, you access screen measurements through the same React Native APIs you'd use in any other project. For responsive components that need to re-render when orientation changes, useWindowDimensions is the right choice.
The hook triggers a re-render when the screen dimensions change. For portrait-locked apps like wallpaper apps, rotation never happens, so that re-render cost never occurs either. In those cases, a module-level constant from Dimensions.get('window') is simpler and avoids any hook-related overhead.
import { Dimensions } from 'react-native';// Evaluated once at module load — reliable for portrait-locked appsconst SCREEN_WIDTH = Dimensions.get('window').width;const SCREEN_HEIGHT = Dimensions.get('window').height;
All four of my apps use the module-level constant approach. Portrait locking is intentional — wallpapers and healing audio apps don't benefit from landscape mode — so the extra reactivity of the hook would only add noise.
✦
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
✦Understand why iPhone Air's 420pt width breaks existing Rork layouts and get the exact code to fix it across all affected screens
✦Get working implementation patterns for full-screen image display, Safe Area handling, and device-specific constant management from a 50M+ download app
✦Learn the 4-app simultaneous update workflow and sync strategy that cuts per-device resolution maintenance to a single file change
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.
The first version of my iPhone Air fix scattered if (width === 420) branches directly inside individual screen components. It worked, but the affected code was spread across different files. The next new device size would require another search-and-update pass through the entire codebase.
Before building DeviceConfig.ts, my four apps had a combined 29+ places where device-specific values were computed inline using ternary operators and if-else chains. After centralizing, every component that previously had its own device-branching logic now imports from one file. A new iPhone means one file changes.
The explicit DeviceProfile type provides a secondary benefit: if you add a new device to DEVICE_PROFILES and forget to specify a field, TypeScript flags it at compile time rather than failing silently at runtime.
Full-Screen Wallpaper Display and Aspect Ratio
The wallpaper display challenge is getting images to fill the screen without distorting their proportions or leaving visible gaps. iPhone Air's 420×912 aspect ratio is approximately 0.46 — nearly identical to the standard 393×852 model — which means resizeMode="cover" handles it cleanly for full-screen display. The visual difference between the two is minimal.
The more common issue emerges in thumbnail grids. When screen width drives column layout, a 3-column grid on a 420pt screen produces different column widths than the same grid on a 393pt screen. If those widths aren't integers, React Native may encounter sub-pixel rendering issues that show up as subtle image blurriness.
// ❌ May produce non-integer column widthsconst columnWidth = SCREEN_WIDTH / 3;// ✅ Round down and distribute the remainder as paddingconst columnWidth = Math.floor(SCREEN_WIDTH / 3);const totalGridWidth = columnWidth * 3;const horizontalPadding = (SCREEN_WIDTH - totalGridWidth) / 2;
Absolute positioning with explicit dimensions ensures the image fills the viewport on any device without requiring device-specific style overrides.
FlatList Performance with Variable Screen Widths
A detail that often gets missed in resolution update discussions: changes to screen width affect how React Native computes layouts inside FlatList grids. iPhone Air's non-standard 420pt width can push layout calculations into paths that weren't exercised before, occasionally triggering extra recomputation cycles.
The most reliable performance optimization for grid views is implementing getItemLayout. This tells React Native the exact size and position of each item in advance, allowing it to skip measurement entirely during scroll.
For getItemLayout to work correctly, all items must have the same height. Since DEVICE.thumbnailHeight is derived from DeviceConfig.ts, the value stays consistent as long as the centralized config is what drives the layout.
In Beautiful HD Wallpapers, adding getItemLayout to the main wallpaper grid eliminated the scrolling jank that appeared when a user had several hundred wallpapers loaded. The improvement was immediate and required no other changes.
Safe Area and Dynamic Island
Dynamic Island, present in iPhone Pro models since 2022 and now in iPhone Air as well, changes how the top Safe Area inset behaves. The useSafeAreaInsets hook from react-native-safe-area-context returns accurate values that account for Dynamic Island height automatically.
import { useSafeAreaInsets } from 'react-native-safe-area-context';const HomeScreen: React.FC = () => { const insets = useSafeAreaInsets(); return ( <View style={{ flex: 1, paddingTop: insets.top, paddingBottom: insets.bottom }}> {/* Content is inset from Dynamic Island and home indicator */} </View> );};
The provider setup is required, and Rork-generated code sometimes omits it:
// App.tsx — root component must be wrappedimport { SafeAreaProvider } from 'react-native-safe-area-context';export default function App() { return ( <SafeAreaProvider> <RootNavigator /> </SafeAreaProvider> );}
Without SafeAreaProvider, useSafeAreaInsets returns zeros for everything, which appears to work on most screens but breaks on devices where the notch or Dynamic Island actually overlaps content. When I tested on iPhone Air, insets.top returned 59pt — consistent with other Dynamic Island devices. A quick debug log during development confirms this.
if (__DEV__) { console.log('Safe Area insets:', JSON.stringify(insets)); // Expected output: {"top": 59, "bottom": 34, "left": 0, "right": 0}}
Splash Screen Configuration
New form factors occasionally cause splash screens to render incorrectly — usually as padding appearing on unexpected sides when resizeMode isn't set to cover.
With resizeMode: "cover", the splash image scales to fill the screen on any device, cropping at the edges as needed. The design implication is that important visual elements should sit in the center of the splash image, away from the cropping zone at the edges.
I updated all four apps to this configuration in 2025, and no splash screen has needed adjustment for any device since. It's a small investment that compounds over time as each new iPhone generation arrives.
App Store Screenshot Requirements for 2026
Each new iPhone family adds a new screenshot requirement. The four primary device sizes for App Store Connect submissions in 2026 are:
6.9-inch (iPhone 17 Pro Max / 16 Pro Max): 1320 × 2868px
6.7-inch (iPhone Air): 1260 × 2736px
6.3-inch (iPhone 17 Pro): 1206 × 2622px
6.1-inch (iPhone 17 / 16): 1179 × 2556px
For four apps with five to ten screenshots each, that's up to 80 images to keep current whenever the UI changes. The only realistic approach at this scale is to build screenshots in a design tool that supports multi-size exports from a single master.
In Figma, I maintain master artboards at the largest size (1320 × 2868px for Pro Max) with UI elements as linked components. Smaller device artboards use the same components scaled down. When the app UI changes, updating one component propagates across all device sizes automatically. The iPhone Air artboard was added by creating a new frame at 1260 × 2736px and linking to the same components — the work took about 20 minutes per app.
Syncing the Configuration Across Multiple Apps
When the same layout constants need to stay consistent across multiple Rork projects, a minimal shell script handles the sync without requiring a shared module infrastructure.
#!/bin/bash# sync_device_config.shSOURCE="./src/config/DeviceConfig.ts"TARGETS=( "../beautiful-wallpapers/src/config/DeviceConfig.ts" "../ukiyoe-wallpapers/src/config/DeviceConfig.ts" "../relaxing-healing/src/config/DeviceConfig.ts" "../law-of-attraction/src/config/DeviceConfig.ts")for target in "${TARGETS[@]}"; do cp "$SOURCE" "$target" echo "Synced: $target"done
Run this script when DeviceConfig.ts changes. It's simple and auditable — you can see exactly what changed in each app's repo history.
Twelve years into maintaining multiple apps simultaneously, the principle I keep returning to is: reduce the surface area of change. Device-specific constants in a centralized file, splash screens configured to handle any aspect ratio, screenshot templates that scale without redesign — each of these is a decision made once that continues to pay back on every future update.
Where to Start
If you're working through a similar update, begin by finding every place in your project that reads from Dimensions.get('window') directly.
If that returns more than five results, consolidating those into a central DeviceConfig.ts will pay off immediately. The iPhone Air case is a good forcing function: it's different enough from prior devices to break conditional logic, but similar enough in aspect ratio that many full-screen layouts look fine at first glance. The subtle breakages — grid thumbnail misalignment, sub-pixel rendering issues in image lists, Safe Area assumptions — are worth tracking down and fixing before users on new devices file reviews about them.
Thanks for reading — I hope this helps you get ahead of the next new iPhone before it arrives.
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.