gpt4 book ai didi

objective-c - 要求用户提升权限并在没有 Apple 开发者证书的情况下提升应用程序

转载 作者:太空狗 更新时间:2023-10-30 03:26:40 25 4
gpt4 key购买 nike

显然,从 10.7 开始,AuthorizationExecuteWithPrivileges 已弃用。我收集的有关此信息的一般要点似乎建议使用 ServiceManagement.frameworkSMJobBless() 函数来部署辅助应用程序。

但我的理解是,这需要从 Apple 购买开发人员证书才能对我的应用程序和辅助进程进行代码签名 - 否则这将不起作用。这样对吗?

我最初使用 AuthorizationExecuteWithPrivileges 来请求用户提升权限,因为他们需要访问另一个正在运行的进程。否则,我的应用程序将无法作为其预期的非官方插件运行。代码签名方式真的是唯一的出路吗?由于它的绝对成本,我试图避免购买开发人员证书。

有没有人找到任何替代方法来以提升的权限重新启动应用程序,当然是在用户许可的情况下?

最佳答案

@CarlosP's answer使用代码来转义路径和参数:

- (BOOL)runProcessAsAdministrator:(NSString*)scriptPath
withArguments:(NSArray*)arguments
output:(NSString**)output
errorDescription:(NSString**)errorDescription {

//Check path.
if (![scriptPath hasPrefix:@"/"]) {
@throw [NSException exceptionWithName:
NSInvalidArgumentException reason:@"Absolute path required." userInfo:nil];
}

//Define script.
static NSAppleScript* appleScript = nil;
if (!appleScript) {
appleScript = [[NSAppleScript alloc] initWithSource:
@"on run commandWithArguments\n"
" activate\n"
" repeat with currentArgument in commandWithArguments\n"
" set contents of currentArgument to quoted form of currentArgument\n"
" end repeat\n"
" set AppleScript's text item delimiters to space\n"
" return do shell script (commandWithArguments as text) with administrator privileges\n"
"end run"];
}

//Set command.
NSAppleEventDescriptor* commandWithArguments = [NSAppleEventDescriptor listDescriptor];
[commandWithArguments insertDescriptor:
[NSAppleEventDescriptor descriptorWithString:scriptPath] atIndex:0];

//Set arguments.
for (NSString* currentArgument in arguments) {
[commandWithArguments insertDescriptor:
[NSAppleEventDescriptor descriptorWithString:currentArgument] atIndex:0];
}

//Create target & event.
ProcessSerialNumber processSerial = {0, kCurrentProcess};
NSAppleEventDescriptor* scriptTarget =
[NSAppleEventDescriptor descriptorWithDescriptorType:typeProcessSerialNumber bytes:&processSerial length:sizeof(ProcessSerialNumber)];
NSAppleEventDescriptor* scriptEvent =
[NSAppleEventDescriptor appleEventWithEventClass:kCoreEventClass
eventID:kAEOpenApplication
targetDescriptor:scriptTarget
returnID:kAutoGenerateReturnID
transactionID:kAnyTransactionID];
[scriptEvent setParamDescriptor:commandWithArguments forKeyword:keyDirectObject];

//Run script.
NSDictionary* errorInfo = [NSDictionary dictionary];
NSAppleEventDescriptor* eventResult = [appleScript executeAppleEvent:scriptEvent error:&errorInfo];

//Success?
if (!eventResult) {
if (errorDescription)
*errorDescription = [errorInfo objectForKey:NSAppleScriptErrorMessage];
return NO;
} else {
if (output)
*output = [eventResult stringValue];
return YES;
}

}

更新

在 Yosemite 中,执行 shell 脚本 只是调用一个 version AuthorizationExecuteWithPrivileges 嵌入在 StandardAdditions.osax 中。

可以想象,当 AuthorizationExecuteWithPrivileges 执行时,with administrator privileges 选项将消失。

就个人而言,我会继续直接调用 AuthorizationExecuteWithPrivileges

做 shell 脚本 确实有 reaping the process 的优势自动地。这需要一点 extra work使用 AuthorizationExecuteWithPrivileges

关于objective-c - 要求用户提升权限并在没有 Apple 开发者证书的情况下提升应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com