2014-06-06 13 views
5

Bu benim ilk kez Swift, Cocoa'da (Cocoa Touch'da deneyim sahibi) yazıyor ve Yetkilendirmeyi kullanıyor, bu yüzden doğru yolda bile olsa hiç bir fikrim yok. Kullanıcı kimlik doğrulaması gerektiren hosts dosyasına bir değişiklik yapmaya çalışıyorum, ancak hem AuthorizationCreate hem de AuthorizationExecuteWithPrivileges yöntemleri hata veriyor. Beni AuthorizationCreate arayarakSwift'de Kakao Yetkilendirmesi

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) 

atma "Sağlanan parametreleri kabul eder '__conversion' için bir aşırı bulunamadı" ve AuthorizationExecuteWithPrivileges benim çağrısı "protokol 'AuthorizationRef' uymuyor Tipi '()'" atıyor

Herhangi bir fikrin var mı? Buna yanlış mı yaklaşıyorum?

Yardımlarınız için teşekkürler!

+0

protokolü uygulamak için sana ihtiyacı AuthorizationRef sen yöntemleri implemeting değiliz çıkıyor. Uygulamasına cmd + cliking yaparak gidin, içinde @optional bulunmayan şeyleri bulun ve uygulayın. –

cevap

1

AppleScript ile nasıl yapılacağını anlayabildim, ancak daha önce denediğim Yetkilendirme yöntemini kullanarak bunu yapabilmeniz ve bu soruyu açık bırakmanız gerekir. hızlı bir çözüm (uygulanan hiçbir hata çekler) aşağıdaki I yazdıklarımı kullanabilirsiniz arayan herkes:

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