Reviewers deliberately test on degraded networks and with edge-case data. Empty catch blocks (CWE-390) that swallow errors produce blank white screens — a visible failure that signals low quality and triggers rejection under Apple's guideline 2.1. ISO 25010:2011 fault-tolerance requires systems to continue operating under abnormal conditions. Beyond rejection risk, raw error messages ({error.message}) leak implementation details and destroy user trust. A screen that shows nothing when the network is bad is indistinguishable from a bug.
High because empty catch blocks and missing error states produce blank screens that reviewers directly observe, causing rejection under guideline 2.1.
Implement all four UI states for every data-fetching screen.
// src/screens/FeedScreen.tsx
export default function FeedScreen() {
const { data, isLoading, error, refetch } = useFeed();
if (isLoading) return <ActivityIndicator />;
if (error) return (
<View style={styles.center}>
<Text>Couldn't load your feed.</Text>
<Button title="Try again" onPress={refetch} />
</View>
);
if (!data?.length) return <EmptyState message="Nothing here yet — check back soon." />;
return <FlatList data={data} renderItem={renderItem} />;
}
Never render {error.message} or {error.toString()} directly. Test every screen with airplane mode enabled on the simulator before submission.
app-store-review-blockers.completeness-stability.error-states-handledhighcatch blocks that are empty or only call console.log(). Look for screens that fetch data but have no empty-state UI (no results, no content). Check for raw error objects being rendered to the user: {error.message}, {err.toString()}, JSON-stringified objects displayed in the UI. Look for undefined or null rendered where JSX expects a string. Also look for "Something went wrong" text with no actionable retry option. In Flutter, check FutureBuilder and StreamBuilder for missing snapshot.hasError and snapshot.connectionState == ConnectionState.none handling.catch blocks that swallow errors silently; raw error messages or stack traces visible in the UI; screens that show a blank white area when data fails to load; no retry mechanism after network errors."ProfileScreen catch block only calls console.log — network errors show a blank screen" or "FeedScreen has no empty-state UI — new users see a completely blank feed with no guidance"if (isLoading) return <LoadingSpinner />;
if (error) return <ErrorView message="Couldn't load data" onRetry={refetch} />;
if (!data?.length) return <EmptyState message="Nothing here yet" />;
return <DataList data={data} />;
{error.message} or {error.toString()} directly — show a friendly message instead