macOS Swift-App проблема с правами на запись? - PullRequest
0 голосов
/ 26 июня 2019

Сначала я должен сказать:

  • Песочница отключена
  • Я дал приложению полный доступ к диску для Mojave
  • Я экспортировал его и решил подписатьэто для ручного распространения (без App Store)

Проблема в том, что я пытаюсь создать файл в / Library / Application support через FileManager.default.createFile, который работает в моих домашних папках, например / Users /username / Library, так что это не должно быть проблемой программирования.

Но у меня нет разрешения на запись в / Library ... Как я могу предоставить моему приложению такие привилегии?

Вся помощь приветствуется.

Спасибо!

1 Ответ

0 голосов
/ 27 июня 2019

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

public static func allow(folder: String, prompt: String, callback: @escaping (URL?) -> ())
{
    let openPanel = NSOpenPanel()
    openPanel.directoryURL = URL(string: folder)
    openPanel.allowsMultipleSelection = false
    openPanel.canChooseDirectories = true
    openPanel.canCreateDirectories = false
    openPanel.canChooseFiles = false
    openPanel.prompt = prompt

    openPanel.beginSheetModal(for: self.window!) // use the window from your ViewController
    {
        result in
        if result.rawValue == NSFileHandlingPanelOKButton
        {
            if let url = openPanel.url
            {
                self.store(url: url) // Store for later use.
            }
        }
    }
}

public static func store(url: URL)
{
    guard let path = self.path else { return }

    do
    {
        let data = try url.bookmarkData(options: NSURL.BookmarkCreationOptions.withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)

        NSKeyedArchiver.archiveRootObject(self.folders, toFile: path)
    }
    catch
    {
        Swift.print("Error storing bookmarks")
    }
}
...