如何在MacOS 10.15中正确使用EndpointSecurity API?
我添加了权限并禁用了SIP:com.apple.developer.endpoint-security.client仍然获得如何在MacOS 10.15中正确使用EndpointSecurity API?,macos,Macos,我添加了权限并禁用了SIP:com.apple.developer.endpoint-security.client仍然获得ES\u NEW\u client\u RESULT\u ERR\u NOT\u allowed,如何使用 Xcode 11下的EndpointSecurity API是否正确?我是否需要以root身份运行 代码供您参考: #import <EndpointSecurity/EndpointSecurity.h> - (void)applicationDidF
ES\u NEW\u client\u RESULT\u ERR\u NOT\u allowed
,如何使用
Xcode 11下的EndpointSecurity API是否正确?我是否需要以root身份运行
代码供您参考:
#import <EndpointSecurity/EndpointSecurity.h>
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
es_client_t *client;
es_new_client_result_t res = es_new_client(&client, ^(es_client_t *client, const es_message_t *message) {
NSLog(@"Hi");
});
if (res == ES_NEW_CLIENT_RESULT_SUCCESS){
NSApplication.sharedApplication.keyWindow.contentView.layer.backgroundColor = NSColor.redColor.CGColor;
NSLog(@"ES_NEW_CLIENT_RESULT_SUCCESS");
}else if(res == ES_NEW_CLIENT_RESULT_ERR_INTERNAL){
NSLog(@"ES_NEW_CLIENT_RESULT_ERR_INTERNAL");
}else if(res == ES_NEW_CLIENT_RESULT_ERR_NOT_ENTITLED){
NSLog(@"ES_NEW_CLIENT_RESULT_ERR_NOT_ENTITLED");
}else if(res == ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED){
NSLog(@"ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED");
}else if(res == ES_NEW_CLIENT_RESULT_ERR_INVALID_ARGUMENT){
NSLog(@"ES_NEW_CLIENT_RESULT_ERR_INVALID_ARGUMENT");
}
BOOL isSubscribeSuccess = es_subscribe(client, ES_EVENT_TYPE_NOTIFY_OPEN);
if (isSubscribeSuccess == true){
NSLog(@"isSubscribeSuccess");
}else{
NSLog(@"SubscribeErrpr");
}
}
#导入
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知{
E_客户_t*客户;
es_new_client_result_t res=es_new_client(&client,^)(es_client_t*client,const Esu message_t*message){
NSLog(@“Hi”);
});
如果(res==ES\u新客户机\u结果\u成功){
NSApplication.sharedApplication.keyWindow.contentView.layer.backgroundColor=NSColor.redColor.CGColor;
NSLog(“新客户结果成功”);
}else if(res==ES\U新客户机\U结果\U错误\U内部){
NSLog(“新客户结果内部错误”);
}else if(res==ES\u NEW\u CLIENT\u RESULT\u ERR\u NOT\u){
NSLog(@“新客户结果错误未命名”);
}else if(res==ES\u新客户机\u结果\u错误\u不允许){
NSLog(“不允许出现新客户结果错误”);
}else if(res==ES\u NEW\u CLIENT\u RESULT\u ERR\u INVALID\u参数){
NSLog(@“新客户端结果错误无效参数”);
}
BOOL issubscribesuccessuccess=es_subscribe(客户端,事件类型,通知打开);
if(issubscribesuccessuccess==true){
NSLog(@“ISSUBSCRIBESSUCCESS”);
}否则{
NSLog(@“SubscribeErrpr”);
}
}
在应享权利方面:
<key>com.apple.developer.endpoint-security.client</key>
<true/>
com.apple.developer.endpoint-security.client
是的,您只需以root用户身份运行即可。
或者通过调整方案设置将调试进程设置为root。(产品>方案>编辑方案…)
根据
EndpointSecurity/ESTypes.h
:
///不允许调用方连接。缺乏透明度,,
用户的同意和控制(TCC)批准
因此,ES_NEW_CLIENT_RESULT_ERR_NOT_allowed
表示您的流程未按使用EndpointSecurity API的要求获得用户的批准。EndpointSecurity/ESClient.h
中的es_new_client
文档说明:
调用此接口的应用程序也必须得到用户的批准
通过透明、同意和控制(TCC)机制,使用
“隐私首选项”窗格并将应用程序添加到完整磁盘
进入
当您从系统扩展调用EndpointSecurity API时,将自动出现一个询问用户权限的对话框。否则,用户必须允许手动使用它。顺便说一句,为了使用调用EndpointSecurity API的命令行工具进行测试,我必须将终端添加到完整的磁盘访问中。如果我以root用户身份运行,我的应用程序会立即崩溃,可能是sandbox的问题?我想这个答案混淆了两个错误。以root用户身份运行的要求由
ES\u NEW\u CLIENT\u RESULT\u ERR\u NOT\u PRIVILEGED
表示。问题是关于另一个错误,ES\u NEW\u CLIENT\u RESULT\u ERR\u NOT \u allowed
。