【问题标题】:Cocoa Authorization in SwiftSwift 中的 Cocoa 授权
【发布时间】:2014-06-06 20:19:30
【问题描述】:

这是我第一次用 Swift、Cocoa(有 Cocoa Touch 方面的经验)和使用 Authorization 进行写作,所以老实说,我什至不知道我是否走在正确的轨道上。我正在尝试对需要用户身份验证的 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 时抛出“类型'()' 不符合协议'AuthorizationRef'”,而我调用AuthorizationExecuteWithPrivileges 时抛出“找不到接受所提供参数的'__conversion' 的重载”

有什么想法吗?我是不是在错误地处理这个问题?

感谢您的帮助!

【问题讨论】:

  • 原来你没有实现 AuthorizationRef 协议需要你实现的方法。通过 cmd+cliking 进入它的实现,查找其中没有 @optional 的任何内容,然后实现它。

标签: macos cocoa security authorization swift


【解决方案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
    }
}

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多