如果您认真对待使用密码保护(使用)您的应用程序,隐藏菜单栏不会有太大帮助,正如您已经得出的结论。
为了防止匿名用户执行需要身份验证的操作,您实际上需要在代码中创建逻辑来保护这些操作并检查用户是否确实正确地进行了身份验证,每次他们尝试做某事(选择一个菜单项或按下一个按钮)。
话虽如此,您可以通过禁用相关菜单项来防止匿名用户打开首选项窗口。就我个人而言,我更喜欢实际禁用首选项窗口中的相关控件,以便用户可以探索不同的选项,但也了解他们需要进行身份验证。您可以遵循 Apple 用于 macOS 系统偏好设置窗口的模型,这将锁定许多(但不是全部)偏好设置窗格,具体取决于特定窗格以及用户是否进行了身份验证。
一个好的起点可能是 Apple 开发者网站上的相关文档。例如:https ://developer.apple.com/documentation/securityfoundation
如果您仍然只想隐藏菜单栏,您可以随时执行以下操作:
[NSMenu setMenuBarVisible:(BOOL)onOff];
但我相信最好使用@jatoben 的答案中的解决方案,NSApplication
因为presentationOptions
这可以让您真正禁用功能性。只是隐藏菜单栏[NSMenu setMenuBarVisible:(BOOL)onOff]
并不会禁用 menuItems 的快捷方式,因此您仍然可以使用⌘,
.
在旁注中,我相信如果您只是使用显示密码对话框,您会省去所有这些麻烦
NSModalSession session = [NSApp beginModalSessionForWindow:passwordDialog];
[NSApp runModalSession:session];
这会以模态方式显示应用程序的对话框,这意味着所有其他窗口以及几乎所有菜单项都会自动禁用……</p>