Back to Provenance

3103

.changelog/3103.md

3.3.13.6 KB
Original Source

Fixed

  • JIT Indicator Tap Presentation — replaced full-screen cover sheet with a compact UIAlertController dialog showing a brief status message when the user taps the JIT HUD pill.
  • JIT Indicator Interaction — enabled user interaction on the overlay so the pill button is actually tappable (previously blocked by isUserInteractionEnabled = false).
  • JIT Indicator Hidden for Recommended CoresupdateForCore(requiresJIT: false) previously forced .notApplicable, hiding the JIT pill for cores where JIT is beneficial but not required (Dolphin, PPSSPP, Flycast, Mupen64Plus). The indicator now correctly shows for all JIT-relevant cores.
  • JIT .unavailable status now reachableJITStatusViewModel accepts a coreJITIsRequired flag; when the core strictly needs JIT and it cannot be acquired, the indicator shows the red .unavailable state and guidance text instead of silently falling back.

Added

  • CoreJITSupportLevel enum — new type (required / automatic / recommended(fallbackMode:) / notApplicable) that drives differentiated JIT messaging based on how critical JIT is for each core.
  • Differentiated JIT alert messages — the compact tap-to-details alert now tailors its message and title to the support level:
    • Required: "JIT Required — this game may crash without JIT. Enable via SideJITServer, AltStore, or StikDebug."
    • Recommended: "Running in {fallback} mode — JIT recommended for better performance. Enable via …"
    • Automatic: "JIT managed automatically by this core — no action required."
  • "How to Enable JIT" action button — when JIT is inactive and user action is recommended/required, the alert now shows a secondary button that presents a brief guide listing AltStore, SideStore, SideJITServer, StikDebug, and TrollStore.
  • PVToast integrationJITStatusIndicatorViewController now posts in-game toast notifications on JIT status transitions (acquired → .jit success toast; unavailable for required core → persistent .error toast).

Changed

  • JIT Core Detection — extracted the hardcoded JIT core keyword list into a new JITCoreCapability enum in PVUIBase, making it the single source of truth for JIT-relevant core identification.
  • coreRequiresJIT renamed to isJITRelevant — the previous name was misleading because flycast/mupen only benefit from JIT rather than requiring it. A new coreIsJITRequired(_:) helper gates the strict-require path. The old name is kept as a deprecated alias.
  • PVEmulatorViewController+JIT uses authoritative PVJITRequirement — indicator setup now derives CoreJITSupportLevel directly from core.jitRequirement (PVPrimitives.PVJITRequirement) rather than a boolean flag, enabling full-fidelity support-level messaging including .automaticWithFallback (Dolphin) and .optional(fallback:) (PPSSPP / Mupen / Flycast).
  • JITCoreCapability delegates to PVJITRequirementRegistryisJITRelevant(_:) and coreIsJITRequired(_:) now consult the runtime registry (populated from Core.plist by CoreLoader) as the primary source, falling back to compile-time keyword matching only for partial identifiers or pre-CoreLoader contexts. Removes dependence on hardcoded strings.
  • Fixed JITCoreCapability.azahar.isJITRequired — was incorrectly true; Azahar and emuThree use .automaticWithFallback (plist optional) so they are JIT-relevant but not JIT-required.
  • Added PVJITRequirement = optional to PPSSPP Core.plist — the plist key was missing, causing the runtime registry to classify PPSSPP as notRequired even though its Swift override is .optional(fallback: "Interpreter").