Файлы с импортированными UTI отображаются серым цветом в UIDocumentPickerViewController - PullRequest
0 голосов
/ 25 августа 2018

В моем iOS-приложении я открываю UIDocumentPickerViewController для импорта файлов .sty (стили MIDI). Для этого я объявил пользовательский UTI в импортированных UTI и в типах документов.

Проблема в том, что на iPad Air 2 моего клиента эти файлы отображаются серым цветом в диалоговом окне, поэтому он не может импортировать их. На моем iPad Air 2 они не серые, и я могу их успешно импортировать. Мы оба можем видеть это при использовании iCloud Drive и Dropbox в качестве провайдеров файлов.

Что может отличаться на наших устройствах? Мой клиент устанавливает приложение в качестве внутреннего тестера с помощью TestFlight.

Кроме того, учитываются ли расширения файлов в регистре импорта UTI с учетом регистра? Я бы так не думал.

Тогда мне интересно, должен ли я добавить значок типа документа или нет. По ссылке значок не обязателен.

Документы iCloud включены: enter image description here

Вот код, который представляет UIDocumentPickerViewController:

let utis = [String](PlaylistItem.utiToType.keys)
let viewController = UIDocumentPickerViewController(documentTypes: utis, in: .import)
viewController.delegate = self
viewController.modalPresentationStyle = .formSheet
if #available(iOS 11, *) {
    viewController.allowsMultipleSelection = true
}
self.present(viewController, animated: AppDelegate.isAnimationsEnabled, completion: nil)

с этим определением ИМП в классе PlaylistItem:

enum FileType: Int {
    case other
    case mid
    case mp3
    case m4a
    case aiff // AIFF audio recording
    case wave
    case turboMidi // purchased MIDI file
    case style
}

static let kUTTypeStyleYamaha = "com.turboreini.style" // matches document types in Info.plist

static let utiToType: [String: FileType] = [
    kUTTypeMPEG4Audio as String: .m4a,
    kUTTypeMP3 as String: .mp3,
    kUTTypeMIDIAudio as String: .mid,
    PlaylistItem.kUTTypeStyleYamaha: .style
]

Это тип документа, полученный из Xcode 9: enter image description here

… и раздел «Импортированные ИМП»: enter image description here

Обратите внимание, что я выбрал произвольный идентификатор для файлов стилей, потому что я не смог найти официальный идентификатор в Интернете.

Эта проблема сводит меня с ума. Я не могу найти ничего плохого.

Интересно, зависит ли это от других установленных приложений?

Помимо импорта файлов .sty, приложение также создает собственные пользовательские файлы с собственным расширением. Для этого я определил экспортированный UTI. Работает нормально, файлы не отображаются серым цветом. Но решение для импорта файлов .sty не должно заключаться в перемещении записи из Импортированных в Экспортируемые UTI. Мое приложение является только «просмотрщиком» для файлов .sty.

Любые идеи по этому делу будут высоко оценены.

1 Ответ

0 голосов
/ 27 августа 2018

Оказалось, что на iPad моего клиента было установлено другое приложение, которое, по-видимому, также имело собственный UTI для расширения .sty. Установив его на iPad, я смог воспроизвести проблему.

К сожалению, я еще не смог заглянуть в Info.plist этого приложения для подтверждения.

Однако, благодаря Cocoanetics Я нашел API, который позволил мне запрашивать систему:

let pathExt = "sty"
if let utiArray = UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, pathExt as NSString, nil)?.takeRetainedValue() as? [String] {
    print("Have UTIs for .\(pathExt):")
    for uti in utiArray {
        if let dict = UTTypeCopyDeclaration(uti as NSString)?.takeUnretainedValue() as? [String: Any] {
            print("\(uti) = \(dict)")
        }
    }
}

Этот код покажет мне объявленные UTI из всех приложений, установленных на моем iPad, в зависимости от расширения файла. И действительно, появилось другое приложение. Но я все еще не мог видеть, было ли это объявлено как экспортированный или импортированный UTI.

Обходной путь - удалить конфликтующее приложение.

Для меня это недостаток системы UTI. Я постараюсь связаться с создателями файлов .sty (MIDI-стили, а не файлы LaTeX), чтобы попросить их о надлежащем UTI, которому должны соответствовать все разработчики.

Кажется, нужен глобальный реестр UTI. Apple уже создала коллекцию , но охвачены только самые популярные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...