2013-06-30 1 views
1

Я обновил свой файл моего приложения info.plist, чтобы отобразить новый тип файла (.ftl).Открытие файла данных в приложении по электронной почте

Когда я прикрепляю файл этого типа к электронному письму, iOS распознает тип файла как тот, который можно передать в мое приложение (значок моего приложения появляется, когда файл касается электронной почты). Однако, когда я выбираю значок, мое приложение не запускается.

В моем делегате приложения Я использую метод делегата application:openURL:sourceApplication:sourceApplication annotation: для обработки обработки связанных NSURL. Когда I NSLog этот метод, ясно, что метод не вызывается.

Любые идеи? У меня это работало в iOS 4. Затем я обновил Xcode, чтобы протестировать iPad с iOS 6 и столкнулся с этим тупиком. Остальное приложение работает нормально.

В дополнение к запросу Роба, вот мои файлы CFBundleDocumentTypes и UTExportedTypeDeclarations из моего файла info.plist. Спасибо:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.yourcompany.blinkapp.ftl</string> 
     </array> 
     <key>CFBundleTypeName</key> 
     <string>Blink FTL Sheet</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
    </dict> 
</array> 
<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeDescription</key> 
     <string>Blink FTL Sheet</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.text</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.yourcompany.blinkapp.ftl</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>ftl</string> 
     </dict> 
    </dict> 
</array> 

Я также попытался использовать public.data вместо public.text в моей UTTypeConformsTo. Та же проблема.

+0

Возможно, те люди, которые голосуют, чтобы закрыть это, потому что «непонятно, что вы просите», могут комментировать, потому что мне кажется, что вопрос совершенно ясен, даже если источником проблемы нет. Если у вас есть предложения по тому, как сделать этот вопрос более понятным, поделитесь этим. – Rob

ответ

0

В вашем CFBundleDocumentTypes («Типы документов») у вас нет CFBundleTypeRole («Роль»). Согласно documentation, «Этот ключ определяет роль приложения в отношении типа. Значение может быть редактором, средством просмотра, оболочкой или None. Эта клавиша требуется». Я могу попытаться установить это и посмотреть, устраняет ли это проблему.

Хотя я нахожусь в этом, я также был бы склонен определять тип mime, например. a public.mime-type из application/flight (или независимо от названия вашего приложения).


Глядя на ваш код, подпись для openURL не была завершена. Метод подпись:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    // handle the URL here 
} 
+0

Привет, Роб. К сожалению, ни одна из этих идей - хотя и действительная - устраняет проблему. Правильно ли я говорю, что если мой значок появится, когда приложение электронной почты будет затронуто, что приложение должно быть хотя бы запущено? Предполагая, что файл info.plist в порядке? Это ваше понимание? –

+0

@LeeBarringer Да, это мое понимание. Извините, это не сработало. – Rob

+0

Спасибо, Роб. Эта проблема является серьезной головной болью - поскольку приложение отлично работает на IOS 4. С уважением, Lee –

0

После нескольких дней разрывают мои волосы над этим вопросом, и некоторые фантастический ввод некоторых из членов этого сайта, я нашел источник ошибки:

On осматривая мою консоль устройства организатора (окно> организатор, то консоль устройства вы тестируете на), я заметил следующее предупреждение:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document 

Я смотрел это на форуме Apple, разработчик и наткнулось на:

https://discussions.apple.com/thread/4489540?start=0&tstart=0

Это выглядит как вопрос первого видели в IOS 6, требующих строгого соответствия между мим типов данных, заключенных в файл, который вы пытаетесь открыть в приложении, и заявленная в вас plist.info файл , В основном в прошивке 4, мое приложение открывает файл, содержащий XML-контент, заключенный в файле типа .ftl со следующим info.plist записи:

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.data</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.yourcompany.blinkapp.ftl</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>ftl</string> 
      <key>public.mime-type</key> 
      <string>application/blinkapp</string> 
     </dict> 
    </dict> 
</array> 

Однако в IOS 6, необходимо объявить UTTypeConformsTo как XML:

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.xml</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.yourcompany.blinkapp.ftl</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>ftl</string> 
      <key>public.mime-type</key> 
      <string>application/blinkapp</string> 
     </dict> 
    </dict> 
</array> 

... примечание public.xml НЕ публично.данные

Это может показаться очевидным, но, как я уже сказал, под iOS 4 и 5 мое приложение бежало без затруднений ... и внезапно в iOS6 не удалось даже запустить. Удачи и надеюсь, что это поможет!

+0

Я рад, что вы нашли решение для своего вопрос! – Rob

+0

Я знаю, что это может показаться странным, но вы должны чувствовать себя свободным «принять» свой собственный ответ, поэтому этот вопрос помечен как закрытый. – Rob

Смежные вопросы