Как упростить процесс безопасности приложения какао - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в быстрой и в целом для Apple, давно пользователь Windows.В настоящее время моя проблема заключается в том, что я хочу, чтобы мое приложение работало в любой MacOS без каких-либо вопросов о пароле, в настоящее время при запуске в Xcode оно спрашивает меня о пароле, а затем работает как задумано.(работает только с sudo -S, иначе не будет)

Чтобы добраться до этой точки, мне пришлось отключить «песочницу», но я не был уверен, что это именно то, что я должен был сделать, но в то время это было единственнымспособ, которым я мог заставить приложение работать.

Также в некоторых сообщениях я видел, что в Мохаве рекомендуется установить Полный доступ к диску для Терминала в приложении такого типа, поэтому я сделал это.

Опять же вопрос в том, как настроить это приложение, чтобы я мог дать его другу, и он мог бы использовать его без каких-либо паролей и других хитростей разработчиков.

Спасибо.

import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var txtUrl1: NSTextField!
    @IBOutlet weak var btnDownload: NSButton!

    @IBAction func clickDownload(_ sender: Any) {
        let url = txtUrl1.stringValue
        let command = "sudo -S /usr/local/bin/youtube-dl -f best " + url + " -o '/Users/Matthew/Library/Containers/matthew.youtube/Data/%(title)s.%(ext)s' "
        shell(command)
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    func shell(_ command: String) -> String {
        let task = Process()
        task.launchPath = "/bin/bash"
        task.arguments = ["-c", command]

        let pipe = Pipe()
        task.standardOutput = pipe
        task.launch()

        let data = pipe.fileHandleForReading.readDataToEndOfFile()
        let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String

        return output
    }
    override var representedObject: Any? {

        didSet {

        // Update the view, if already loaded.
        }
    }
}
...