.changelog/3318.md
get-modules.sh now exits non-zero when fewer than 80% of cores download successfully, rejects HTML 404 pages disguised as zips via magic-byte validation, and clears the download cache and fails the build phase when 0 dylibs remain after extractionget-modules.sh shebang — Changed from #!/bin/sh to #!/bin/bash to match bash-specific arithmetic syntax already used in the script ((( )) expansions); added bash self-re-exec guard so Xcode build phases that call via /bin/sh still get the correct interpretermake_frameworks_retroarch.sh — Added bash self-re-exec guard so Xcode build phases that invoke the script via /bin/sh still run it under bash; also added explicit error checking for codesign, lipo, and vtool so framework-creation failures are counted and the build fails if all frameworks are brokenCoresRetro/RetroArch/scripts/tests/ with test_get_modules.sh and test_make_frameworks.sh covering: happy path, all-404 failure, partial failures, corrupt zip detection, pinned-date validation, pinned-date URL fallback, framework executable validation, and 80% threshold logic