Swift中的Cocoa授权

时间:2014-06-06 20:19:30

标签: macos cocoa security authorization swift

这是我第一次写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抛出“Type”()'不符合协议'AuthorizationRef'“而我的AuthorizationExecuteWithPrivileges调用”无法找到接受'__conversion'的重载提供的参数“

有什么想法吗?我接近这个错误吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我能够通过AppleScript弄清楚如何做到这一点,但你应该能够使用我之前尝试过的授权方法来做到这一点,因此请保持这个问题的开放性。任何寻求快速解决方案(没有实施错误检查)的人都可以使用我在下面写的内容:

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
    }
}