在Xamarin中使用NSAppleEventsUsageDescription获取登录项

时间:2019-05-16 10:26:18

标签: macos cocoa xamarin applescript

我需要从我的代码中运行AppleScript以获得LoginItems名称。我能够从Xcode项目中做到这一点。但是当我对Xamarin做同样的事情时,它就会失败。

我在Xamarin项目中缺少什么?对于获取登录项的任何帮助,将不胜感激。

Xcode项目代码:

NSString *script = @"tell application \"System Events\" to get the path of every login item";

NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:script];

NSDictionary* errorDict;

NSAppleEventDescriptor *descriptor = [appleScript executeAndReturnError: &errorDict];

Xcode项目plist值: enter image description here 最后一个值:

我在Xamarin中也做类似的事情:

var script = "tell application \"System Events\" to get the path of every login item";
var appleScript = new NSAppleScript(script);
var descriptor = appleScript.ExecuteAndReturnError(out var errorInfo);

info.plist

enter image description here

我得到的Xamarin errorInfo值是:

{{
    NSAppleScriptErrorAppName = "System Events";
    NSAppleScriptErrorBriefMessage = "Not authorized to send Apple events to System Events.";
    NSAppleScriptErrorMessage = "Not authorized to send Apple events to System Events.";
    NSAppleScriptErrorNumber = "-1743";
    NSAppleScriptErrorRange = "NSRange: {44, 4}";
}}

但这不会发生,因为我在plist中添加了Privacy部分。

1 个答案:

答案 0 :(得分:1)

获取该错误消息/编号并具有正确的Info.plist条目:

<key>NSAppleEventsUsageDescription</key>
<string>StackOverflow needs access to your System Events </string>

注意:您应该通过编辑编辑器(相对于VS IDE)仔细检查Info.plist文件,以确保正确定义NSAppleEventsUsageDescription键,如上所示。

表示您不是获得“安全性”弹出窗口来授予权限。

enter image description here

这意味着用户最初被询问时拒绝了权限访问。

打开:

System Preferences / Security & Privacy / Privacy Tab / Automation

找到您的应用列表并手动授予其权限:

enter image description here

注意:我一直使用AppleScript | JavaScript通过Xamarin.Mac进行macOS自动化,因此我知道Xamarin并不是问题。如果事实并非最初拒绝自动化许可,那么我想听听一下有关该问题的信息,因为这是我见过的唯一一个问题(我所有的代码都超过5年,请检查该错误并指示由于用户在第一次被要求访问时就拒绝访问,因此用户可以手动更正该问题。