Debug build settings that survive into a Release build
This will not block your upload. What it means is that the binary you submit is not a release binary: it may be unoptimised, it may carry testability symbols, and code behind #if DEBUG may be live in the app people download.
Why it matters
Build settings are per configuration, and it is easy to change one while the Debug column is selected and believe it applies everywhere. The result compiles and uploads perfectly well, which is exactly why it goes unnoticed.
ENABLE_TESTABILITY in Release exposes internal symbols and disables some optimisations. SWIFT_OPTIMIZATION_LEVEL left at -Onone ships an unoptimised build, which is slower in a way reviewers and users both notice on older devices.
A DEBUG=1 preprocessor definition in the Release configuration is the one with behavioural consequences: every #if DEBUG branch in your code, and in your dependencies, is compiled into the app you ship. That can mean verbose logging, a staging endpoint, or a developer menu reachable by a customer.
ONLY_ACTIVE_ARCH left on for Release is the narrower case: it builds for the architecture of the machine or device you happen to be targeting rather than all of them, which is right for a fast debug cycle and wrong for something you archive.
None of this is a rejection reason on its own, which is exactly why it persists. The build uploads, the review passes, and the app people download is the one you never actually tested.
How to fix it
- In Build Settings, switch the view to All and Levels so you can see which configuration each value belongs to.
- Set ENABLE_TESTABILITY to No and SWIFT_OPTIMIZATION_LEVEL to -O for Release.
- Remove DEBUG=1 from GCC_PREPROCESSOR_DEFINITIONS and SWIFT_ACTIVE_COMPILATION_CONDITIONS in the Release column.
- Archive and check the behaviour you expect from a release build, particularly anything behind a debug flag.
The guidelines behind it
Read from Apple’s App Review Guidelines as last updated October 16, 2026.
What ReviewAhead checks
Release build settings. Debug-oriented settings should not survive into the Release configuration.
- ENABLE_TESTABILITY, SWIFT_OPTIMIZATION_LEVEL and ONLY_ACTIVE_ARCH in the release configuration.
- DEBUG conditions and a DEBUG=1 definition surviving into Release.
- Names the setting, the configuration it was found in, and what the release value should be.