问题标签 [sfauthorizationpluginview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
373 浏览

objective-c - 无法将 NSView 连接到插座

我正在尝试扩展NameAndPassword代码示例,以便安全文本字段在按下返回键时运行身份验证操作(当前身份验证仅在通过 buttonPressed 操作按下按钮时才有效)。

我尝试了各种选项 - 创建一个 xib 文件和 ViewController 来替换现有的 nib 文件,但在这种情况下,我无法在 xib 自定义视图和连接到 nib 文件中的视图的IBOutlet之间创建连接我之前删除它。

我还尝试将 nib 文件中的现有安全密码字段连接到我自己创建的 App Delegate,但它也不想工作 - 我将文本字段控制拖到 appdelegate.h 界面部分,但没有显示任何行。

我知道这个示例现在已经过时了 - 我的问题是,我如何在这些视图上创建自定义操作,或者如何在新的表面上重新创建这个项目?

0 投票
2 回答
188 浏览

objective-c - Objective-C 库多重继承

我正在扩展 NameAndPassword 示例(https://github.com/skycocker/NameAndPassword),我需要在此实现文件中访问 IOBluetooth 方法:https://github.com/skycocker/NameAndPassword/blob/master/NameAndPasswordPlugin。米

界面如下所示:

如何让它继承自CBCentralManagerDelegateappdelegate 中的类似内容:

我需要EXNameAndPassword从 SFAuthorizationPluginView 和 CBCentralManagerDelegate 和其他东西继承。我相信这很容易,我只是一个 obj-c 初学者。我读过关于作文的文章,但我无法让它发挥作用。

我目前拥有的是

但我不断收到关于未合成属性的警告——我不必在不需要SFAuthorizationPluginView继承的项目中合成它们,因此我想我做错了什么。

0 投票
1 回答
155 浏览

objective-c - 在 Cocoa 中不按按钮触发回调

我需要能够在不按默认提供的按钮的情况下启动此示例中的身份验证过程。

我要运行的操作是 -(void)buttonPressed 方法,但是如果我尝试手动调用它,插件就会崩溃。它是通过按下该按钮自动调用的,但如果能够按下回车就很好了。

0 投票
1 回答
377 浏览

objective-c - 重绘一个 SFAuthorizationPluginView

我正在编写一个自定义的 AuthenticationPlugin,它有一些动态内容(目前以标签的形式)。我希望能够更新标签以响应事件。

假设以下声明:

  • parent = SFAuthorizationPluginView (subclass)
    • view = NSView (subclass)
      • NSTextField *label = ...

我编辑标签文本如下(注意:这可以从后台调度队列中执行):
[label setStringValue:@"new text"];

然后我尝试使用以下命令强制更新:

  • [label setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [label setNeedsDisplay:YES]; });
  • [label display];
  • dispatch_async(dispatch_get_main_queue(), ^{ [label display]; });
  • [[label cell] update];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] update]; });
  • [[label cell] needsDisplay];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] needsDisplay]; });
  • [view setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [view setNeedsDisplay:YES]; });
  • [self updateView];
  • dispatch_async(dispatch_get_main_queue(), ^{ [self updateView]; });
  • [self displayView]
  • dispatch_async(dispatch_get_main_queue(), ^{ [self displayView]; });

但是,我得到了没有动作和闪烁的灰色屏幕的混合(表明我已经引起了异常)。

有任何想法吗?(注意:我将在尝试各种选项时编辑这个问题)

0 投票
1 回答
1128 浏览

objective-c - 将按钮添加到 OSX 锁定屏幕

是否可以更改现有的 OSX 锁定屏幕?例如,如果我想在用户个人资料图片上方添​​加一个按钮,点击时显示“Hello World”。这可能吗?

目标是在单击按钮时运行 AppleScript。

编辑 -

在这里,您可以更改登录屏幕图像等,但它还包含几个已编译的 nib 文件,缩写为“LUI”,我假设它代表“锁定的用户界面”。我即将设置并行并尝试使用 xcode 3.2.6 在 Snow Leopard 中打开它们,看看我是否可以编辑笔尖。如果我能够做到这一点,编辑这些文件会违反他们的 TOS 吗?

另一种可能性是在其上方运行一个窗口。在屏幕锁定上,我可以通过说简单地获得屏幕保护程序上方的窗口

但是,这并没有覆盖登录屏幕。

我觉得这甚至不应该是可能的,但我在 Knock to Unlock 应用程序上看到了类似的东西。

0 投票
1 回答
1994 浏览

objective-c - 从受信任的应用程序访问 OS X 钥匙串项目

我正在创建一个钥匙串,然后向其中添加一个带有预定义的受信任应用程序列表的项目:

当我使用 Keychain Access 应用程序打开新创建的钥匙串时,我可以在受信任的应用程序列表中看到我的应用程序:

acl 设置

问题是,当我尝试通过一个受信任的应用程序从该钥匙串中读取密钥时

genericPassErr等于-25293,这意味着 Error: 0xFFFF9D33 -25293 The user name or passphrase you entered is not correct.

在代码的前面,我运行SecKeychainSetUserInteractionAllowed(0),如果我注释掉这一行,系统会提示我允许应用程序访问钥匙串,如果我授予它,一切运行正常。但是,重点是我需要能够在不提示用户的情况下做到这一点。我希望它能够像这样工作,因为我将应用程序添加到 ACL。你知道我做错了什么吗?

当我在附加的屏幕截图中勾选“所有程序都可以访问此项目”单选框时,一切都没有提示。但我不希望每个人都能够访问它,只是列出的应用程序。

0 投票
2 回答
756 浏览

objective-c - 从 OS X 授权插件访问钥匙串项目时出错

我正在使用NameAndPassword授权插件通过 OS X 锁定屏幕登录(该插件的固定版本,因为原始版本已损坏)。我需要它能够以某种方式访问​​存储的密码,目前我正试图通过使用钥匙串来实现这一点。

我设法创建了钥匙串并在其中保存了一些密码,以及在不提示用户的情况下访问密码所需的 ACL。添加到 ACL 的任何应用程序都可以正常工作,没有提示,但是当我尝试使用此 NameAndPassword 授权插件访问钥匙串-25293 The user name or passphrase you entered is not correct时,调用SecKeychainFindGenericPassword获取密码时出错。

我尝试将/Library/Security/SecurityAgentPlugins/NameAndPassword.bundle捆绑包和/Library/Security/SecurityAgentPlugins/NameAndPassword.bundle/Contents/MacOS/NameAndPassword可执行文件本身都添加到 ACL,但错误始终相同。

我相信这可能是因为这个插件是作为另一个用户(或根本没有用户)运行的。我能做些什么来摆脱这个错误?或者也许这不可能?在这种情况下,当它无法访问主目录时,我应该如何从该插件中存储和访问密码?我已经为此苦苦挣扎了好几个星期了。

0 投票
1 回答
1427 浏览

objective-c - SecurityAgentPlugin 不再在 Yosemite 上工作 (SFAuthorizationPluginView)

我们开发了一个授权插件,它使用 SFAuthorizationPluginView 向用户呈现 UI。此示例基于 Apple 提供的“旧” NameAndPassword 示例

我们正在使用这个授权插件来解锁会话(我们已经更新了授权数据库中的“system.login.screensaver”授权)使用自定义视图。这在 Yosemite 的最后一次更新之前一直很好。从优胜美地开始,SFAuthorizationPluginView 在用户登录会话后不再关闭。我们可以通过执行以下操作更新示例以强制关闭窗口:

现在 SFAuthorizationPluginView 在用户登录后很好地关闭(在我们授权用户之后),但某些东西在后台保持活动状态并且用户在会话中没有焦点(用户无法选择某些东西或在文本编辑中写入例子)。我们必须手动杀死 SecurityAgent 才能再次获得焦点。(请注意,系统似乎会在 30 秒后自动终止 SecurityAgent)。

我们在以下页面找到了 Apple 的 NameAndPassword 身份验证插件示例的固定 2014 版本,但我们在 Yosemite 上遇到了同样的问题: Apple 的 NameAndPassword 身份验证插件示例的固定 2014 版本

在优胜美地发布之前,这段代码对我们来说运行良好。

有人在尝试类似的问题吗?任何想法或建议来解决这个问题?

0 投票
0 回答
601 浏览

objective-c - 使用 SFAuthorizationPluginView 在 Yosemite 上自定义 Mac 登录屏幕

我正在尝试在 OSX Yosemite 上创建一个自定义登录屏幕,以便用户可以使用不同的机制登录(而不仅仅是通过键盘输入凭据)。目前,我正在尝试通过按照 Apple 开发人员文档中的建议继承 SFAuthorizationPluginView 类,然后通过覆盖该-(void)buttonPressed:方法来放置我的自定义逻辑来实现这一点。但是,文档相当模糊和过时。因此,我的当前实现基于 NameAndPassword 示例的修补版本

此示例运行良好,允许我自定义单个 nib 文件并配置我自己的字段和按钮。我的问题是,当登录屏幕加载我的自定义视图时,它看起来像是由包含默认优胜美地登录按钮的父容器绑定的。这本来很好,除了按钮包含标题和图像,导致 UI 非常混乱。现在,我的自定义登录屏幕中同时显示了自定义按钮和 Yosemite 默认按钮。这是屏幕截图。

我一直在寻找访问 Yosemite 按钮的方法,以便我可以删除/修改它们。到目前为止,我发现与这些按钮交互的唯一方法是调用

来自我的子类,它根据您传入的按钮类型切换这些按钮的启用标志。

我正在寻找可以访问这些默认按钮的想法,或者用我自己的视图覆盖它们,以便只有我的自定义按钮可见和启用。此外,这个类有可能不能很好地与优胜美地配合使用,因为它已经相当过时了。让我知道是否有人找到解决此问题的方法。

0 投票
2 回答
748 浏览

objective-c - SFAuthorizationPluginView 示例 NameAndPassword 在按下按钮后挂起

我正在使用 NameAndPassword 的修补版本,如下所示:https ://github.com/skycocker/NameAndPassword

当在登录窗口之外使用这个(例如 system.login.screensaver 或我自己的测试权限)时,仅使用 NameAndPassword 插件,在按下 Ok 或取消后,窗口会挂起大约 10 秒。

添加一些日志,我看到插件上调用了 MechanismDestroy 并且 NameAndPassword 被释放,但它永远不会在 NameAndPassword 中释放。我也没有看到 PluginDestroy 被调用。在调用 MechanismDestroy 后,SecurityAgent 会再挂起 10 秒。

我看到了这个相关的帖子:SecurityAgentPlugin not working on Yosemite (SFAuthorizationPluginView)

但是遵循接受的答案不起作用,并且根据授权插件参考 didDeactivate 不需要被调用(没有调用 RequestInterrupt 和 MechanismDeactivate 永远不会被调用)。调用 SetResult 应该就足够了。

我可以通过从视图中获取窗口并强行关闭它来破解它,但必须有一种方法让它按预期工作。