Обновлено 9.04.2013 Это полный репост моего предыдущего вопроса. Поскольку я узнал гораздо больше о Launch Services, UTI и устаревших кодах создателя, я чувствую, что могу лучше задать вопрос с нуля.
Описание проблемы:
У нас есть приложение, разработанное для Legacy Mac 9.xx, которое все еще работает на Snow Leopard (с Rosetta). Приложение использует связанные файлы. Мы разработали наше новое приложение для Snow Leopard и не только. Проблема в том, что Launch Services неправильно связывает новое приложение на основе конфигурации plist, которую мы в настоящее время используем, и мне нужно знать, что я делаю неправильно.
Если я щелкну правой кнопкой мыши связанный документ и выберу GetInfo, я могу связать связанный файл либо с устаревшим приложением, либо с новым приложением, и оно будет работать так, как я ожидал. Я считаю, что это потому, что снежный барс все еще использовал технологию кода создателя для этого типа ассоциации. Если я скажу файлу связать себя со старым устаревшим приложением и нажму «Изменить все», Launch Services правильно свяжет все файлы этого типа, и он будет работать должным образом. Если я скажу файлу связать себя с новым приложением и выберу «Изменить все», приложение откроется, а файлы - нет. Насколько я могу судить, службы запуска назначают динамический UTI для приложения, и когда файл щелкается, ОС не знает, какое приложение использовать.
Я нашел там пару сообщений, которые, кажется, предполагают, что Apple, возможно, допустила некоторые дизайнерские ошибки в новой методологии UTI. В одном сообщении показано, как добавить массив расширений строковых файлов в словарь ExportedUTIs новых приложений pList. Это заставит приложение работать правильно, но это не решит проблему; Если мы позволим нашим пользователям называть свои файлы как угодно, мы не сможем предсказать в массиве, каким будет расширение их файлов. Нам нужны службы запуска, чтобы правильно работать строго с кодом UTI или каким-то образом заставить код OSType работать.
Как только новое приложение решит, что не может открыть связанный с ним файл, мне нужно открыть LanchServices.plist, удалить запись и перезапустить базу данных lsregister. Затем я снова могу открыть файл в новом приложении (связав его, не нажимая «Изменить все»).
Я прикрепляю несколько изображений к спискам приложений, прилагаемым спискам документов и записи Launch Services:
Любая помощь и наше руководство очень ценится.
Майк
Обновлено: 16.04.2013
Ссылка на сообщение об UTI, которое я предоставил, также включает ссылку на приложение с открытым исходным кодом под названием RCDefault app. Это приложение свяжет ваше приложение с данным файлом на основе вашего выбора UTI, расширений файлов, кодов OSType и типов файлов. Как ни странно, это приложение может связать файл с приложением на основе структуры UTI, представленной в наших списках.
Возможно ли, что это всего лишь ошибка в Launch Services for Snow Leopard для этого конкретного сценария, и Apple решила просто проигнорировать ее на данном этапе (учитывая, что они больше не поддерживают Snow)?