Shipping an app globally is exciting. Managing its App Store metadata in 28 languages is not.
Every time I pushed a new version of my app, I had to:
- Open App Store Connect in the browser
- Click through every single locale
- Copy-paste "What's New" text into each one
- Write the same description in English, then somehow handle German, Japanese, Arabic…
- Generate screenshots for 5 device sizes × 28 locales = 140 images
- Upload all of them manually
I'm one person. This was eating 4–6 hours per release. So I built a tool to fix it.
What is Lookalization?
Lookalization is a macOS app for indie developers that handles two things:
• xcstrings management — browse, edit, and AI-translate all your in-app localization strings directly, without touching Xcode
• App Store Connect metadata — edit descriptions, keywords, what's new, and promo text for every locale, all from one place
Version 1.6 just shipped, and it adds the piece I was missing most: full App Store Connect integration with AI translation and automated screenshot upload.
⸻
What's new in v1.6
App Store Connect sidebar
Connect once with your ASC API key (stored securely in Keychain). Your apps and versions load into the sidebar. Pick a version, and all your localizations are right there — editable, with live character counts and limit warnings.
No more browser tabs. No more copy-pasting between windows.
One-click AI translation
Each metadata field (description, keywords, what's new, promotional text) has a ✨ button next to it. Press it, and Lookalization translates that field from your source locale to every other locale simultaneously — using Claude via AIProxy under the hood.
It runs in parallel, so 28 locales take roughly the same time as 1.
Screenshot generator + batch upload
This is the part that took the most time to get right.
The flow:
- Write a headline and subtitle in your language
- Pick a device size (iPhone 6.9", 6.5", iPad 13" Pro, etc.)
- Hit Generate & Upload All
Lookalization then:
• Translates the caption to all your ASC locales in one API call
• Renders a PNG for each locale using ImageRenderer
• Uploads each PNG to ASC via the screenshot upload API (reserve → chunk upload → MD5 commit)
• Shows live progress: Translating… → Uploading 4/28
What used to take an afternoon now takes about 90 seconds.
⸻
The technical bits (for the curious)
The screenshot upload to ASC is a 5-step pipeline that isn't well documented:
- fetchScreenshotSets(localizationId) → find or create a set for the display type
- reserveScreenshot(setId, name, size) → get upload operations + screenshot ID
- uploadScreenshotChunks(data, ops) → PUT each chunk per the operations list
- commitScreenshot(id, md5) → PATCH with uploaded: true + MD5 checksum
The MD5 is computed with CryptoKit.Insecure.MD5 and sent as a hex string. Without it, the commit silently fails — took me a while to figure that out.
For rendering, SwiftUI.ImageRenderer at @MainActor runs synchronously, which is exactly what you want when generating 28 images in a loop without any async confusion.
⸻
Who it's for
If you're a solo developer or small team shipping on the App Store with multiple language targets, the ROI on this tool kicks in within the first release.
It's available on the Mac App Store, free to try with a one-time Pro unlock.
Would love any feedback — especially from devs who've built similar pipelines or have ASC API war stories.
Top comments (0)