Bibliothèque
BertrandMartin
Membre
Salut à tous.
Je souhaiterai que mon programme ouvre un fichier .plist pour y prendre les données. Je sais faire si le fichier est dans le paquet .app . Le problème n'est pas de récupérer les données (j'utilise un NSArray arrayWithContentOfFile) mais bien de localiser le fichier. J'ai l'intention que le fichier ne soit pas dans le bundle mais dans un dossier de la bibliothèque utilisateur (la petite maison). Pour ce faire, j'essaie le pingouinesque ~/Library pour avoir un chemin générique (il ne servirait à rien de mettre mon nom d'utilisateur, je serai alors le seul à pouvoir utiliser le programme) mais sans succès. Que faire pour obtenir le début de chaà®ne du chemin de fichier placé dans un dossier de la bibliothèque du dossier utilisateur ?
Dans le même esprit, j'ai l'intention de proposer à l'utilisateur de charger un autre fichier .plist pour avoir d'autres données. Comment dans ce cas lancer une boite de dialogue standard d'ouverture de fichier et récupérer le chemin du fichier désigné par l'utilisateur ?
Merci !
Je souhaiterai que mon programme ouvre un fichier .plist pour y prendre les données. Je sais faire si le fichier est dans le paquet .app . Le problème n'est pas de récupérer les données (j'utilise un NSArray arrayWithContentOfFile) mais bien de localiser le fichier. J'ai l'intention que le fichier ne soit pas dans le bundle mais dans un dossier de la bibliothèque utilisateur (la petite maison). Pour ce faire, j'essaie le pingouinesque ~/Library pour avoir un chemin générique (il ne servirait à rien de mettre mon nom d'utilisateur, je serai alors le seul à pouvoir utiliser le programme) mais sans succès. Que faire pour obtenir le début de chaà®ne du chemin de fichier placé dans un dossier de la bibliothèque du dossier utilisateur ?
Dans le même esprit, j'ai l'intention de proposer à l'utilisateur de charger un autre fichier .plist pour avoir d'autres données. Comment dans ce cas lancer une boite de dialogue standard d'ouverture de fichier et récupérer le chemin du fichier désigné par l'utilisateur ?
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Regarde donc la doc de NSSearchPathForDirectoriesInDomains, ça devrait répondre à ta question.
Pour le point 2, je connais moins, car je suis plus sous iOS...
Cependant, ça c'est pour l'explication, mais ça n'empêche que mettre un tel chemin en dur n'est pas la bonne solution. Pour trouver le chemin vers les répertoires standards (le "Library" du système ou celui de ta Home, le dossier Documents de ta Home, etc), utilise la méthode citée par LeChatNoir en indiquant les bonnes constantes selon le dossier standard dont tu veux récupérer le chemin. C'est la façon officielle de faire.
Pour le point 2, il faut utiliser NSOpenPanel. Tu as même dans la doc de la Class Reference de NSOpenPanel un lien vers le "Sheet Programming Topics" qui t'explique toutes les étapes pour afficher des "sheets" sous la barre de titre de ta fenêtre comme le font la plupart des applis Mac.
Je me plonge dans le point 2.
D'ailleurs, la seule voie pour contourner le MAS (et celle-ci, je ne vois pas comment Apple pourraà®t la fermer) sera bietôt d'installer une application que l'on compilera soi-même à partir d'un code source téléchargé. Ah, les joies linuxiennes du "./Configure, Make et sudo make install" ! Avec les dépendances qui ne sont JAMAIS satisfaites et qui dépendent elle même d'autres dépendances !
Comme c'est une question plus complexe qu'il n'y parait, je t'invite à lire la doc.
Dans l'hypothèse très improbable (j'allais écrire paranoà¯aque) qu'Apple interdise d'exécuter toute application qui ne soit pas signée, je ne vois pas en quoi compiler soi-même l'appli change quoi que soit. Même si tu la compiles toi-même, elle sera toujours non signée, et le système d'exploitation refusera de la lancer.
Il faut bien comprendre que la signature du code n'est là que pour signer le code (ça parait une évidence mais il semble bon de le rappeler quand même), c'est à dire pour apposer ta signature sur l'application et certifier que c'est untel qui l'a développée et créée.
Ainsi s'il y a un problème, que l'application fait des choses malveillantes, on sait à qui s'en prendre, la personne a signé son oeuvre.
Ceci n'a rien à voir avec le Sandboxing.
Rien ne t'empêche d'exécuter une application non-signée (tu peux tout à fait le désactiver dans GateKeeper, ou faire un clic-droit -> Ouvrir sur l'appli pour l'ouvrir même si elle n'est pas signée et que GateKeeper te déconseillerait de l'ouvrir sinon). C'est juste qu'alors si elle te fait des misères, vole tes données ou quoi, tu ne pourras t'en prendre qu'à toi-même.
Cela est juste fait pour t'inciter à n'exécuter que des applications de confiance, pas des trucs téléchargés un peu n'importe où (réseaux pirates ou autres) et te retrouver avec un cheval de troie genre une application qui se fait passer pour quelqu'un d'autres, genre tu penses avoir téléchargé le dernier Microsoft Office sur un réseau pirate mais c'est un cheval de troie qui en fait te pourrit ton ordi et envoie ton carnet d'adresse au pirate et transforme ton mac en relai de spam ou je ne sais quoi... si tu avais vérifié avant que le Microsoft Office que tu as c'est bien celui signé par Microsoft et non pas une appli non signée, tu n'aurais pas eu de déboires.
Tout ce système de signature de code permet donc de s'assurer que tu n'exécutes que des applications qui ont été signées par leur auteur et donc certifiées comme étant les applications d'origine de leur auteur. Une fois compilées et signées, tu ne peux pas modifier le binaire de l'application (pour introduire du code malveillant dedans par exemple) sans casser la signature. Après bien sûr si tu télécharges une application faite par qqun de malveillant et qui l'a signée avec son propre certificat, l'application est signée et pourra exécuter son code malveillant, mais tu sauras qui blâmer et l'auteur sera rapidement identifié banni de toute façon.
Tout ceci n'a rien à voir avec le Sandboxing (même si malheureusement beaucoup de personnes font l'amalgame), qui lui consiste à s'assurer qu'une application est confinée à son propre environnement et de lui interdire de toucher au reste de ton système pour éviter de le corrompre en modifiant des fichiers auxquels il n'a pas le droit d'accéder.
Mais rien ne t'empêche de continuer à créer des applications, qui accèdent à des fichiers du système en dehors de sa sandbox (tu ne pourras alors pas distribuer ton application via le MacAppStore -- sauf dérogation spéciale ou raison justifiée et autorisée de cette sortie de sandboxing, mais c'est rare), et de signer cette application avec ton certificat développeur, et distribuer ton application sur ton site internet ou par n'importe quel moyen de ton choix. Et cette application pourra être exécutée sur n'importe quel Mac, même si ce Mac a GateKeeper d'activé et n'autorise que les applications signées.