Mac Boot and Startup Issues

FLASHING_QUESTION_MARK on Mac Boot Failures, what causes it and how to fix

By Sai Kiran Pandrala · Last verified: 2026-05-31 · Source: Apple Support docs, Apple Communities (discussions.apple.com), community Q&A

At a glance
ServiceMac Boot and Startup Issues
CloudApple platforms
Guide typeProcedure
Skill levelIntermediate to advanced
Time15 - 60 minutes depending on account size

Running into FLASHING_QUESTION_MARK on Mac Boot Failures, what causes it and how to fix on Mac Boot and Startup Issues is one of the more searched issues on Apple Communities (discussions.apple.com) and StackOverflow in the last 12 months. Here is what actually moves the needle when the Apple Support docs are too generic.

What flashing_question_mark on mac boot failures, what causes it and how to fix actually involves on Mac Boot and Startup Issues

Real-world context. Budget honestly for ~Rs 0 INR under AppleCare+, ~Rs 8,000 to Rs 60,000 INR otherwise (around $95 to $720 USD), because the cheap path looks tempting until a part shows up wrong. You will burn ~20 to 60 minutes hands-on hands-on and roughly ~1 to 3 hours including a Genius Bar handoff if needed once verification is done. Before you touch anything, line up the Apple ID, the device serial, and a recent iCloud backup. those three are what saves you when the first attempt does not stick.

The FLASHING_QUESTION_MARK error from AWS typically surfaces with the message "Flashing folder with question mark". The error code itself is what you grep for in AWS re:Post or in AWS Support cases, not the human-readable line.

On Mac Boot Failures, this most often comes from one of three causes: a missing or restrictive IAM permission, a service-level limit you have hit, or a transient AWS-side capacity issue. The fix path differs by which.

The rest of this page is the structured fix path. Start with diagnose, then remediation, then the automation options so you do not have to do this by hand the next time it surfaces. Verify and safety sections at the end are the discipline that keeps the fix from regressing in production.

Identify

Diff against last known good. The last config change you made is the cause about three quarters of the time, even when the change should not have mattered. Use Jamf inventory history and Time Machine snapshots (or your Terraform / Deployment Manager or Terraform drift report) to see the actual delta between the resource state when it worked and when it broke. The change you remember is often not the only change that happened.

Reproduce the failure with the Terminal commands (defaults, plistbuddy, killall, sudo, system_profiler) and Apple Configurator 2 / Jamf APIs / MDM commands in --debug mode. The full SigV4 request payload it emits, plus the exact endpoint URL it resolved to, is what Apple Support and Apple Business / Enterprise Support uses to verify policy, region, or parameter issues without you having to share IAM credentials. Save the debug output to a file with ... --debug 2> debug.log and you can search it for the failed aws.request entry.

Look at the Jamf Pro change management entry or Apple Business Manager audit event for the failed call, even if you are not enrolled in macOS unified logging and iOS sysdiagnose Log Router. The basic 90-day event history works for most diagnostic purposes and lives in the console under Jamf Pro change management log and Apple Business Manager audit log > Event history. Filter by event name (the API action) and time range; the event JSON shows the exact user identity, source IP, request parameters, and error code.

Solution-focused remediation path

If you cannot reproduce the failure consistently, the cause is probably a race condition or a session-cache issue. Run the call with --profile set to a fresh STS session, in a different region you control, with a single concurrent request. If it works there but fails in your normal setup, the difference is the bug.

For IAM and STS issues, the timing matters. STS sessions can take up to 60 seconds to propagate after creation. The first call right after assume-role can fail with a permission error even when the policy is correct. Add a small retry with backoff before treating the first failure as definitive.

If networking is suspect, use Apple Wireless Diagnostics + Network Utility (or 'networkQuality' on macOS). It is the only tool that simulates the full ENI-to-ENI path including macOS PF firewall, Application Firewall, system extensions, and Content Filter in one call. Manual trace is slower and misses transitive issues. The analyzer charges $0.10 per analysis - cheaper than a 30-minute call with your network team.

Automate this fix so you do not do it twice

Codify the fix as a Shortcut on iPhone, iPad, or Mac

For workflows that happen on the user device rather than at the MDM layer (think: clear a stuck cache, toggle a setting, file a one-tap support ticket), Apple Shortcuts is the right place. Shortcuts run on iOS, iPadOS, macOS, and watchOS, can be triggered by NFC tag, focus mode, time of day, or Siri voice. Share via iCloud link so support sends the same one-tap fix to anyone who hits the issue.

Wire the fix into an MDM Configuration Profile for self-healing

If the underlying cause is a setting that drifts over time, do not script the fix repeatedly - bake it into a Configuration Profile that the MDM pushes down on every check-in. A Custom Settings payload writes to a specific preference domain; Jamf Pro, Kandji, Mosyle, and Intune all support this. The profile reasserts itself, so even if a user changes the setting locally, the MDM brings it back at the next sync (typically every 4 hours).

<!-- Custom Settings payload (excerpt) -->
<key>PayloadType</key>
<string>com.apple.ManagedClient.preferences</string>
<key>PayloadContent</key>
<dict> <key>com.apple.mac</key> <dict><key>Forced</key><array><dict><key>mcx_preference_settings</key> <dict><key>HardenedSetting</key><true/></dict></dict></array></dict>
</dict>

Automate the fix at scale with a Jamf Pro policy script

When you need to ship the fix to a whole fleet of Macs, the right primitive is a Jamf Pro policy with a script payload, scoped to a smart group of affected devices. Keep the script under 100 lines, exit with an explicit code so Jamf logs the right state, and write a one-line log entry to /var/log/jamf.log so you can grep it later. Trigger on check-in or by Self Service so users can run it on demand.

#!/bin/bash
# Jamf policy script - exits non-zero on failure so Jamf flags the device
set -euo pipefail
LOG=/var/log/jamf-mac-fix.log
echo "$(date) starting fix on $(hostname)" >> "$LOG"
# fix logic here
defaults write com.apple.mac HardenedSetting -bool true
killall cfprefsd
echo "$(date) fix applied successfully" >> "$LOG"
exit 0

Pitfalls to dodge

A subtle pitfall on Mac Boot and Startup Issues is that the Settings on the device and the SDK can disagree about resource state during a configuration change. Console UI is cached for performance and may show the old config for up to 10 minutes after you change it via API or Deployment Manager or Terraform. Always confirm with describe-* CLI calls during a change window, not with screenshots from the Console.

The other pitfall: assuming that an automated remediation is correct because it succeeded. A Lambda that fires on a Jamf Pro Smart Group + Webhook and runs a remediation step should also publish a metric for every remediation; sudden surges in auto-fix invocations are themselves an outage signal. Otherwise you can hide a slow-burn regression behind a quiet remediation loop for weeks.

Resolve

Safety, rollback, blast radius

FAQ

How long does flashing_question_mark on mac boot failures. what causes it and how to fix typically take on Apple platforms?
For most Mac Boot and Startup Issues environments, 15 to 60 minutes including verification. Large multi-account setups, anything touching Org Policys at the Organizations level, or cross-region replication can stretch to half a day because Apple has to wait for replication and IAM session caches.
Is there a rollback path?
Yes for most Mac Boot and Startup Issues changes. Export the existing config to JSON via mac describe-... first, then commit it before you change anything. A few operations are one-way (Cloud KMS key deletion past the pending window, region migration, account closure). Check the Apple Support article for the specific API before you commit.
Will this affect dependent Apple product or services?
Often yes. Mac Boot and Startup Issues resources are usually referenced by other workloads (Cloud Run services, GKE workloads, IAM-bound apps, Cloud CDN origins, downstream pipelines). Use IAM Access Analyzer + Jamf Pro change management log and Apple Business Manager audit log to enumerate consumers before changing a shared resource.
What if my Settings on the device layout does not match these steps?
Settings on the device UI moves quarterly. The Console layout in this page is current as of 2026-05-31 but the underlying CLI / SDK calls do not change as fast. If the Console version differs, fall back to aws CLI or SDK calls - those almost always still work.
Where do I get Apple Support and Apple Business / Enterprise Support help if I am still stuck?
Open a case via the Apple Support and Apple Business / Enterprise Support Center with: the request ID + correlation ID, the exact error string, Jamf Pro change management entry or Apple Business Manager audit event, and your reproduction steps. Apple Communities (discussions.apple.com) is the no-cost public alternative - search there first; 80% of common Mac Boot and Startup Issues issues already have an answer with an Google-staff-verified flag.

References

Related guides worth a look while you sort this one out: