我在网上搜索了很多,在我的NSTask中找到了获取root权限的简单方法,但我只找到了用Objective-C编写的旧文章。但是我的Xcode项目是用Swift编写的:x有没有办法解决这个问题来运行具有Root Privilegs的NSTask? :)我知道我必须使用像AppleScript,STPrivilegedTask或BetterAuthorizationSample从Apple的东西,但我发现所有是Objective-C写...NSTask在Swift中的根权限
我的想法是创建一个应用程序,使存储介质可启动使用命令createinstallmedia
:p完全正常工作唯一的问题是该命令需要root权限,对于测试,我只需打开终端并以root身份登录,但这不是解决此问题的最佳解决方案:D请帮助我! :○
我的代码,错过了唯一的事情就是代码获得root权限:
import Cocoa
class ViewController: NSViewController {
var Task = NSTask()
var openPanel = NSOpenPanel()
var workingpath_createinstallmedia : String!
var workingpath_medium : String!
var workingpath_application : String!
var volume_flag = "--volume"
var applicationpath_flag = "--applicationpath"
var nointeraction_flag = "--nointeraction"
var commandpath : String!
var postcommand : [String]!
var DirectoryOS : NSURL!
var DirectoryMedium : NSURL!
@IBOutlet weak var PathControlOS: NSPathControl!
@IBOutlet weak var PathControlMedium: NSPathControl!
@IBOutlet weak var Outputlabel: NSTextField!
@IBAction func OSauswählen(sender: AnyObject) {
openPanel.canChooseDirectories = false
openPanel.canChooseFiles = true
openPanel.canCreateDirectories = false
openPanel.allowsMultipleSelection = false
if openPanel.runModal() == NSModalResponseOK {
DirectoryOS = openPanel.URLs[0] as NSURL
PathControlOS.objectValue = DirectoryOS
}
}
@IBAction func Mediumauswählen(sender: AnyObject) {
openPanel.canChooseDirectories = true
openPanel.canChooseFiles = false
openPanel.canCreateDirectories = false
openPanel.allowsMultipleSelection = false
if openPanel.runModal() == NSModalResponseOK {
DirectoryMedium = openPanel.URLs[0] as NSURL
PathControlMedium.objectValue = DirectoryMedium
}
}
@IBAction func starttask(sender: AnyObject) {
// edit Strings
// Createinstallmedia
workingpath_createinstallmedia = String(DirectoryOS)
workingpath_createinstallmedia = workingpath_createinstallmedia.stringByReplacingOccurrencesOfString("file://", withString: "")
workingpath_application = workingpath_createinstallmedia.stringByReplacingOccurrencesOfString("%20", withString: " ")
workingpath_createinstallmedia = workingpath_application + "/Contents/Resources/createinstallmedia"
// Medium
workingpath_medium = String(DirectoryMedium)
workingpath_medium = workingpath_medium.stringByReplacingOccurrencesOfString("file://", withString: "")
workingpath_medium = workingpath_medium.stringByReplacingOccurrencesOfString("%20", withString: " ")
// config Task Parameters
commandpath = workingpath_createinstallmedia
postcommand = [volume_flag,workingpath_medium,applicationpath_flag,workingpath_application,nointeraction_flag]
// commit the Parameters to the Task
Task.launchPath = commandpath
Task.arguments = postcommand
// start Task
Task.launch()
Task.waitUntilExit()
}
}
感谢您的帮助!
您是否尝试过翻译*其中的任何一个*到Swift? –
当然,我试图用AppleScript和一个名为SMJobBless()的函数来解决这个问题。但没有为我工作... – Joh
你找到了解决方案?我在swift中编写安装程序,我很想获得使用具有root特权的进程的权限。 – jl303