【发布时间】:2014-06-06 20:19:30
【问题描述】:
这是我第一次用 Swift、Cocoa(有 Cocoa Touch 方面的经验)和使用 Authorization 进行写作,所以老实说,我什至不知道我是否走在正确的轨道上。我正在尝试对需要用户身份验证的 hosts 文件进行修改,但 AuthorizationCreate 和 AuthorizationExecuteWithPrivileges 方法都出现错误。
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