Création d'un fichier partagé (csv)

Bonjour, je voudrais savoir si il est possible et surtout comment procéder pour créer un fichier partagé de type csv par exemple qui soit accessible via une autre application comme dropbox par exemple.


En faite, mon application est une borne dans un magasin qui consiste à  enregistrer dans un fichier csv des informations de client et ce fichier doit être accessible via une autre application (ou ordinateur) pour les consulter facilement sans passer par des webservices.


Réponses

  • Ma contribution ne va peut-être pas être très constructive ...


     


    Partager un fichier CSV par DropBox c'est comme partager n'importe quel autre type de fichier.


    Il faut donc séparer la problématique "Partager" et la problématique "CSV".


     


    Pour que l'on puisse répondre efficacement à  la question comment "Partager" ? il faut que l'on en sache un peu plus :


    - partager avec qui ?


    - combien de "partageurs" ?


    - à  quel rythme ?


     


    Par exemple, partager avec DropBox n'est pas une bonne idée si le fichier peut être ouvert simultanément par plusieurs "partageurs". Dans ce cas c'est le dernier qui sauvegarde qui a raison ; il y a risque de perdre des données.


     


    Le partage de ce type d'information par CSV ne me paraà®t pas non plus une bonne idée. Une base de données, ou Core Data permettent une meilleure extensibilité. Et il y a toujours moyen d'exporter des données sous forme CSV si nécessaire.


  • Je pense aussi que Partager reste à  définir, et je vais donner d'autres pistes, car je ne sais pas réellement ce qu'est sous-entendu par ce terme.


     


    Tu cherches peut-être à  "Ouvrir Avec", du iTunes File Sharing, etc.


  • Merci pour vos réponses, en faite je souhaiterais la solution la plus simple pour qu'un client ait accès à  ce fichier csv partagé depuis un ordinateur distant sans se connecter à  la borne ?


    Sans utilisé de webservice aussi.

  • Joanna CarterJoanna Carter Membre, Modérateur
    C'est pour ça que l'on puisse profiter de CloudKit
  • AirDrop ? Mail ? Possibilité de créer une application compagnon à  installer sur le PC/Mac d'à  côté ?


  • Par exemple Mail, comment faire pour que le fichiers csv soit partagé et donc accessible avec l'application Mail de la borne pour envoyer le fichier par email ?


  • AliGatorAliGator Membre, Modérateur
    juillet 2015 modifié #8
    Tu peux utiliser MFMailComposerViewController pour présenter l'interface qui va permettre d'envoyer un mail avec le CSV en pièce jointe.


    Ceci dit ce serait encore mieux utiliser une solution générique de type le bouton "Partager" que l'on voit dans un peu toutes les applications et qui permet de partager par mail mais aussi par n'importe quel autre service qui supporte cette fonctionnalité (Facebook, Twitter, Dropbox, AirDrop, Bluetooth ...), ce qui te permettrait bien plus de flexibilité dans le choix du moyen de partage .


    Pour ce faire il suffit de créer un UIActivityViewController, le configurer pour lui dire les items que tu veux partager (ton CSV), et le présenter en modal comme tu le fais pour n'importe quel VC.
  • CloudKit me paraà®t une bonne solution. Le problème sera sans doute de définir l'identifiant qui devra être utilisé par la borne.


     


    Il semblerait que le problème de partage soit simple : un producteur unique et un consommateur unique.


  • AliGatorAliGator Membre, Modérateur
    juillet 2015 modifié #10
    En fait, une chose que tu ne nous as pas expliqué, c'est si tu souhaites absolument que ce partage de fichiers se fasse sans intervention de l'utilisateur genre en background automatiquement " et dans ce cas ce sera plutôt une solution comme un WebService ou CloudKit etc. " ou si cela ne te dérange pas que cela nécessite une interaction utilisateur pour l'envoi (appui sur un bouton qui va présenter une vue pour partager le document, type MailComposer) " et dans ce cas des solutions comme un MfMailComposer ou un UIActivityViewController par exemple sont bien plus simples à  mettre en place.


    La tu dit juste "je veux partager mon fichier" mais le terme "partager" peut vouloir dire tellement de choses, il y a tellement de moyen de partager, et puis ça peut vouloir dire envoyer par mail ou ça peut vouloir dire mettre à  disposition sur un espace partagé, permettre l'accès concurrent à  la GoogleDrive/DropBox ou pas... donc ta demande est bien trop floue, il faut que tu nous expliques + ce que tu entends pas là .

    Car d'après ce que je comprend finalement tu ne cherches pas tant à  partager au sens "commun"/premier du terme (mettre sur un espace de partage, rendre accessible en accès concurrent via une plateforme type CloudKit ou GoogleDrive, ...), mais plutôt à  envoyer (par email, sur DropBox, etc) une copie du fichier. Ce qui n'est pas pareil !



    Sinon un article très complet (même sans doute trop pour ton cas ?) de NSHipster sur UIactivityViewController et les différents moyens d'envoyer un document à  un service ou app externe : http://nshipster.com/uiactivityviewcontroller/
  • Merci à  tous pour vos nombreuses réponses. 


    Je vais essayer d'être un peu plus clair.


    Sur la borne nous avons deux types d'utilisateur.


    Le premier est monsieur madame tout le monde dans le magasin qui complète un formulaire à  cette borne.


    Ces données sont sauvées dans un fichier csv.


    Le second utilisateur possible est un administrateur qui lui doit juste se charger de récupérer le fichier csv par mail, dropbox,etc.... 


    Mais évidement, je ne veux pas que le client du magasin ait accès via l'application contenant le formulaire à  se partage du fichier csv.


    C'est pourquoi je souhaites juste que ce fichier soit partagé avec d'autres applications sur l'ipad par exemple Mail,dropbox,autre....


    Donc sauf si je me trompe les fonctionnalités UIActivityViewController et MailComposer risque de ne pas fonctionner car elles doivent se trouver dans l'application du formulaire et accessible par le premier type d'utilisateur.


    cette demande peut sembler bizarre mais c'est un client qui souhaite réduire les coûts de l'application.


    Concernant la solution cloudKit, elle risque de m'ennuyer un peu car je suppose que le client doit avoir un compte Mac et tout pour cela.


    En espérant être plus claire ...


  • La borne est donc connectée à  Internet d'après ce que je comprends.


     


    La deuxième application ne me paraà®t pas une bonne solution, car il vaut mieux verrouiller la borne sur une seule application pour éviter  les manipulations hasardeuses des clients un peu geeks.


    Mais oui on peut concevoir une deuxième application, qui appartienne au même groupe que la première afin de partager certaines données.


     


    Dans ton cas le plus simple me paraà®t tout de même l'appel d'un WebService afin que le fichier CSV (ou autre format) soit fabriqué sur un site Web. Il sera alors plus facile de le récupérer (par FTP par exemple) et surtout il sera hors de portée des utilisateurs de la borne.


  • OK merci jpimbert, en effet je comptais la mettre en mono-application avec Airwatch mais quand l'administrateur voudrait récupérer le fichier csv il pouvait desactivé le mode mono Application. 


    En faite je voudrais savoir si il est possible qu'une application A partage un fichier accessible pour une application B si oui comment sans avoir recourt à  du réseau ou internet ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    Pourquoi pas avoir un mot de passe pour l'administrateur et accéder le fonctionnalité admin par une geste comme trois ou quatre touches ?
  • Pourquoi pas en effet, mais je me poses surtout la question si c'est possible ou non de partager un fichier entre plusieurs applications ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    Dans un mot, sans un service web, non.
  • AliGatorAliGator Membre, Modérateur
    Tu peux dans ce cas, en solution facile à  mettre en oeuvre, lancer un serveur HTTP à  l'intérieur de ton application iOS (genre en utilisant CocoaHTTPServer), qui va savoir répondre à  la requête HTTP "http://ip-de-ton-ipad/fichier.csv"en envoyant le contenu (NSData) de ton fichier CSV en retour.

    - Ainsi il suffira à  ton utilisateur administrateur de lancer son navigateur sur son ordi (ou son iPhone ou son iPad ou son Android Phone ou ce qu'il veut) et d'accéder à  cette URL et ça va lui permettre de télécharger le fichier CSV directement.

    - Quant à  empêcher ton utilisateur Mr ou Mme Michu d'accéder à  ce CSV, déjà  à  la base pour pouvoir y accéder il faudrait qu'il soit sur le même réseau Wifi que ton iPad pour pouvoir y accéder (c'est sans doute le Wifi privé du magasin donc seul ton admin saura s'y connecter), et même s'ils y avaient accès faudrait connaà®tre l'IP de l'iPad, donc bon... (et puis au pire tu peux protéger ton accès en HTTPS par un login/mot de passe htaccess)


    Avec CocoaHTTPServer c'est vraiment facile à  faire et adapté à  ce genre d'usage simple, donc à  mon avis vu ton contexte, c'est le plus simple et ce qu'il te faut, vu qu'un bouton et l'usage de MFMailComposerViewController ou UIActivityViewController ne t'ira pas à  cause de l'accès à  Mr/Mme Michu, que CloudKit nécessite un compte AppleID, et que l'accès direct par code à  DropBox nécessite d'intégrer leur SDK, avec ClientSecret et APIKey et tout donc risque d'être compliqué.
  • AliGatorAliGator Membre, Modérateur

    Dans un mot, sans un service web, non.

    Ou plus exactement, seulement si :
    - lesdites applications ont été construites dans le cadre d'une même "suite logicielle", par la même société, et qu'elles ont été prévues pour, à  l'aide d'un "Group Container Sandbox" (c'est à  dire une Sandbox que se partagent plusieurs applications qui ont été signées par un même Provisioning Profile, genre imaginons les différentes applications de la suite Office ou iWork). Ce qui n'est, forcément, pas ton cas pour le cas entre ton application à  toi et l'application Mail
    - Ou si elles utilisent UIDocumentPickerViewController pour permettre d'ouvrir un fichier exposé par une autre app (e.g. permettre à  ton app d'ouvrir un fichier exposé par DropBox).

    Tu pourrais rendre ton app compatible pour qu'elle expose le CSV aux autres applications, mais après je ne crois pas que l'appli Mail sur iOS utilise un UIDocumentPickerViewController pour te permettre d'aller cherche une pièce-jointe d'une autre appli (à  ma connaissance il ne permet que d'insérer une Photo ou Vidéo via un UIImagePickerController, pas d'aller chercher une PJ dans DropBox ou autre). Et puis de toute façon même si ça avait été possible, ça serait pas très pratique pour ton admin d'aller ouvrir l'app Mail sur l'iPad, créer un nouveau mail, aller lui-même chercher la pièce jointe CSV et rentrer son email pour se l'envoyer...
  • Joanna CarterJoanna Carter Membre, Modérateur

    Ou plus exactement, seulement si...



    Encore une fois, merci pour tes précisions :)
  • Merci à  tous pour vos conseils ! 


    Finalement, après discussion avec mon chef de projet, il a été convenu de faire une section sécurisé et d'utiliser le composant MFMailComposeViewController pour envoyer par e-mail le fichier csv.


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