почему в xcode домашний каталог отображается как /Users/myname/Library/Containers/, а не как основная папка?

Я много искал и не мог найти ответ. Я только начал использовать xcode, и у меня есть очень простая программа под названием «Image Test».

---> У него есть кнопка и текстовое поле. Я хочу показать путь к домашнему каталогу моей системы в текстовом поле. Это мой код:

@IBOutlet weak var textField1: NSTextField!
@IBAction func Button1(_ sender: Any) {

    do{
        let home = try FileManager.default.homeDirectoryForCurrentUser
        textField1.stringValue = home.path
    }
    catch{}
}

это работает, но возвращаемый путь выглядит так: /Users/myname/Library/Containers/com.Image-Test/Data

Я тестировал этот код раньше в Xcode Playground, и он был правильным. Это тот же код, но не указан правильный путь.


person Vandad    schedule 20.09.2019    source источник


Ответы (1)


Это из-за песочницы. Отн. "nofollow noreferrer">документация гласит:

Каталог контейнеров песочницы приложения

Он расположен по системному пути в домашнем каталоге пользователя. В изолированном приложении этот путь возвращается, когда ваше приложение вызывает функцию NSHomeDirectory.

Вы можете убедиться в этом, удалив возможность песочницы приложения (примечание: я не предполагаю, что это то, что вы должны сделать для своего приложения).

PS: если вы собираетесь отправить свое приложение в AppStore, песочница должна быть включена.

person Alladinian    schedule 20.09.2019
comment
Большое спасибо. да, это сработало. Я только начал изучать xcode и swift и проводить тесты. Спасибо еще раз - person Vandad; 20.09.2019
comment
@Vandad Не за что. Пожалуйста, имейте в виду, что хотя отключение песочницы может показаться «удобным» и допустимым во время обучения, это действительно важно для любого производственного приложения. - person Alladinian; 20.09.2019
comment
это про взлом? и если песочница отключена, и если она работает в моей системе, будет ли она работать в другой системе? распознает ли он домашний каталог (или другие), как в моей системе?! - person Vandad; 20.09.2019
comment
Это касается безопасности. Смысл этого в том, что ваше приложение должно иметь доступ только к тому ресурсу, который пользователь решит предоставить, а не ко всей системе. Я считаю, что это будет работать в другой системе, при условии, что пользователь даст явное разрешение (хотя я могу ошибаться; если кто-нибудь знает об этом больше, я тоже был бы рад узнать). Вы можете прочитать гораздо больше в ссылке на документацию, которую я включил в свой ответ. - person Alladinian; 20.09.2019
comment
Спасибо еще раз. Специально для быстрого ответа :)) - person Vandad; 20.09.2019