April 28, 2026 - Website and docs refresh
Rebuilt the static website, landing page, documentation, support, legal, credits, roadmap, and status pages.
Everything needed to install, configure, audit, troubleshoot, and contribute to MacShield. The docs cover both the native macOS app and the browser privacy extension.
MacShield is split into a native macOS menu bar app and an optional Chrome extension. Start with the app if you want to protect local macOS applications. Add the extension if you also want browser chat blur and website locks.
Use the signed release when available. Open the DMG, drag MacShield into Applications, then launch from Applications or Spotlight.
git clone https://github.com/AryanVBW/MacShield.git
cd MacShield
open MacShield.xcodeproj
Build with Xcode 15 or newer on macOS 13 or newer. The app uses SwiftUI, AppKit, LocalAuthentication, CoreBluetooth, IOKit, ServiceManagement, Sparkle, and HotKey.
| Requirement | Purpose |
|---|---|
| macOS 13 Ventura or newer | Base runtime target for the native app. |
| Xcode 15 or newer | Required when building from source. |
| Touch ID capable Mac | Recommended for fastest unlock. Password fallback is available. |
| Apple Watch | Optional proximity unlock and relock behavior. |
| Chrome or Chromium browser | Required only for the browser extension. |
The backup password is stored in the macOS Keychain and is used when biometric authentication is unavailable or disabled.
Open System Settings, then Privacy and Security, then Accessibility. Enable MacShield. Without this permission, MacShield cannot reliably detect app launches and switches.
Use the app picker to add apps that should require authentication. Start small: test with a non-critical app before protecting messaging, finance, or developer tools.
Auto-lock on idle, lock on sleep, lock when Apple Watch leaves range, and auto-close inactive protected apps are optional. Enable only the behaviors that match your workflow.
The Chrome extension adds two browser-focused protections: privacy blur for supported web apps and a website lock for custom domains.
chrome://extensions/.BrowserExtensions/chrome-extension.WhatsApp, Instagram, Telegram, Messenger, Discord, Slack, X/Twitter, LinkedIn, Gmail, Outlook, Teams, Facebook, Signal, and Element are covered by the extension's content script and CSS rules.
Set a master password, then add any domain such as github.com or notion.so. The lock guard runs at document_start and hides the page until password or biometric verification succeeds.
chrome.storage.local stores extension preferences, locked site configuration, password hash, password salt, and biometric credential references.chrome.storage.session stores unlocked hostnames for the current browser session and clears when Chrome closes.| Permission | Used by | Why it is needed |
|---|---|---|
| Accessibility | macOS app | Detect app launches, activations, and switches for protected apps. |
| Screen Recording | macOS app | Support privacy blur overlays for visible chat content. |
| Bluetooth | macOS app | Detect Apple Watch proximity and wrist state signals. |
| Notifications | macOS app | Show update and unlock status messages. |
| Chrome storage | Extension | Persist local preferences, password hash, and locked site settings. |
| Chrome tabs | Extension | Coordinate lock state across tabs for the same hostname. |
| All URLs | Extension | Allow user-selected website locks on any domain before page content renders. |
github.com, linear.app, or notion.so.MacShield uses a focused service architecture so app monitoring, authentication, overlays, updates, watch proximity, and browser controls can evolve independently.
MacShield/
App/ App entry, AppDelegate, lifecycle wiring
Core/
Managers/ ProtectedAppsManager, SafetyManager
Services/ App monitor, auth, overlays, blur, idle, sleep, watch, updates
Storage/ UserDefaults wrapper, Keychain manager
UI/ Menu bar, settings, onboarding, picker, overlay, components
Models/ App settings, protected apps, blur config, lock sessions
BrowserExtensions/
chrome-extension/ Manifest V3 extension with lock, blur, popup, auth pages
docs/ Static website, documentation, legal, support, status
The native app is distributed outside the Mac App Store because sandboxing would prevent reliable app activation interception and multi-monitor overlay behavior.
| Service | Responsibility |
|---|---|
AppMonitorService | Observes protected app launches, activations, deactivations, and terminations. |
OverlayWindowService | Creates lock overlays across displays. |
AuthenticationService | Coordinates Touch ID and password authentication. |
WatchProximityService | Tracks Apple Watch proximity and lock state. |
BlurOverlayService | Manages native chat blur behavior. |
UpdateService | Handles Sparkle update checks and notifications. |
| Key | Purpose |
|---|---|
ms_password_hash | Salted SHA-256 password hash. |
ms_password_salt | Random salt used for password verification. |
ms_locked_sites | Object of hostnames selected for Website Lock. |
ms_blur_level | Blur strength preference. |
ms_hide_mode | Hide content instead of applying blur. |
unlockedSites | Session-only list of unlocked hostnames. |
No. The extension stores only a salted hash. If the password is lost, remove and reinstall the extension to reset local state.
No. MacShield does not include telemetry or a backend account system. Protected app choices remain local.
Critical system tools may be blocked by the safety system to prevent lockouts and recovery problems.
Only if you explicitly enable the extension in Incognito from Chrome extension settings.
Open an issue before large changes. Small fixes, documentation improvements, selector updates for supported websites, and accessibility improvements are welcome.
Rebuilt the static website, landing page, documentation, support, legal, credits, roadmap, and status pages.
Documented browser extension behavior, Touch ID via WebAuthn, website lock, storage keys, and permission rationale.
Appcast lists the latest native app update package for Sparkle-based updates.