跪拜 Guibai
← All articles
Swift · SwiftUI · Artificial Intelligence

App Review Is Slowing to a Crawl While Scam Apps Sail Through

By 东坡肘子 ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

When a scam developer can push 368 approved submissions in a year while a known indie waits 12 days, the review bottleneck isn't just slow — it's misallocated. AI-driven submission volume will only grow, so any developer shipping to the App Store has a stake in whether review moves toward risk-based triage or stays a one-size-fits-all queue.

Summary

Jeff Johnson surfaced a Mac App Store extension with AI-generated screenshots, a fake 4.9 rating, and reviews predating its release — from a developer who racked up 368 approved submissions in a year. At the same time, Marco Arment's new app sat in review for 12 days. The bottleneck is structural: AI slashes the cost of producing apps and iterations, so both legitimate and high-risk submissions flood the same queue, and the current model treats each one as an isolated event.

A proposed fix borrows from credit scoring: developers with clean histories get streamlined checks, freeing reviewers to dig into high-frequency, bulk, or anomalous accounts. Critics warn this could tilt the field toward incumbents and paying developers, raising the barrier for newcomers. The counterargument is that good standing wouldn't mean skipping review — just fewer redundant checks — while flagged accounts wouldn't be banned, just examined more deeply.

The underlying shift being debated is whether App Review should move from single-point "review" to behavioral judgment, where submission frequency, app similarity, and metadata anomalies feed into risk assessment. That conversation is happening alongside a wave of Swift and Xcode tooling updates: Xcode 27's headless MCP server enables a full prompt-to-simulator loop without the IDE's UI, iOS 26's DataDetector replaces NSDataDetector with a modern async Swift API, and ContinuousClock offers a reliable alternative to Date() for measuring elapsed time.

Takeaways
— A Mac App Store extension used AI-generated screenshots and fake pre-release reviews, yet passed review repeatedly — its developer had 41 apps and 368 approved submissions in one year.
— Marco Arment's new app waited 12 days in review during the same period, illustrating how the queue treats high-volume and one-off submitters equally.
— Jeff Johnson proposed a credit-like system: developers with clean histories get faster reviews, while high-frequency or anomalous accounts get deeper scrutiny.
— Critics argue a reputation-based system could favor incumbents and paying developers, making it harder for newcomers to enter the App Store.
— Xcode 27 beta 5 added `xcrun mcp-server`, enabling a headless prompt-to-simulator workflow that builds, previews, runs, and verifies apps without opening the Xcode UI.
— iOS 26's `DataDetector` replaces `NSDataDetector` with a Swift-native async API that identifies emails, phone numbers, dates, addresses, monetary amounts, measurements, flight numbers, and tracking numbers.
— `ContinuousClock` is monotonic and includes device sleep time, making it the correct tool for measuring real-world elapsed time — `Date()` is for recording points in time, not durations.
— XCUITest can drive automated App Store screenshot and promo video generation by treating marketing assets as reproducible build artifacts from the real running app.
— WWDC 2026 introduced `ContentBuilder`, a unified result builder that replaces separate `ViewBuilder`, `ToolbarContentBuilder`, and `CommandsBuilder` APIs and improves SwiftUI type-checking performance.
— GlyphKit extracts individual character vector outlines via Core Text and draws them in SwiftUI Canvas for precise glyph-level layout control, distinct from Text's full typesetting system.
Conclusions

The review bottleneck is a downstream consequence of AI lowering app production costs: more submissions hit the same fixed-capacity review pipeline, and the current per-submission model has no mechanism to distinguish a serial scammer from a first-time indie.

Johnson's credit-score proposal and the pushback against it mirror a tension that appears in every platform marketplace — efficiency through reputation versus openness to newcomers — and App Review is now hitting that tension at scale.

Headless Xcode via MCP represents a step change: a coding agent can now drive the full build-run-verify loop without the IDE's UI, which makes CI and agentic workflows on macOS far more automatable.

The shift from `Date()` to `ContinuousClock` for timing is a small API change that corrects a widespread category error — using a wall-clock timestamp to measure duration — and the fix has been available since Swift 5.7 but remains under-adopted.

Using XCUITest to generate marketing assets from the real app, not mockups, turns testability into a cross-functional asset: the same deterministic UI state that serves a test also serves a screenshot, a demo, or a localized promo video.

Concepts & terms
ContentBuilder
A SwiftUI result builder introduced at WWDC 2026 that unifies ViewBuilder, ToolbarContentBuilder, and CommandsBuilder into a single builder, reducing type-checking overhead when composing heterogeneous content.
Headless Xcode (xcrun mcp-server)
A background service added in Xcode 27 beta 5 that exposes Xcode's MCP (Model Context Protocol) capabilities to external coding agents without launching the Xcode UI, enabling automated project creation, building, preview rendering, and simulator interaction.
ContinuousClock
A monotonic clock from Swift's Clock protocol (Swift 5.7) that includes time elapsed during device sleep, making it the correct tool for measuring real-world durations, unlike Date which represents an absolute point in time.
DataDetector (iOS 26)
A modern Swift replacement for NSDataDetector that provides an AsyncSequence of strongly-typed semantic matches — emails, phone numbers, dates, addresses, monetary amounts, measurements, flight numbers, and tracking numbers — using native Swift Ranges.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗