Swift 4 macOS App - Как найти важные каталоги пользователей?

Что является самым простым способом с Swift 4 для приложения macOS для поиска важных каталогов пользователей, таких как: Рабочий стол, Документы, Загрузки и т.д.?

2 ответа

Вы можете использовать метод URL-адресов FileManager

func urls(for directory: FileManager.SearchPathDirectory, in domainMask: FileManager.SearchPathDomainMask) -> [URL]

и передайте FileManager.SearchPathDirectory .desktopDirectory, .documentDirectory или .downloadsDirectory для маски домена пользователя и получите первый URL-адрес:

let desktopDirectory = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first!
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let downloadsDirectory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!


TL;DR:

let desktopDir = try? FileManager.default.url(for: .desktopDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let documentDir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let downloadsDir = try? FileManager.default.url(for: .downloadsDirectory, in: .userDomainMask, appropriateFor: nil, create: false)

Существует два способа получить эту информацию, как из класса FileManager:

Вот этот:

func urls(for directory: FileManager.SearchPathDirectory, in domainMask: FileManager.SearchPathDomainMask) -> [URL]

Возвращает массив URL-адресов для указанного общего каталога в запрошенных доменах. [...] Каталоги упорядочены в соответствии с порядком констант маски домена, сначала с элементами в домене пользователя, а элементы в системном домене - последними.

Документация: https://developer.apple.com/documentation/foundation/filemanager/1407726-urls

(уже упоминалось в ответе @leo-dabus)

И этот:

(который я предпочитаю, поскольку он более универсален и возвращает один URL-адрес)

func url(for directory: FileManager.SearchPathDirectory, in domain: FileManager.SearchPathDomainMask, appropriateFor url: URL?, create shouldCreate: Bool) throws -> URL

Располагает и, возможно, создает указанный общий каталог в домене.

Документация: https://developer.apple.com/documentation/foundation/filemanager/1407693-url

Для одного:

Допустимые домены, определенные в https://developer.apple.com/documentation/foundation/filemanager.searchpathdomainmask:

<code>.userDomainMask</code>: домашний каталог пользователей - место для установки личных элементов пользователей (~).

<code>.localDomainMask</code>: Локальный для текущего компьютера - место для установки элементов, доступных всем на этом компьютере.

<code>.networkDomainMask</code>: общедоступное местоположение в локальной сети - место для установки элементов, доступных в сети (/сеть).

<code>.systemDomainMask</code>: Предоставляется Apple-can <code>.systemDomainMask</code> быть измененным (/System).

<code>.allDomainsMask</code>: Все домены.

Существует множество возможностей для параметра directory, определенного в https://developer.apple.com/documentation/foundation/filemanager.searchpathdirectory:

<code>.applicationDirectory</code>: Поддерживаемые приложения (/Приложения).

<code>.demoApplicationDirectory</code>: Неподдерживаемые приложения и демонстрационные версии.

<code>.developerApplicationDirectory</code>: приложения для разработчиков (/Developer/Applications).

<code>.adminApplicationDirectory</code> Системные и сетевые приложения.

<code>.libraryDirectory</code>: Различные документы, файлы поддержки и конфигурации, доступные для пользователя (/Library).

<code>.developerDirectory</code>: Ресурсы разработчика (/Разработчик).

<code>.userDirectory</code>: пользовательские домашние каталоги (/Users).

<code>.documentationDirectory</code>: Документация.

<code>.documentDirectory</code>: Каталог документов.

<code>.coreServiceDirectory</code>: Местоположение основных служб (System/Library/CoreServices).

<code>.autosavedInformationDirectory</code>: расположение пользователей автосохраненных документов (библиотека/информация автосохранения).

<code>.desktopDirectory</code>: расположение каталога рабочего стола пользователей.

<code>.cachesDirectory</code>: расположение отбрасываемых файлов кеша (Library/Caches).

<code>.applicationSupportDirectory</code>: расположение файлов поддержки приложений (поддержка библиотеки/приложений).

<code>.downloadsDirectory</code>: расположение каталога загрузки пользователей.

<code>.inputMethodsDirectory</code>: расположение методов ввода (методы библиотеки/ввода).

<code>.moviesDirectory</code>: Местоположение пользователя Каталог фильмов (~/Фильмы).

<code>.musicDirectory</code>: Расположение пользователя Каталог музыки (~/Музыка).

<code>.picturesDirectory</code>: Расположение каталога "Картинки пользователя" (~/Картинки).

<code>.printerDescriptionDirectory</code>: расположение каталога системных PPD (библиотека/принтеры/PPD).

<code>.sharedPublicDirectory</code>: Расположение общего каталога общего <code>.sharedPublicDirectory</code> пользователя (~/Public).

<code>.preferencePanesDirectory</code>: расположение каталога PreferencePanes для использования с системными настройками (Library/PreferencePanes).

<code>.applicationScriptsDirectory</code>: расположение папки пользовательских скриптов для вызывающего приложения (~/Library/Application Scripts/),

<code>.itemReplacementDirectory</code>: передано в метод FileManager <code>url(for:in:appropriateFor:create:)</code> для создания временного каталога.

<code>.allApplicationsDirectory</code>: все каталоги, где могут возникать приложения.

<code>.allLibrariesDirectory</code>: все каталоги, в которых могут возникать ресурсы.

<code>.trashDirectory</code>: расположение каталога мусора.

licensed under cc by-sa 3.0 with attribution.