这是我第一次在Swift,Cocoa(具有Cocoa Touch的经验)中使用授权进行写作,所以我真的不知道自己是否走上了正确的道路。我正在尝试对hosts文件进行修改,这需要用户身份验证,但是AuthorizationCreateAuthorizationExecuteWithPrivileges方法都给出了错误。

var authorizationRef:AuthorizationRef
var status:OSStatus
status = AuthorizationCreate(nil, environment:kAuthorizationEmptyEnvironment, flags:kAuthorizationFlagDefaults, authorization:&authorizationRef)
let overwrite_hosts = "echo \(hostsContents) > /private/etc/hosts"
let args = [overwrite_hosts.cStringUsingEncoding(NSUTF8StringEncoding)]
status = AuthorizationExecuteWithPrivileges(authorizationRef, pathToTool:"/bin/sh", options:kAuthorizationFlagDefaults, arguments:args, communicationsPipe:nil)

我调用AuthorizationCreate引发“类型'()'不符合协议(protocol)'AuthorizationRef'”,而我调用AuthorizationExecuteWithPrivileges引发“无法找到接受提供的参数的'__conversion'重载”

有任何想法吗?我的处理方式有误吗?

谢谢你的帮助!

最佳答案

我能够弄清楚如何通过AppleScript进行操作,但是您应该可以使用我之前尝试过的Authorization方法来进行操作,因此,这个问题仍然待解决。任何寻求快速解决方案(未实现错误检查)的人都可以使用我在下面写的内容:

func doScriptWithAdmin(inScript:String) -> String{
    let script = "do shell script \"\(inScript)\" with administrator privileges"
    var appleScript = NSAppleScript(source: script)
    var eventResult = appleScript.executeAndReturnError(nil)
    if !eventResult {
        return "ERROR"
    }else{
        return eventResult.stringValue
    }
}

关于macos - Swift中的 cocoa 授权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24090020/

10-15 15:07