Ответ 1
Если ваш UTI объявлен как public.data
, я предполагаю, что ваш файл контрольного списка является пользовательским двоичным данным.
Затем вы должны просто использовать application/octet-stream
как тип mime.
UPDATE:
Получил это, ваша проблема более тривиальная, чем кто-либо ожидал бы. Еще одна вещь для начинающих - public.data
подходит для всех ее потомков (включая public.xml
), поэтому для файла XML вы можете установить любой из них:
-
public.item
-
public.data
-
public.content
-
public.text
-
public.xml
Список приложений, предлагаемых для открытия типа вашего файла, создается на основе известных приложений в системе, которые могут обрабатывать данные UTI плюс ваши. Поскольку текстовый редактор по умолчанию открывается public.text
и public.xml
, это будет действие по умолчанию для ваших файлов (ваше приложение будет отображаться в списке, вызванном длительным нажатием на вложение электронной почты).
Существует (видимо) приложений, которые обрабатывают public.data
(то же самое для public.content
), поэтому, когда вы используете этот UTI, действие по умолчанию для вложения будет состоять в том, чтобы открыть его в вашем приложении.
Теперь к точке... ваш CFBundleDocumentTypes
имеет один дополнительный уровень <array>
:
<key>CFBundleDocumentTypes</key>
<array>
<array> <!-- remove this line -->
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>docIcon64.png</string>
<string>docIcon320.png</string>
</array>
<key>CFBundleTypeName</key>
<string>My App Checklist</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.mycompany.appid.checklist</string>
</array>
</dict>
</array> <!-- and this line -->
</array>
И это сработает. Часть UTExportedTypeDeclarations
уже прекрасна.