跪拜 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 ↗