我们开发了一个授权插件,它使用SFAuthorizationPluginView向用户呈现UI。此示例基于苹果公司提供的"旧"NameAndPassword示例。
我们使用此授权插件来使用自定义视图解锁会话(我们已经更新了authorizationdb中的"system.login.screensaver"授权)。在Yosemite的最后一次更新之前,这一直运行良好。自Yosemite以来,用户登录会话后,SFAuthorizationPluginView不再关闭。我们可以通过执行以下操作来更新示例以强制关闭窗口:
// confirm that we have authorized the user
[self callbacks]->SetResult ([self engineRef], kAuthorizationResultAllow);
// close the window
NSView* v = [self viewForType:SFViewTypeCredentials];
NSWindow* w = [v window];
[w close];
现在,一旦用户登录(在我们授权用户之后),SFAuthorizationPluginView就很好地关闭了,但后台仍有活动内容,用户在会话中没有焦点(例如,用户无法选择内容或写入文本编辑)。我们必须手动终止SecurityAgent才能再次获得焦点。(注意,系统似乎会在30秒后自动杀死SecurityAgent)。
我们在下面的页面上找到了一个2014年固定版本的苹果NameAndPassword验证插件示例,但我们在Yosemite上也面临同样的问题:一个固定的2014版本的苹果的NameAndPassword验证插件示例
在Yosemite发布之前,这个代码对我们来说一直很好。
有人在试验类似的问题吗?有什么解决这个问题的想法或建议吗?
与其关闭窗口,不如覆盖didActivate方法并添加调用:
[self didDeactivate];
在SFAuthorizationPluginView类AFTER中,将结果设置为ALLOW。
苹果更新了他们的文档,你可以重新阅读,一年前有一些很好的指导方针可以为我节省很多时间和精力。