From 99f8524e27f1aaaeb3e5e53a708424f1289efa98 Mon Sep 17 00:00:00 2001 From: ainopara Date: Tue, 21 Apr 2026 13:20:00 +0800 Subject: [PATCH 1/2] Fix macOS privacy settings links --- .../Views/Onboarding/OnboardingView.swift | 10 ++--- .../Views/OnboardingPermissionsStep.swift | 37 +++++++++++++------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/macOS/WritingTools/Views/Onboarding/OnboardingView.swift b/macOS/WritingTools/Views/Onboarding/OnboardingView.swift index 6d322e2..2dfc562 100644 --- a/macOS/WritingTools/Views/Onboarding/OnboardingView.swift +++ b/macOS/WritingTools/Views/Onboarding/OnboardingView.swift @@ -150,6 +150,9 @@ import ApplicationServices .onAppear { refreshPermissionStatuses() } + .onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification)) { _ in + refreshPermissionStatuses() + } } private func refreshPermissionStatuses() { @@ -159,12 +162,7 @@ import ApplicationServices } private func openPrivacyPane(anchor: String) { - if let url = URL( - string: - "x-apple.systemsettings:com.apple.settings.PrivacySecurity.extension?\(anchor)" - ) { - NSWorkspace.shared.open(url) - } + SystemSettingsOpener.openPrivacyPane(anchor: anchor) } private func openCommandsManager() { diff --git a/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift b/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift index 3191d98..d9ecff1 100644 --- a/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift +++ b/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift @@ -9,6 +9,29 @@ import SwiftUI import ApplicationServices import CoreGraphics +enum SystemSettingsOpener { + @MainActor + static func openPrivacyPane(anchor: String? = nil) { + let query = anchor.map { "?\($0)" } ?? "" + let urls = [ + "x-apple.systempreferences:com.apple.preference.security\(query)", + "x-apple.systempreferences:com.apple.preference.security", + ] + + for urlString in urls { + if let url = URL(string: urlString), NSWorkspace.shared.open(url) { + return + } + } + + let settingsApp = URL(fileURLWithPath: "/System/Applications/System Settings.app") + NSWorkspace.shared.openApplication( + at: settingsApp, + configuration: NSWorkspace.OpenConfiguration() + ) + } +} + struct OnboardingPermissionsStep: View { @Binding var isAccessibilityGranted: Bool @Binding var isScreenRecordingGranted: Bool @@ -118,12 +141,7 @@ struct OnboardingPermissionsStep: View { Spacer() Button("Open Privacy & Security") { - if let url = URL( - string: - "x-apple.systemsettings:com.apple.settings.PrivacySecurity.extension" - ) { - NSWorkspace.shared.open(url) - } + SystemSettingsOpener.openPrivacyPane() } .buttonStyle(.link) .accessibilityLabel("Open Privacy and Security settings") @@ -144,12 +162,7 @@ struct OnboardingPermissionsHelper { Task { @MainActor in try? await Task.sleep(for: .milliseconds(200)) - if let url = URL( - string: - "x-apple.systemsettings:com.apple.settings.PrivacySecurity.extension?Privacy_Accessibility" - ) { - NSWorkspace.shared.open(url) - } + SystemSettingsOpener.openPrivacyPane(anchor: "Privacy_Accessibility") } } From 2b8ecca2f67f535e907b9b81acc7488660550118 Mon Sep 17 00:00:00 2001 From: ainopara Date: Tue, 21 Apr 2026 14:36:55 +0800 Subject: [PATCH 2/2] Try current Privacy settings URL before legacy pane --- .../Views/Onboarding/Views/OnboardingPermissionsStep.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift b/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift index d9ecff1..05b2720 100644 --- a/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift +++ b/macOS/WritingTools/Views/Onboarding/Views/OnboardingPermissionsStep.swift @@ -13,8 +13,11 @@ enum SystemSettingsOpener { @MainActor static func openPrivacyPane(anchor: String? = nil) { let query = anchor.map { "?\($0)" } ?? "" + // System Settings still registers the x-apple.systempreferences URL scheme. let urls = [ + "x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension\(query)", "x-apple.systempreferences:com.apple.preference.security\(query)", + "x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension", "x-apple.systempreferences:com.apple.preference.security", ]