Невозможно создать новый каталог в приложении MacOS

Я работаю над приложением для Mac. Я изо всех сил пытался создать каталог в «Рабочий стол» в Mac OS. Я работаю над High Sierra. Он работал нормально, но внезапно приложение не может создать каталог на рабочем столе. Я получаю следующую ошибку разрешения. Я использую Xcode 9.3 и Swift 4.1.

Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “TestDir” in the folder “Desktop”." UserInfo = {NSFilePath=/Users/sj/Library/Containers/com.user.TestSync/Data/Desktop/TestDir, NSUnderlyingError=0x60400044cc60 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"

Вот мой код:

class DBManager: NSObject {
    static func getDirectoryPath() -> URL {
        let homeDirectory = URL(fileURLWithPath: NSHomeDirectory())
        let desktopPath = homeDirectory.appendingPathComponent("Desktop")
        let databaseFolder = desktopPath.appendingPathComponent("TestDir")

        return databaseFolder
    }

    static func createFolderIfNotExist() {
        let databaseFolder = DBManager.getDirectoryPath()

        if !FileManager().fileExists(atPath: databaseFolder.path) {
            do {
                try FileManager.default.createDirectory(atPath: databaseFolder.path, withIntermediateDirectories: true, attributes: nil)
            } catch {
            print(error)
            }
        }
    }
}

Код работает нормально, если я создаю каталог внутри «Документы». Но по какой-то причине я не могу создавать внутри рабочего стола, даже если я предоставил всем доступ на чтение и запись к рабочему столу. Я также добавил снимок экрана с каталогом, в котором я должен его создать.

Я попытался создать каталог в разделе «Загрузки», но у меня возникла такая же проблема с разрешением. Но, опять же, мне удалось создать каталог внутри «Библиотеки». Итак, похоже, что ОС не дает разрешения на создание внутри каталога псевдонимов, поскольку и Рабочий стол, и Загрузки являются псевдонимами.

Любая помощь высоко ценится.

Невозможно создать новый каталог в приложении MacOS

Возможный дубликат Папка записи в Mac OS X с активной песочницей

matt 12.06.2018 14:52
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
1
2 033
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это потому, что ваше приложение macOS работает в «песочнице приложения», проверьте вкладку «Возможности» в целевых настройках.

~/Library/Containers/%BundleID%/Data/Desktop - это программная ссылка на рабочий стол пользователя, и у вас нет прав на запись (в зависимости от вашего файла прав даже нет прав на чтение).

В зависимости от вашего варианта использования вы можете

  • отключить режим песочницы
  • позвольте пользователю выбрать папку, открыв диалоговое окно «Открыть» (затем вы можете писать в это)
  • разрешить чтение / запись в какой-либо другой защищенной папке пользователя (например, Downloads и т. д.) или
  • создайте TestDir прямо в вашем домашнем каталоге без использования каких-либо программно связанных папок

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

skJosh 12.06.2018 15:06

Помимо того, что упомянуто @ChaosCoder, нам также необходимо установить для NSOpenPanel.canCreateDirectories значение true:

panel.canCreateDirectories = true

На меня никакого эффекта.

ScottyBlades 27.06.2020 08:47

Удалите данные тестовой среды приложения из ваших возможностей. Щелкните свой проект в навигаторе файлов, затем ваш проект на вкладке ЦЕЛИ, затем убедитесь, что выбран «Подписание и возможности», затем «ВСЕ», затем дважды щелкните «x» рядом с «Тестовая среда приложения».

Другие вопросы по теме