Ouvrir un document pour mon appli depuis Safari

Bonjour,


 


Je termine un second projet iOS en ce moment : il s'agit d'un logiciel de géométrie pour les scolaires.


J'ai créé un type de fichier dédié, qui se termine par "iGomet". Les fonctions load et save fonctionnent TB en interne.


 


Je voudrais que, si je mets sur Internet un fichier "iGomet", Safari me propose de l'ouvrir dans mon appli. J'ai essayé, et bien que mon appli indique bien reconnaà®tre ce type de fichier dans les "infos" du projet, Safari me propose d'ouvrir ces fichiers avec d'autres applis mais pas la mienne.


J'ai bien signé mon appli, j'ai bien spécifié les types de fichiers admis, que dois-je faire d'autre encore?


Merci par avance si vous avez le bon "tuyau"!


Réponses

  • J'ai aussi essayé d'implémenter 


    - (BOOL)application:(UIApplication *)application openFile:(NSString *)filename


    ou : 


    - (BOOL)openURL:(NSURL *)filename


     


    sans succès pour l'instant. Cela marche tout seul avec ces méthodes sous MacOS, ce ne doit pas être bien plus compliqué sous iOS??


  • Re bonjour,


     


    J'ai trouvé cette fonction qui a l'air d'être la bonne d'après un exemple dans les code source Apple,


    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation


     


    mais cela ne fait pas apparaà®tre encore mon appli lorsque je veux charger mon document dans Safari.


     


    Est-ce que quelqu'un aurait une idée? Merci par avance... :)

  • Eric P.Eric P. Membre
    septembre 2014 modifié #4

    Bonjour,


     


    Je fais cela depuis d'autres apps avec : - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


    où [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]

    donne le lien du fichier à  ouvrir.

    Je n'ai pas essayé depuis Safari.

  • jpimbertjpimbert Membre
    septembre 2014 modifié #5

    Pour transmettre des informations d'une application à  une autre il faut utiliser les schemes URL (URL Types dans les Infos du projet Xcode).


    Je n'ai pas encore regardé les extensions de iOS8, c'est vraisemblablement une alternative qui peut marcher dans ton cas.


  • Merci jpimbert. J'ai essayé, c'est assez marrant : je fais le tuto, je compile, et XCode efface l'URL sheme alors. Lorsque je rouvre ma page info, il a disparu!


     


    EricP, j'aimerais que Safari me propose mon appli, un peu comme sous MacOS, l'OS propose immédiatement la bonne appli pour ouvrir tel ou tel fichier. Un peu comme pour Key pour les .ppx et Pages pour les .doc.


  • Bonjour,


     


    Ce qu'il te faut c'est juste rajouter la bonne clée avec les bonnes informations dans le fichier plist. Tu trouveras touts les informations dans le la documentation "Document interaction".


     


    https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/RegisteringtheFileTypesYourAppSupports.html#//apple_ref/doc/uid/TP40010411-SW1

  • HerveHerve Membre
    septembre 2014 modifié #8

    Merci Samir pour ce lien. Je pense avoir avancé un peu grâce à  lui.


     


    Cela ne marche pas encore. Voici où j'en suis :


    J'ai bien implémenté la fonction



    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    dans l'AppDelegate. Au début je mets :



    if (url && ([[url pathExtension] isEqualToString:@iGomet] == YES))

    pour filtrer les entrées.


     


    Le info.plist affiche bien le type de fichiers avec la bonne extension dans "Document types".


    En ce qui concerne l'URL, j'ai finalement compris que les "Schemes" n'étaient pas les terminaisons mais le début de l'adresse, aussi j'ai mis "http", "ftp" et "mailto" au cas où.


     


    Je doute de ce qu'il faut mettre dans "URL identifier", pour l'instant j'ai mis le "Bundle Identifier". Est-ce bien ce qu'il faut faire? Si il faut mettre une adresse Internet, c'est absurde puisqu'il faudrait pourvoir télécharger le document depuis n'importe quelle adresse Web!


     


    J'ai beau tourner la doc dans tous les sens, je ne vois pas ce qu'il faut faire en plus. Auriez-vous une idée?


     


    Merci encore pour votre aide à  tous.


     


    PS : ce qui est marrant, c'est que Safari me propose d'ouvrir les documents dans d'autres applis qui n'ont rien à  voir avec la mienne! Est-ce parce que ces dernières utilisent le même type de sauvegarde, un NSMutableArray d'objets utilisant NSCoding enregistré avec NSData ?


  • Toujours pas trouvé la solution. Personne ne fait cela ici?   ???


  • samirsamir Membre
    septembre 2014 modifié #10

    Salut,


     


    Si Safari ne propose pas d'ouvrir le document dans ton application c'est que tu as mal déclaré ton fichier plist.


     


    En gros il faut déclarer que ton application peut ouvrir/traiter tel UTI et aussi informer le système sur l'UTI si il n'est pas de base.


     


    Tu peux montrer ton plist ?


     


    http://stackoverflow.com/questions/2774343/how-do-i-associate-file-types-with-an-iphone-application


  • Merci Samir pour ta réponse.


    La méthode pour ouvrir le fichier URL est :



    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    if (url && ([[url pathExtension] isEqualToString:@iGomet] == YES)){

    NSString *localizedName = nil;
    [url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL];
    NSMutableArray *session = [NSKeyedUnarchiver unarchiveObjectWithFile:localizedName];

    [self setDessinEnCours:0];
    [self copieLeDessin:session];

    return YES;

    }

    return NO;
    }

    Ma plist est :


     


    VueInfoPbPlist.jpg

     

    Je vais voir ce que je peux tirer de la discussion que tu donnes en lien.


    Merci.

  • AliGatorAliGator Membre, Modérateur
    octobre 2014 modifié #13
    La clé "Document Content Type UTI" n'est pas sensée contenir l'extension ("iGomet") mais le UTI du document. Un UTI (= "Universal Type Identifier" est un identifiant du style image.jpeg ou image.png etc ce n'est pas l'extension du fichier.


    (Par exemple l'UTI "image.jpeg" marche autant avec les fichiers à  l'extension ".jpg" que ".JPG" que ".jpeg" que ".JPEG")


    Je te laisse regarder les tutos qui doivent expliquer cela.
  • Ouaip! Mais s'il n'est pas "universel" (du genre cela ne marche qu'avec mon appli), je fais comment?


     



     


     


    Je te laisse regarder les tutos qui doivent expliquer cela.

    Je ne fais que cela depuis trois jours.  Il y a juste cela à  finir et l'adaptation de mon appli de géométrie est finie.


     


    C'est une truc pour les classes primaires : une règle, un compas, et une équerre (que j'ai ajouté par rapport à  la version MacOS). Ce serait chouette que les profs mailent à  leurs élèves l'exercice à  faire. Par iTunes, cela va être compliqué pour les gamins...


  • HerveHerve Membre
    octobre 2014 modifié #15

    Apparemment, ce n'est pas des URL types mais des UTI types. J'ai modifié en laissant les deux.  (Suivant le tuto, il faut l'un ou l'autre...)


     


    Je n'ai laissé que "public.data". Cela ne marche toujours pas!


     


    Je cherche encore.


  • Je vous embête une dernière fois avec ça, au cas où... Du coup, je suis en train d'installer un accès Web directement dans l'appli. Pour l'instant une ligne de texte, j'essaierai demain avec un UIWebView pour que ce soit plus cool. 


     


    Evidemment, là , cela marche du premier coup...


    Je suis simplement étonné, je suis certain que c'est possible d'utiliser Safari. Si un jour j'apprends?


     


    (Sous Mac OS, l'OS charge le fichier avant de l'ouvrir. Est-ce là  un début de solution??


    Mais pourquoi des applis sont proposées par Safari iOS à  la place de la mienne?????) 


     


     


    Ainsi la Nuit...



  • Bon courage !


  • FKDEVFKDEV Membre
    octobre 2014 modifié #18

    Les extensions proprement dites sont spécifiées dans une section à  part appelée "Imported Type UTIs".

  • Merci FKDEV. A quoi correspondent toutes ces informations? les 6 item de "Document Content type UTI" en particulier? J'ai pensé que c'était le nom du bundle, mais alors pourquoi y en a t-il autant??




  • Merci FKDEV. A quoi correspondent toutes ces informations? les 6 item de "Document Content type UTI" en particulier? J'ai pensé que c'était le nom du bundle, mais alors pourquoi y en a t-il autant??




     


    L'app gère 6 types de documents différents (kmz, kml, ov2, csv, etc) mais dans ton cas il n'y aura qu'un seul type.


    Tu peux mettre le nom que tu veux pour le type de document, généralement c'est :


    COM.<SOCIETE/ORGANISME><EXTENSION>

  • Merci FKDEV. J'ai essayé de copier ton modèle, mais sans succès. C'est dommage, j'imagine que c'est très simple, mais je n'arrive pas à  le faire marcher!


     


    La fonction dans AppDelegate est bien celle que j'indique plus haut je pense? 


     


    Ce sera pour l'update sinon...


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