Регистрация файла GPX (или XML) для открытия в приложении iOS
У меня возникают проблемы с открытием файлов GPX в моем приложении iOS. Я зарегистрировал расширение, и некоторые файлы открылись правильно, то есть когда я нажимаю ссылку на файл GPX в Safari, он показывает приглашение, спрашивающее, какое приложение я хочу использовать для открытия файла. Затем я выбираю свое приложение, и файл обрабатывается, как и ожидалось. С некоторыми сайтами в Safari и со всеми файлами из вложений электронной почты приглашение и выбор приложения не отображаются, а приложение браузера/электронной почты показывает содержимое файла в виде текста.
Я подозреваю, что это проблема с настройками info.plist или, возможно, с приложениями Safari и электронной почтой. Если вы правильно откроете файлы XML или GPX в своих приложениях ios, разместите ли вы параметры CFBundleDocumentTypes и UTExportedTypeDeclarations из info.plist?
Любые мысли приветствуются. Вот соответствующий раздел из моего info.plist. Я попытался добавить и удалить некоторые необязательные теги, это последнее, но не самое полное.
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon.png</string>
<string>[email protected]</string>
</array>
<key>CFBundleTypeName</key>
<string>GPS eXchange Format</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>org.elsners.Indicium.gpx</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
<key>UTTypeDescription</key>
<string>GPS eXchange Format</string>
<key>UTTypeIdentifier</key>
<string>org.elsners.Indicium.gpx</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>GPX</string>
<string>gpx</string>
</array>
</dict>
</dict>
</array>
Ответы
Ответ 1
При работе с HTTP-контентом (например, в приложении Safari и Mail) вы не должны забывать обрабатывать его тип содержимого. Uniform Type Identifier (UTI) для типа содержимого дескриптора public.mime-type
и пусть говорят, что заголовок типа контента ответа сервера установлен в приложение /gpx, поэтому в вашем plist вы должны добавить раздел UTTypeTagSpecification
:
<dict>
<key>public.filename-extension</key>
<array>
<string>GPX</string>
<string>gpx</string>
</array>
<key>public.mime-type</key>
<string>application/gpx</string>
</dict>
Примечание. Я видел приложение /gpx и application/gpx + xml как тип контента для данных GPX в сети, и я не знаю, существует ли стандартный тип mime, поэтому лучше использовать и другие.
Ответ 2
Попробуйте этот код...
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if (url != nil && [url isFileURL]) {
// xdxf file type handling
if ([[url pathExtension] isEqualToString:@"xdxf"]) {
NSLog(@"URL:%@", [url absoluteString]);
}
}
return YES;
}