RORK LABJP
PLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updatesPLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updates
Articles/App Dev
App Dev/2026-06-27Intermediate

Building Production-Ready iOS Apps with Rork

Rork generates Expo / React Native apps. A practical look at architecture, surfacing crashes in production, list performance, the eas submit workflow, and the iOS review pitfalls to clear — learned from real review round-trips.

Rork548iOS Development13Production ReadyApp Architecture

Premium Article

Building production iOS apps with Rork requires more than tutorials. Scalable architecture, crash monitoring, list performance, and a steady submission workflow are what actually decide whether your release goes smoothly.

Here are patterns validated at real production scale, step by step.

MVVM Architecture

Rork app scalability depends on proper architecture design.

class ProductListViewModel {
    @Published var products: [Product] = []
    @Published var isLoading = false
    @Published var error: Error?
    
    private let service: ProductService
    
    init(service: ProductService) {
        self.service = service
    }
    
    @MainActor
    func loadProducts() async {
        isLoading = true
        defer { isLoading = false }
        
        do {
            products = try await service.fetchProducts()
        } catch {
            self.error = error
        }
    }
}
 
struct ProductListView: View {
    @StateObject var viewModel: ProductListViewModel
    
    var body: some View {
        List(viewModel.products) { product in
            ProductRow(product: product)
        }
        .task {
            await viewModel.loadProducts()
        }
    }
}

Performance Optimization

struct OptimizedProductList: View {
    @StateObject var viewModel: ProductListViewModel
    
    var body: some View {
        List {
            ForEach(viewModel.products, id: \.id) { product in
                ProductRow(product: product)
                    .onAppear {
                        viewModel.prefetchProduct(after: product)
                    }
            }
        }
    }
}
 
class ImageCache {
    static let shared = ImageCache()
    private var cache: NSCache<NSString, UIImage> = NSCache()
    
    func image(for url: URL) -> UIImage? {
        return cache.object(forKey: url.absoluteString as NSString)
    }
}

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
Surface native and JS crashes (and white screens) in production with Sentry in Expo, then patch them over OTA
Ready-to-use FlatList and expo-image settings that keep list screens from re-rendering and bloating memory
A pre-submission checklist that cuts eas submit and App Store Connect round-trips
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 $15 for lifetime access
View Membership →

Related Articles

App Dev2026-04-03
Beta Testing Your Rork App with TestFlight: from Internal Testers to Public Launch
A practical walkthrough for shipping a Rork or Rork Max app to TestFlight, covering both the EAS Submit route and the Xcode Organizer route. Includes export compliance, internal (100) and external (10,000) tester limits, and the 90-day build expiry that quietly breaks long betas.
App Dev2026-08-23
Bumping targetSdk to 36 surfaced a 16 KB warning. These are two different deadlines
The August 31 target API 36 requirement and the February 1, 2027 16 KB page size requirement are separate conditions. Here is how to inspect your AAB without installing the NDK, and why a LOAD misalignment and a zip boundary miss need completely different fixes.
App Dev2026-08-21
Apple's automated pass reads what your purpose strings are for, not whether they exist
Submit a Rork or Expo iOS build and you may get it back under Guideline 5.1.1 with a note about placeholder or otherwise insufficient purpose strings. Here is how to read a rejection that names no key, and how to rewrite the strings from app.json.
📚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 →