Как получить имя отображаемой папки и значок приложения для URL-адреса, возвращаемого UIDocumentPickerViewController? - PullRequest
0 голосов
/ 18 апреля 2020

Как получить имя отображаемой папки и значок приложения для URL-адреса, возвращаемого UIDocumentPickerViewController?

Ниже приведен пример моего Swift кода игровой площадки и некоторых результатов отладочной печати:

if let newUrl = urlFromPicker {

    // 1 
    print("[DEBUG] newUrl: [\(newUrl)]")

    // 2 
    let res = try! newUrl.promisedItemResourceValues(forKeys: [.ubiquitousItemContainerDisplayNameKey])
    if let displayName1 = res.ubiquitousItemContainerDisplayName {
        print("[DEBUG] newUrl displayName1: [\(displayName1)]")
    }

    // 3 
    if let displayName2 = FileManager.default.displayName(atPath: newUrl.absoluteString).removingPercentEncoding {
        print("[DEBUG] newUrl displayName2: [\(displayName2)]")
    }
}

CASE 1 : откройте папку документов какого-либо приложения из iCloud Drive (для этого примера PDF Viewer):

[DEBUG] newUrl: [file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~pspdfkit~viewer/Documents/]
[DEBUG] newUrl displayName1: [PDF Viewer]
[DEBUG] newUrl displayName2: [Documents]

CASE 2 : Откройте подпапку Dir того же каталога документов из iCloud Drive:

[DEBUG] newUrl: [file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~pspdfkit~viewer/Documents/Dir/]
[DEBUG] newUrl displayName1: [PDF Viewer]
[DEBUG] newUrl displayName2: [Dir]

Поскольку у меня есть несколько документов из одного приложения PDF Viewer, также на моем устройстве в On My iPhone, здесь это те же два случая (каталог / подкаталог) для локальных документов:

CASE 3 : открыть локальную папку документов PDF Viewer из On My iPhone:

[DEBUG] newUrl: [file:///private/var/mobile/Containers/Data/Application/XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB/Documents/]
[DEBUG] newUrl displayName2: [Documents]

CASE 4 : Локальная подпапка:

[DEBUG] newUrl: [file:///private/var/mobile/Containers/Data/Application/XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB/Documents/Subdir/]
[DEBUG] newUrl displayName2: [Subdir]

ВОПРОСЫ :

  • Как можно увидеть * Метод 1042 * promisedItemResourceValues(forKeys:) с .ubiquitousItemContainerDisplayNameKey не работает для локальных файлов. Как получить имя приложения, папка которого Documents используется для локальных файлов (тот же результат, что и вывод displayName1 в случае 1/2 для iCloud)?
  • Можно ли получить значок приложения так же, как он показывает UIDocumentPickerViewController?

PS Я знаю, что при использовании частного API в качестве LSApplicationWorkspace я могу использовать извлеченный идентификатор пакета приложения (XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB из URL), чтобы получить имя и значок приложения, но требуется публичный c способ сделать это, чтобы позже отправить свое приложение в AppStore.

Заранее спасибо за ваше внимание и помощь.

...