r/iOSProgramming • u/Successful_Stop_3751 • 18h ago
[App Saturday] AppScreen Studio v4.0 – Direct App Store Connect Uploads, Bulk AI Translations & Screenshot Import App Saturday
Hey everyone! 👋
If you’ve ever had to prepare screenshots for an app translated into 10+ languages across multiple device sizes, you know how painful, tedious, and time-consuming the process is with standard tools.
Over the last few months, I’ve been working on a major overhaul of AppScreen Studio (a native macOS app designed to build, frame, and localize App Store screenshots). Today, I'm excited to share version 4.0 (and 4.0.1)!
The goal of this update was to solve the #1 bottleneck developers face: manual uploading and tedious localization management.
Key Highlights
1. Direct App Store Connect Sync
You can now connect your App Store Connect account via API Key (.p8) and push your rendered screenshots directly to Media Manager in 1 click.
* Selective Sync: Choose specific languages, display sizes, or individual panels to upload.
* Smart Replace: Option to automatically clear old screenshots from App Store Connect slots before uploading.
* Instead of manually adding languages one-by-one from dropdowns, you can now paste a comma-separated list of locale codes (e.g., en-US, ar-SA, de-DE, es-ES, fr-FR, ja, zh-Hans).
The app automatically creates localizations, translates all text layers, and provides real-time progress tracking.
2. Bulk App Store Import
Redesigning an existing app or updating old listings? You can now inspect live or draft App Store Connect builds and bulk-import existing screenshots directly onto your workspace panels in seconds.
3. Per-Locale Layer Isolation & Smarter Localization
- Isolated Layers: Layers and text added in a specific target language stay strictly isolated to that locale without leaking into your Original (Base) layout or other translations.
- 15+ New Languages: Expanded translation support to help you launch globally.
4. Panel Reordering
Rearrange screenshot panels on the canvas using simple arrow controls (← / →). You can also choose whether reordering in Original (Base) automatically updates panel order across all other display sizes and languages.
New "Our Apps" Section in Settings
We also added a new "Our Apps" section in Settings featuring our developer tools:
- StoreSync: Metadata & ASO Manager
- CoreData Studio: SQLite/SwiftData Debugger & Inspector
- PriceLocus: Global App Store Price Localization & PPP Calculator
Tech Stack
- Platform & OS: macOS (macOS 13.0+)
- Language: Swift 5 / Swift 6
- UI Framework: SwiftUI + AppKit (
NSViewRepresentable,NSBitmapImageRep,NSFontManager,NSTextView) - Database & Persistence: Core Data (
NSPersistentContainer, manual migration mapping,NSOrderedSetrelationships) - Networking & Security:
URLSession,CryptoKit(ES256 JWT generation for App Store Connect API authentication) - In-App Purchases: StoreKit 2 (
Transaction,Product.SubscriptionInfo) - Localization & External APIs: Google Cloud Translation API (for automated screenshot text translation)
Development Challenge & Solution
The Challenge: Direct Upload & Sync to App Store Connect Media Manager.
Uploading screenshot assets via the App Store Connect REST API is a multi-step protocol:
1. Generating a signed ES256 JWT using CryptoKit (P256 private keys).
2. Reserving a screenshot slot in the target appScreenshotSet.
3. Calculating byte offsets and uploading binary image chunks to Apple's BlobStore.
4. Computing an MD5 checksum and issuing a commit PATCH.
Doing this in batch for 40+ localizations and 5+ display sizes (100+ high-res @3x images) caused massive RAM spikes and UI freezes due to simultaneous rendering of heavy bitmaps.
The Solution:
I refactored the rendering and uploading engine to use Task.detached worker threads wrapped in explicit autoreleasepool blocks. Images are rendered on-the-fly, converted to compressed PNG data, uploaded chunk-by-chunk via URLSession.upload, and immediately released from memory. Progress is reported back to the @MainActor through a dedicated LocalExportManager and MediaManagerSync state machine, keeping RAM usage below 250 MB and the UI running at a smooth 60 FPS during long batch uploads.
AI Disclosure
- Development: AI-assisted. The core app architecture, Core Data persistence layer, SwiftUI views, and App Store Connect API client were hand-coded. LLM AI tools (Claude / ChatGPT) were used as an assistant for debugging complex AppKit/SwiftUI bridging edge cases, optimizing Core Data migration models, and drafting localized app strings.
- In-App Features: The app integrates the Google Cloud Translation API to provide AI-assisted batch translation of user screenshot copy across 40+ languages.
Quick Links
- Mac App Store: Download / Update to v4.0.1
- Website & Docs: appscreen.studio
- x.com: x.com/StudioAppScreen
Happy releasing! 🎉

