Extension : règle d'activation

Bonjour,


 


je développe un application contenant une extension permettant d'enregistrer un fichier en pièce jointe d'un mail (fichier .klm) dans mon application.


 


Or lorsque j'enlève la Valeur TRUEPREDICATE de mon fichier info.plist et que je la remplace par 


 


<key>NSExtension</key>


<dict>

<key>NSExtensionAttributes</key>

<dict>

<key>NSExtensionActivationRule</key>

<dict>

<key>NSExtensionActivationSupportsAttachmentsWithMinCount</key>

<integer>1</integer>

</dict>

</dict>

<key>NSExtensionMainStoryboard</key>

<string>MainInterface</string>

<key>NSExtensionPointIdentifier</key>

<string>com.apple.ui-services</string>

</dict>

 

elle n'apparait plus.

 

Quelqu'un aurait-il une idée ?

En vous remerciant par avance

Réponses

  • Personne n'a d'idée ?  :'(


  • Je n'ai jamais touché à  ce genre de features, mais il n'y a aucune référence à  "klm" dans ton plist ?


  • Non effectivement car si j'ai bien compris le "NSExtensionActivationSupportsAttachmentsWithMinCount" devrais activer l'extension lorsqu'il y a une pièce jointe au mail quelque soit le format... et ce n'est même pas le cas ^^


  • Bonjour,


     


    Si j'ai bien compris tu souhaites utiliser la fonction "Ouvrir dans" ou "Copier dans" depuis d'autres apps vers la tienne.


    N'est-ce pas avec les "Document Types" et les "Exported UTIs" que l'on obtient cette fonctionnalité ?


     


    Tu ne détailles pas beaucoup ton problème.


    Est-ce que ton application n'est pas proposée pour ouvrir ce type de fichier ?


    Est-ce l'ouverture même du fichier qui pose problème ?


  • Bonjour,


     


    désolé je vais essayer de détailler un peu plus


     


    En gros j'ai une application qui permet de créer des .kml et de les envoyer par mail


     


    A cette appli, est liée une extension qui permet dans les mails d'enregistrer un kml dans l'appli de base


     


    Le problème est que l'extension n'apparait qu'avec NSExtensionActivationRule = TRUEPREDICATE


     


    Du coup j'essaye de faire une règle permettant à  l'extension d'apparaitre lorsque il y à  une pièce jointe en kml ou au pire lorsqu'il y a une pièce jointe de n'importe quel format


     


    Je ne sais pas si je suis plus clair

  • Petit complément, je met la règle dans le Info.plist de l'extension


  • Mes applications iPocket Draw et iPocket Draw Lite ont la possibilité de recevoir des fichiers d'un format propre depuis Mail ou des diverses apps telles que Dropbox et consorts.


    Et également de les envoyer vers ces applications.


    Pour cela, j'utilise uniquement les "Document Types" et les "Exported UTIs".




  • Pour cela, j'utilise uniquement les "Document Types" et les "Exported UTIs".




     


    pourrais-tu me donner un exemple si ça ne t'embête pas ?

  • Eric P.Eric P. Membre
    août 2017 modifié #10
    Une fois mes "Document Types" et les "Exported UTIs" déclarés, je vérifie dans l'app delegate lors de l'activation

     


     



    - (void)applicationDidBecomeActive:(UIApplication *)application

     si il y a un nouveau document à  ouvrir provenant d'une autre app comme cela : (désolé c'est de l'objective C)



    //Test si nouveau fichier à  ouvrir dans Inbox
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *path = [documentsDirectory stringByAppendingPathComponent:@Inbox]; //iPhone

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if ([fileManager fileExistsAtPath:path]) { //Il y a Inbox donc traitement du premier fichier

    NSURL *url = [NSURL fileURLWithPath:path isDirectory:YES];

    NSError *err = nil;

    NSArray *array = [[NSFileManager defaultManager]
    contentsOfDirectoryAtURL:url
    includingPropertiesForKeys:[NSArray array]
    options:0
    error:&err];

    if ((array != nil) && ([array count] > 0)) {

    NSURL *fileURL = [array objectAtIndex:0];

    //NSLog([fileURL relativePath]);

    //NSLog([fileURL pathExtension]);

    //NSLog([fileURL lastPathComponent]);

    NSString *fileExtension = [fileURL pathExtension];

    if (([fileExtension isEqualToString:@rcad]) || ([fileExtension isEqualToString:@RCAD])) {

    [[NSNotificationCenter defaultCenter] postNotificationName:@do_closeAll object:self];

    [activ_FDessin reset_all_data];

    l_zoomFactor = 0.0f;

    [file_IO load_file:fileURL inSpace:activ_FDessin delete:TRUE display_view:nil load_Prefs:TRUE];

    [geometrie calcul_CoefEchelle];
    [[NSNotificationCenter defaultCenter] postNotificationName:@needsDisplayNotification object:self];

    } else {

    //fichier pdf ou image ou dxf
    //A copier dans la sandbox pour utilisation ultérieure

    path = [documentsDirectory stringByAppendingPathComponent:[fileURL lastPathComponent]]; //iPhone

    if ([fileManager moveItemAtPath:[fileURL relativePath] toPath:path error:&err]) {

    //Alerte fichier copié


    Pour envoyer un fichier via "Ouvrir dans" :

     


     



    -(void)openDocumentIn {

    if (documentController != nil) [documentController release];

    documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:file_to_Transfer]];

    documentController.delegate = self;

    [documentController retain];

    [documentController presentOpenInMenuFromBarButtonItem:inputButton animated:YES];
    }


    -(void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {

    }


    -(void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application {

    }


    -(void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller {

    }

    Voilà  j'espère que cela te sera utile.


  • Merci beaucoup


     


    je ne savais pas que l'on pouvait le faire directement dans le code


     


    Je vais essayer de suivre cette piste :)


  • Merci Joanna d'être intervenue !


    S'il n'y avait que des problèmes d'espaces, ça va...


Connectez-vous ou Inscrivez-vous pour répondre.