Я создаю клиент BitTorrent, где я даю пользователю возможность через контекстное меню открыть каталог, содержащий торрент.
Для этого я попытался использовать метод open(_)
экземпляр NSWorkspace
выглядит так:
NSWorkspace.shared.open(directory)
, где directory
- экземпляр URL
, указывающий на каталог, например:
let directory = URL(fileURLWithPath: item.parentPath, isDirectory: true)
Здесь item.parentPath
- это Строка, содержащая абсолютный путь.
Теперь позвольте мне прояснить, что код работает нормально. Он успешно открывает нужные мне каталоги внутри Finder (поскольку это приложение по умолчанию для открытия каталогов).
Однако, если каталог является каталогом Downloads пользователя, он отображает это приглашение:
Опять же, все в порядке, поскольку мое приложение не имеет разрешения на открытие каталога Downloads . Однако я хочу попытаться открыть каталог, запрашивая разрешение, как и любое другое приложение в macOS, например:
Я посмотрел вверх в документах и нашел этот метод NSWorkspace
: open(_:withApplicationAt:configuration:completionHandler:)
. Я подумал, что это здорово, поскольку я мог установить для свойства promptsUserIfNeeded
экземпляра NSWorkspace.OpenConfiguration
значение true , что, как я считаю, должно заставить мое приложение вежливо запросить разрешение на открытие каталога, если это необходимо.
Вот мой полученный код:
let url = URL(fileURLWithPath: item.parentPath, isDirectory: true)
let configuration: NSWorkspace.OpenConfiguration = NSWorkspace.OpenConfiguration()
configuration.promptsUserIfNeeded = true
let finder = NSWorkspace.shared.urlForApplication(withBundleIdentifier: "com.apple.finder")
// Open file with default application
NSWorkspace.shared.open([url], withApplicationAt: finder!, configuration: configuration)
К сожалению, это не имеет значения. Я все еще получаю тот же диалог, что и на первом изображении.
Я хочу знать две вещи:
- Что я делаю не так?
- Как я могу открыть каталог, запрашивая разрешения при необходимости?