2013-01-23 15 views
6

Pracuję nad aplikacją iOS, która umożliwia eksportowanie danych przez wysłanie pliku pocztą e-mail. Aplikacja rejestruje typ pliku jako plik z rozszerzeniem "sainputs" (tak, aby aplikacja mogła również otwierać plik z wiadomości e-mail lub skrzynki referencyjnej w celu importowania wartości - to działa poprawnie). Próbuję dodać możliwość wysłania pliku do dowolnej innej aplikacji, która może otwierać różne typy plików. Dropbox to dobry przykład - powinien otwierać dowolny typ pliku.iOS: błąd podczas wysyłania pliku specyficznego dla aplikacji do Dropbox za pomocą UIDocumentInteractionController

Obecnie próbuję to, wyświetlając UIDocumentInteractionController, który jest zainicjalizowany z adresu URL pliku. Po wyświetleniu aplikacja Dropbox pojawia się zgodnie z oczekiwaniami jako jeden z dostępnych sposobów otwierania pliku.

Jednak, kiedy nacisnąć ikonę Dropbox, i nic się nie dzieje w konsoli widzę następujący tekst:

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

w pliku plist o aplikacji rejestruje typ dokumentu mającego UTI com.mycompany.myapp. sainputs i rejestruje wyeksportowany typ UTI o identyfikatorze com.mycompany.myapp.sainputs z publicznymi rozszerzeniami nazw plików 's oraz Mapp typu myapp/inputs.

Oto istotne fragmenty pliku plist:

<key>CFBundleDocumentTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeName</key> 
      <string>My App's File Type</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>com.mycompany.myapp.sainputs</string> 
      </array> 
     </dict> 
     <array> 
. 
. 
. 
<key>UTExportedTypeDeclarations</key> 
    <array> 
     <dict> 
      <key>UTTypeConformsTo</key> 
      <array/> 
      <key>UTTypeDescription</key> 
      <string>My App's File Type</string> 
      <key>UTTypeIdentifier</key> 
      <string>com.mycompany.myapp.sainputs</string> 
      <key>UTTypeTagSpecification</key> 
      <dict> 
       <key>public.filename-extension</key> 
       <string>sainputs</string> 
       <key>public.mime-type</key> 
       <string>steuerapp/inputs</string> 
      </dict> 
     </dict> 
     <array> 

Próbowałem zmieniając typ MIME dla 'application/octet-stream' w pliku plist. To nie miało znaczenia.

Wszelkie porady/pomysły byłyby bardzo cenne.

+2

Podaj wartość dla klucza 'UTTypeConformsTo'. Być może "public.data" zadziała. – rmaddy

+0

Dziękuję rmaddy! To wystarczy! Opublikuj to jako odpowiedź, więc mogę oznaczyć ją jako poprawną odpowiedź. – bgh

Odpowiedz

5

Zgodnie z sugestią @maddy i potwierdzeniem @bgh rozwiązuje to problem. Po prostu wpadłem na ten sam problem.

Oprócz zdefiniowania niestandardowego uniwersalnego typu można również wskazać, że ten typ jest "podtypem" bardziej ogólnego typu. Na przykład. poprzez wyraźne określenie UTI 'public.data w kluczu UTTypeConformsTo następująco:

<dict> 
    <key>UTTypeConformsTo</key> 
     <array> 
     <string>public.data</string> 
     </array> 
    <key>UTTypeDescription</key> 
     <string>My App's File Type</string> 
    <key>UTTypeIdentifier</key> 
     <string>com.mycompany.myapp.sainputs</string> 
    <key>UTTypeTagSpecification</key> 
     <dict> 
     <key>public.filename-extension</key> 
      <string>sainputs</string> 
     <key>public.mime-type</key> 
      <string>steuerapp/inputs</string> 
     </dict> 
</dict> 

Następnie można określić niestandardowe ZUM jako argument w UIDocumentInteractionController:

UIDocumentInteractionController *documentController = ...; 
documentController.UTI = @"com.mycompany.myapp.sainputs"; 

Apples documentation about this can be found here.

0

Jeśli zdarzy się to komuś innemu:

Nie mogę sprawić, aby Klaas odpowiadał na moją pracę, ponieważ miałem inną aplikację na dewizie ce (wersja "light") również deklarujące to samo UTI, z niepoprawnymi ustawieniami. Musisz dodać "public.data" w każdej aplikacji, która deklaruje typ, zanim będzie mógł działać.

Dla pewności, zaleciłbym debugowanie z tylko jedną zainstalowaną aplikacją, a następnie dodać drugą i sprawdzić, czy wszystko nadal działa.

Powiązane problemy