présence d'une application.
tablier
Membre
Pour que mon appli fonctionne elle doit trouver l'appli qu'elle interroge. Quel est le moyen le plus rapide pour trouvé si "xxxx.app" existe dans un volume donné? je n'ai que le nom de l'appli et le nom du volume.
Merci d'avance
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Cette méthode retourne le chemin de l'appli dont tu fournis le "bundle identifier" (qui est censé être unique sur le système).
Si le chemin retourné est vide (ou nil, à tester), c'est que l'appli n'est pas installée.
.
A part un itérateur de recherche sur le volume complet (très lent), je ne vois pas d'autre solution. J'accepte toutes les suggestions!
Merci pour vos réponses.
Tu t'embrouilles !
Si tu connais son nom, tu peux connaitre son "bundle-identifier" !
Pour ça, tu installes cette appli, tu visualises son contenu puis son info.plist. Après, tu n'as plus qu'à mettre cet identifier dans ton programme. Un point c'est tout !
Après quoi, puisque je suppose que ton appli va être diffusée, cela permettra de vérifier si cette apli est installée ou non (afin d'avertir l'utilisateur par exemple).
En somme, c'est mettre "en dur" dans ton programme, soit le nom de cette appli, soit son "bundle-identifier".
Je ne vois vraiment pas où est la difficulté...
.
Les xxx.app sont toujours des bundles sous OSX.
.
Je peux donc reposer ma question: quel est la bonne solution pour qu'Incrémental (avec les conditions exposées ci-dessus) trouve si CDF est ou n'est pas présent?
Le plus sûr dans ton cas est d'utiliser les launch-services, et plus particulièrement la fonction LSFindApplicationForInfo qui permet de retrouver une application par son code créateur.
Pour CDFinder, le code créateur est NDCD (je l'ai récupéré par FileBuddy).
Donc un test comme celui là :
te permet de tester la présence de CDFinder, quelque soit son emplacement sur le système.
(Ne pas oublier d'inclure le framework Carbon au projet).
.
Effectivement, c'est plus clair avec des noms ;-)
J'ai bien peur qu'il n'y ait pas d'autre solution que l'itération si ton application peut se trouver n'importe où. (d'ailleurs, c'est pour ça, que certains installateurs sont lents quelques fois à installer des applications, car elle vérifie qu'il n'y a pas déjà une vieille version quelque part)
[grilled by Bru]
Par contre, tu n'es pas forcement obligé de l'écrire toi-même, tu dois pouvoir passer par Carbon via LSFindApplicationForInfo (filtre via OSType) ou laissez la commande system_profiler faire le boulot :
system_profiler -xml SPApplicationsDataType
Tu peux utiliser NSTask par exemple pour la lancer et récupérer le résultat que tu filtreras pour vérifier la présence de l'application recherchée.
Si si, très clair, d' autant que cette question revient régulièrement dans divers forums et malheureusement, à ma connaissance, il n'y a pas de solution simple sous OS X ( à l'inverse de OS 9)
Justement, suite à une question similaire sur un autre forum, j'avais essayé la fonction PBDTGetPath (carbon) et ça ne trouve pas les applis en bundle ...
Nonobstant, cela mériterait une petite vérification, car je ne saurais être aussi affirmatif...
Voila, à mon humble avis, le plus simple serait encore de demander à utilisateur de désigner l'emplacement de cette appli...
Sinon, à partir de Tiger, on doit pouvoir utiliser Spotlight ::)
Nonobstante, mon cher, nonobstante...
Je peux être affirmatif (d'autant plus que, bien sûr, j'ai vérifié et testé).
Pour info, j'ai téléchargé l'appli CDFinder version carbon OS9 non bundleà¯sé. Cette appli était dans un dossier posé sur mon bureau.
LSFindApplicationForInfo a parfaitement retrouvé cette appli (un NSLog sur l'url retourné affichant "/users/bruno/desktop/cdfinder%2044.3/cdfinder" de mémoire).
seul bémol à cette technique, les applications qui ont été copiées sur le système sans passer par le Finder (par drag'n drop) ou par un instaleur non standard, ne sera sans doute pas connu du système. LSFindApplicationForInfo sera donc inefficace dans ce cas.
Dans un tel cas, on peut toujours afficher un message à l'utilisateur en disant que l'appli n'a pas été détectée et en lui laissant la possibilité de la rechercher manuellement.
.
Bon, comme tu le dis toi même, c'est pas sûr à 100%
Et de plus, faudrait vérifier sur les différentes versions de OS X...
Donc, moralité, on effectue une recherche basique et si on trouve pas, on demande à l'utilisateur et voilou !