Question Fichier d'extension personnalisé ne s'ouvrant pas dans iMessage


Dans mon application, je dois envoyer des fichiers de données personnalisés d'un périphérique à un autre et j'essaie de le faire avec Mail, iMessage / Message et Airdrop.

Cela fonctionne très bien avec Mail et Airdrop mais avec iMessage et ça va très bien, mais à la réception, je ne peux pas ouvrir les fichiers. Ça ne me permet pas de faire quoi que ce soit avec ça.

Des idées??

Voici à quoi ressemble mon type de document:

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeIconFile</key>
            <string>abc.png</string>
            <key>CFBundleTypeName</key>
            <string>ABC Custom Data type</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>Handler Rank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.company.abc.wd</string>
            </array>
        </dict>
    </array>

Voici comment j'envoie les données:

NSMutableDictionary * dict = [NSMutableDictionary dictionary];
[dict setObject:currentDataSet forKey:@"actualData"];
NSData * meetingData = [NSKeyedArchiver archivedDataWithRootObject:dict];

Meeting * dataItem = [[Meeting alloc]initWithData:meetingData
               type:@"com.abc.xyz.wd" subject:@"Meeting"
          previewImage:[UIImage imageNamed:@"appIcon.png"]];

UIActivityViewController * activityController =
  [[UIActivityViewController alloc]initWithActivityItems:@[dataItem]
                                   applicationActivities:nil];

activityController.excludedActivityTypes =
       @[UIActivityTypePostToTwitter, UIActivityTypePostToWeibo];

[self presentViewController:activityController animated:YES completion:nil];

17
2018-04-03 02:52


origine


Réponses:


Je suis tombé sur ce post en cherchant une solution similaire. J'ai pu envoyer des fichiers personnalisés à partir de mon application et l'ouvrir par courrier électronique ou l'utiliser avec AirDrop. Si je l'ai envoyé via iMessage, il est même apparu avec mon icône personnalisée, mais quand je l'ai tapé dans iMessage, rien ne s'est passé.

Sachez que vous avez besoin de quelque chose comme ce qui suit dans votre fichier plist (de Comment associer des types de fichiers à une application iPhone?)

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
    <array>
        <string>public.plain-text</string>
        <string>public.text</string>
    </array>
    <key>UTTypeDescription</key>
    <string>Molecules Structure File</string>
    <key>UTTypeIdentifier</key>
    <string>com.sunsetlakesoftware.molecules.pdb</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <string>pdb</string>
        <key>public.mime-type</key>
        <string>chemical/x-pdb</string>
    </dict>
</dict>

NOTE: j'avais quelque chose de très similaire pour mon application MAIS dans UTTypeConformsTo, je n'avais que public.data puisque mes fichiers étaient des fichiers de données compressés.

J'ai trouvé qu'en ajoutant public.text comme deuxième élément du tableau, il serait possible de le faire dans iMessage. Par ailleurs, si j'ai ajouté public.plain-text en tant que troisième élément, mon fichier s'est retrouvé avec une icône Pages au lieu de mon icône (je l'ai donc supprimé)

J'espère que ça aidera quelqu'un. Il m'a fallu des heures pour aller au fond des choses.


3
2017-12-30 20:35



La valeur dans votre Info.plist pour le LSItemContentTypes key doit être égal à ce qui est déclaré par votre objet Meeting.

Vraisemblablement votre objet de réunion adhère à la UIActivityItemSource protocole. Assurez-vous que la valeur que vous retournez (de la méthode délégué activityViewController:dataTypeIdentifierForActivityType:) correspond à la valeur que vous avez déclarée lisible dans votre Info.plist.


1
2018-05-28 20:00



Cette réponse est correct en ce que le document personnalisé peut être ouvert à partir de Messages s'il est conforme à public.text. L'inconvénient de cette solution est que le document est prévisualisé en tant que texte brut, ce qui peut ne pas être le résultat souhaité.

Documents conformes à public.data peut être ouvert à partir de l'application Messages sans être prévisualisé en tant que texte brut en créant une extension d'aperçu Quick Look. Il n'y a pas beaucoup de documentation sur la façon de créer une extension d'aperçu Quick Look, mais c'est assez simple:

  1. Dans Xcode, choisissez, File > New > Target.

  2. Choisir Extension d'aperçu Quick Look, donnez un nom à votre extension et cliquez sur terminer.

  3. dans le info.plist pour l'extension nouvellement créée, ajoutez un nouvel élément sous NSExtension > NSExtensionAttributes > QLSupportedContentTypeset définissez la valeur de cet élément sur le type de document personnalisé de votre application. Par exemple:

    ...
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>QLSupportedContentTypes</key>
            <array>
                <string>com.company.abc.wd</string>
            </array>
            <key>QLSupportsSearchableItems</key>
            <true/>
        </dict>
        <key>NSExtensionMainStoryboard</key>
        <string>MainInterface</string>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.quicklook.preview</string>
    </dict>
    ...
    
  4. Utilisation MainInterface.storyboard et PreviewViewController pour définir la disposition de votre aperçu personnalisé Quick Look. Plus précisément, lisez les données de l’URL fournie dans le preparePreviewOfFile fonction et remplir le ViewController en conséquence. Un bref exemple (dans Swift 4):

    func preparePreviewOfFile(at url: URL, completionHandler handler: @escaping (Error?) -> Void) {
        do {
            let documentData = try Data(contentsOf: url)
    
            // Populate the ViewController with a preview of the document.
    
            handler(nil)
        } catch let error {
            handler(error)
        }
    }
    

Quelques pièges que j'ai rencontrés lors de la création de mon extension:

  • L'identifiant UTI exporté devait être en minuscules. Lorsque certains caractères étaient en majuscules, l'aperçu Quick Look n'a jamais été affiché, même si j'ai utilisé la même capitalisation dans l'extension Quick Look Preview.

  • Quick Look Preview Extension ne peut pas être lié à des bibliothèques dynamiques. Si une bibliothèque dynamique est liée, l'aperçu Quick Look ne sera pas chargé.

  • Le Quick View ViewController n'est pas autorisé à avoir des boutons. S'il contient un bouton, l'aperçu Aperçu rapide ne sera pas chargé.

Ressources additionnelles:


0
2017-08-06 00:26