Подтвердить что ты не робот

Регистрация файла 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>
4b9b3361

Ответ 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;
}