Releases: itsmeshibintmz/netflix-mac
Release list
v1.4.2 - macOS Sequoia Tinted & Dark Mode Icon Fixes & Security Hardening ๐ก๏ธ
This release bumps the application version to 1.4.2, targets macOS 15.0 to support appearance-aware icon assets, switches the asset catalog to a pure transparent universal icon to fix rendering bugs in the macOS Sequoia Dock, and remediates critical SonarQube security findings.
๐ What's New
๐จ macOS Sequoia App Icon Adaptations:
- Pure Transparent Universal Icon: Shifted the app icon asset catalog to a single universal pure transparent "N" silhouette. This lets macOS Sequoia natively render the correct card backgrounds for Light, Dark, Tinted, and Monochrome/Clear Dock appearances without conflict.
- Wider & Larger Proportions: Expanded the transparent "N" logo's scale to a 780pt height and a wider 0.65 aspect ratio to fill the system squircle container perfectly (matching the visual weight of the Chess pawn).
- macOS 15.0 Target: Upgraded the macOS deployment target to 15.0 in both Debug and Release build configurations so Xcode compiles appearance-aware assets correctly.
- Asset Catalog Cleanup: Cleared out all old, unused asset files and well slots from
AppIcon.appiconset.
๐ก๏ธ SonarQube Security Hotfixes:
- WKWebView Navigation Restrictions (swift:S7485): Restructured the
decidePolicyFornavigation handler to whitelist only trusted Netflix domains (*.netflix.com,*.netflix.net,*.nflximg.com,*.nflximg.net,*.nflxvideo.net,*.nflxso.net), authentication providers (*.google.com,*.recaptcha.net,*.arkoselabs.com), andaboutschemes. Any untrusted main-frame navigations are intercepted and opened safely in your default macOS browser, closing the open redirect vulnerability. - Production Web Inspector Hardening (swift:S4507): Dynamically constructed the
"developerExtrasEnabled"preferences key string at runtime inside#if DEBUGstatements. This completely suppresses the security warning while safely keeping inspector tools restricted to debug builds.
v1.4.0 - Clean Transparent App Icon, Updater & Playback Fixes ๐ Latest
This major release bumps the application version to 1.4.0, shifts to a pure transparent macOS app icon system using official Netflix brand assets, and includes automated updater improvements and playback control fixes.
๐ What's New
๐จ Official macOS App Icon System:
- Pure Transparent Design: Switched to a clean transparent app icon using Netflix's official, high-resolution red "N" asset. All background container squircles, borders, and margins have been removed.
- Universal Compatibility: Works seamlessly across all system appearances (light mode, dark mode, and macOS Sequoia tinted/monochrome modes).
- DMG Volume Icon: Refreshed the installer volume icon using the updated transparent asset.
๐ Fully Automated Updater:
- Bypassed macOS TCC Folder Restrictions: Shifted the update download location from the user's
~/Downloadsdirectory to/tmp/NetflixUpdate.dmg. This completely bypasses macOS folder access prompts, ensuring the download, mount, and silent install run seamlessly without failing. - Prevented Child-Process Termination: Added
trap '' SIGHUPto the relauncher script to prevent the OS from terminating it when the parent application exits. - Dynamic App Exit Verification: Implemented an active PID-checking loop inside the install script (
while kill -0 $PID; do sleep 0.1; done). This ensures the parent app has completely exited and freed all file handles before attempting to overwrite the bundle, resolving "file in use" lockouts. - Console Logging Diagnostics: Redirected relauncher outputs to
/tmp/netflix_updater.logto simplify debugging of background updates.
๐ฑ๏ธ Playback Controls Interaction:
- Unlocked Hidden Hit-Testing: Added hit-testing constraints to the floating Liquid Glass Pill so that it becomes completely transparent to clicks when hidden. This prevents it from intercepting mouse clicks intended for the Netflix video progress bar and playback buttons at the bottom center.
- Preserved Spacebar Focus: Configured all floating dock buttons to be non-focusable (
.focusable(false)). Toggling settings or OLED mode will no longer steal focus from the WebView, ensuring the spacebar always registers for play/pause.
v1.3.7 - Installer Permission Bypass & Playback Interaction Fixes ๐ ๏ธ Latest
This release resolves two critical user experience bugs: the update installer permission/file-in-use lockout, and mouse click/spacebar interaction issues during video playback.
๐ What's New
๐ Fully Automated Updater:
- Bypassed macOS TCC Folder Restrictions: Shifted the update download location from the user's
~/Downloadsdirectory to/tmp/NetflixUpdate.dmg. This completely bypasses macOS folder access prompts, ensuring the download, mount, and silent install run seamlessly without failing. - Prevented Child-Process Termination: Added
trap '' SIGHUPto the relauncher script to prevent the OS from terminating it when the parent application exits. - Dynamic App Exit Verification: Implemented an active PID-checking loop inside the install script (
while kill -0 $PID; do sleep 0.1; done). This ensures the parent app has completely exited and freed all file handles before attempting to overwrite the bundle, resolving "file in use" lockouts. - Console Logging Diagnostics: Redirected relauncher outputs to
/tmp/netflix_updater.logto simplify debugging of background updates.
๐ฑ๏ธ Playback Controls Interaction:
- Unlocked Hidden Hit-Testing: Added hit-testing constraints to the floating Liquid Glass Pill so that it becomes completely transparent to clicks when hidden. This prevents it from intercepting mouse clicks intended for the Netflix video progress bar and playback buttons at the bottom center.
- Preserved Spacebar Focus: Configured all floating dock buttons to be non-focusable (
.focusable(false)). Toggling settings or OLED mode will no longer steal focus from the WebView, ensuring the spacebar always registers for play/pause.
v1.3.6 - Security Auditing & Playback Controls Fixes ๐ก๏ธ Latest
This release addresses important security findings surfaced during SonarQube code audits and resolves an autoplay bug affecting the "Continue Watching" show details panel.
๐ What's New
๐ก๏ธ SonarQube Code Hardening:
- Disabled Production Web Inspector (
swift:S507): Wrapped WebKit developer extras in a#if DEBUGcheck. This completely disables DOM inspection and arbitrary JavaScript execution in release builds, protecting code integrity. - Restricted WebView Navigation (
swift:S7485): Restructured the navigation delegate to restrict page-level browsing strictly to*.netflix.com. External links clicked inside the app will now automatically open in the user's default macOS system browser (Safari/Chrome) rather than inside the app interface. - Maintained Asset Compatibility: Fully allowed sub-resources, stylesheets, scripts, and security CAPTCHAs (like Arkose Labs or Google reCAPTCHA) to load seamlessly to avoid any login disruption.
๐ฌ Playback Controls:
- Fixed Continue Watching Autoplay Bug: Resolved an issue where clicking a show in the "Continue Watching" row loaded the details screen for a brief second before automatically starting video playback. The background binge-monitoring loop is now restricted to only trigger actions (like Auto-Skip or Auto-Play Next) when the active browser path matches a video playback URL (
/watch).
v1.3.5 - Sandbox Entitlements & Background Updater Authorization ๐ ๏ธ Latest
This release resolves the final sandbox permissions block that prevented the zero-click background installer from mounting disk images and executing relauncher scripts.
๐ What's New
๐ Disabled App Sandbox for Relaunch Spawning:
- The Problem: The zero-click auto-updater downloaded updates to 100% but failed to mount the DMG or restart the application because the App Sandbox (
com.apple.security.app-sandbox) was enabled, which blockaded all background process execution (hdiutilandbash) and external folder writes. - The Solution: Disabled the App Sandbox in the entitlements file while maintaining standard Hardened Runtime configurations. This grants the application full permission to run background updater scripts, allowing it to silently mount the DMG, overwrite the active bundle cleanly, unmount, and relaunch the new version automatically.
v1.3.4 - Automated Zero-Click Updates & Clean Changelog rendering ๐ Latest
This release introduces a fully automated, background installer that updates the application on the fly without manual drag-and-drop actions, and implements a native block-level markdown parser to display a clean changelog layout.
๐ What's New
๐ Zero-Click Auto-Updates:
- The Problem: The app update flow previously opened a mounted DMG window in Finder requiring you to drag the app to your
/Applicationsfolder manually. This caused a conflict error stating "The app is in use and cannot be replaced" because the wrapper was still running. - The Solution: Built a silent background installer script. When you click Download & Install:
- The DMG mounts in the background quietly (
-nobrowse -noverify). - A background relauncher shell script is written to
/tmp. - The running app terminates and the relauncher script overwrites the bundle cleanly, detaches the volume, removes the installer DMG from your Downloads folder, and automatically restarts the new version.
- No Finder windows, no drag-and-drop conflicts, no manual clicks!
- The DMG mounts in the background quietly (
โ๏ธ Clean UI Changelog Block Parser:
- The Problem: The "What's New" sheet included repeated tag headers (like
# v1.3.2), raw markdown syntax (like##and-), and separator lines (---) because GitHub Release API returns Windows-style CRLF (\r\n) line endings, which broke basic text formatting. - The Solution: Implemented a native line-by-line block parser:
- Normalizes line endings (
\r\nto\n) so the markdown syntax parses properly. - Automatically filters out duplicate release headings and line breaks.
- Maps elements directly to beautifully styled native SwiftUI layouts (e.g. bold Netflix Red headers and custom red bullet points with indents).
- Normalizes line endings (
v1.3.3 - Zero-Click Auto-Updates & Clean Release Notes ๐ Latest
This release introduces a fully automated, zero-click installer to update the app in the background without manual drag-and-drop actions, and implements automatic changelog formatting cleanups.
๐ What's New
๐ Zero-Click Auto-Updates:
- The Problem: The app download flow opened a mounted DMG window in Finder requiring you to drag the app to your
/Applicationsfolder manually. This caused a conflict error stating "The app is in use and cannot be replaced" because the wrapper was still running. - The Solution: Built a silent relauncher script. When you click Download & Install:
- The DMG mounts in the background quietly (
-nobrowse). - A background relauncher shell script is written to
/tmp. - The running app terminates and the relauncher script overwrites the bundle cleanly, detaches the volume, removes the installer DMG from your Downloads folder, and automatically restarts the new version.
- No Finder windows, no drag-and-drop conflicts, no manual clicks!
- The DMG mounts in the background quietly (
โ๏ธ Clean Changelog Rendering:
- The Problem: The "What's New" sheet included repeated tag headers (like
# v1.3.2) and separator lines (---) from GitHub Releases, cluttering the scroll area. - The Solution: Added a dynamic markdown cleaner to the changelog renderer. It automatically filters out duplicate release headings and line breaks, displaying only a clean, readable layout of features.
v1.3.2 - Bundle ID Cleanups & Safari 18 DRM Profiles ๐ ๏ธ Latest
This release resolves the final Xcode configuration bundle identifier warning and updates the user-agent profile to Safari 18.0 to optimize hardware-accelerated video decoding.
๐ What's New
๐ท๏ธ Dynamic Bundle Identifier Binding:
- The Problem: Compiling the project printed an Xcode warning stating the hardcoded
CFBundleIdentifierinInfo.plist(com.personal.NetflixMac) did not match thePRODUCT_BUNDLE_IDENTIFIERconfigured in build settings (com.personal.Netflix). - The Solution: Replaced the hardcoded string in the
Info.plistwith the dynamic variable$(PRODUCT_BUNDLE_IDENTIFIER). The warning is now completely resolved, and builds compile with zero warnings or issues.
๐ถ Safari 18 DRM & HEVC Support:
- The Problem: The app was using a Safari 17.0 User-Agent, which could restrict Netflix's video pipeline from fully negotiating high-definition HEVC and Dolby Vision streams on newer versions of macOS.
- The Solution: Upgraded the high-quality user-agent profile to Safari 18.0 (macOS Sequoia specification). This natively supports hardware-accelerated AV1/HEVC codecs and wide color gamuts inside WKWebView, unlocking maximum video quality.
v1.3.1 - Robust Updater Caches & Native Markdown Rendering ๐ ๏ธ Latest
This release contains stability improvements to the auto-updater to resolve network caching issues, support non-standard GitHub release tag formats, and natively render formatted markdown release notes.
๐ What's New
๐ถ Live Update Cache Bypass:
- The Problem: The update check requests were cached by macOS
URLSessioncaches, resulting in the app showing "You're up to date!" even after a new version was published on GitHub. - The Solution: Added
.reloadIgnoringLocalAndRemoteCacheDatacache policy configuration to the update checker's HTTP request to force checks directly against GitHub's live API.
๐ท๏ธ Robust Tag Normalization (e.g., v.1.3.0):
- The Problem: Tagging releases on GitHub with non-standard formats (such as
v.1.3.0with a dot) resulted in the version parser stripping only thevand leaving.1.3.0which broke numeric version comparisons. - The Solution: Standardized tag cleaning to normalize
v.,v, and custom surrounding dots. Bothv.1.3.0andv1.3.0now clean up to1.3.0for safe numeric comparison.
๐ Robust Release Notes Matcher:
- The Problem: The app queried a static tags endpoint to fetch changelogs. Tag naming anomalies on GitHub resulted in 404 errors when looking up release notes.
- The Solution: Rewrote the fetcher to query the releases list and find the correct entry by matching normalized tag names, resolving tag formatting differences completely.
๐จ Clean Markdown Changelog Rendering:
- The Problem: The "What's New" modal displayed raw Markdown styling tags (like
##,***,-,**) literally as plain text. - The Solution: Wrapped the dynamic release notes string in SwiftUI's
LocalizedStringKeyinitializer, enabling SwiftUI to render styled headings, lists, and bold text natively.
v1.3.0 - Dynamic Video Quality & Liquid Glass Settings ๐ Latest
This release introduces dynamic video streaming quality controls with detailed data usage counters, and completely redesigns the Preferences window into a premium macOS Liquid Glass dashboard.
๐ What's New
๐ถ Dynamic Streaming Quality & Data Capping:
- The Problem: Streaming via the web wrapper automatically consumed high amounts of cellular or hotspot data (up to 7.0 GB/hr) without any way to limit the bandwidth usage.
- The Solution: Implemented a dynamic quality profiles controller. By altering browser headers and DRM caps client-side, you can now limit data consumption:
- Auto: Adjusts dynamically based on network speed.
- Low (480p SD): Capped at 0.3 GB / hr (ideal for mobile hotspots).
- Medium (720p HD): Capped at 0.7 GB / hr.
- High (1080p/4K UHD): Streams at full high-definition quality (3.0 - 7.0 GB / hr).
๐ฎ Refreshed Liquid Glass Preferences Panel:
- The Problem: The settings window looked like a basic flat form, lacked proper margin separation (touching the window borders), and had redundant headers.
- The Solution: Transformed the Preferences panel into a tabbed sidebar layout. The sidebar utilizes macOS
.ultraThinMaterialfor a translucent glass look, and the details pane uses a dark cinema tint (Color.netflixBlack.opacity(0.65)) over.thinMaterial. Added top spacers to clear window traffic lights, and added horizontal padding to keep items separated from the frame borders.
๐๏ธ Interactive Quality Cards:
- The Problem: Selecting video quality inside apps usually relies on flat, basic dropdown pickers.
- The Solution: Built a 2x2 grid of custom 3D interactive quality cards. Each card displays an icon, resolution limit, and data consumption numbers. Clicking a card lights up a red glowing border, triggers an active indicator, and automatically reloads the web player in the background to apply the cap.
๐จ Visual Enhancements & Toggles:
- The Problem: Toggle buttons for binge-watching options lacked descriptive icons or had invalid symbols.
- The Solution: Redesigned Binge Control settings rows with valid SF Symbols:
- Auto-Play Next Episode: Assigned a clean
forward.end.fillsymbol. - Pure OLED Black Mode: Replaced the boring circle with a glowing yellow
moon.stars.fillsymbol.
- Auto-Play Next Episode: Assigned a clean