Il y a au moins trois endroits différents à partir desquels le système d'exploitation fournira l'icône.
Dans un cas, NSWorkspace peut être utilisé pour aider à identifier l'emplacement:
NSString* uti = [ws typeOfFile:@"/Users/egorr/Desktop/file.vwx" error:&error];
NSLog(@"UTI: %@", uti);
NSLog(@"UTI localized description: %@", [ws localizedDescriptionForType:uti]);
NSLog(@"UTI error description: %@",[error localizedDescription]);
NSURL* utiDeclarationURL = (NSURL*)UTTypeCopyDeclaringBundleURL((CFStringRef)uti);
NSLog(@"UTI declaration URL: %@", utiDeclarationURL);
NSDictionary* utiDeclaration = (NSDictionary*)UTTypeCopyDeclaration((CFStringRef)uti);
NSLog(@"UTI declaration: %@", utiDeclaration);
Ce ne sera pas tout à fait obtenir le chemin de l'icône, mais il obtiendra une application à partir de laquelle la déclaration est venue pour l'UTI.
Une icône peut également être fournie à partir d'un plug-in Quick Look et la sortie de qlmanage peut être utilisée pour déterminer si c'est le cas.
Un utilisateur peut, dans la fenêtre Obtenir des infos du Finder, définir l'application qu'il préfère pour tous les fichiers d'un "type" donné. On peut définir des types de fichiers texte à toujours ouvrir dans TextMate, par exemple. TextMate l'application fournit des icônes de fichiers personnalisés pour tous les types de fichiers dans lesquels elle peut enregistrer. Après avoir effectué cette modification dans les fenêtres d'informations du Finder, tous les fichiers de ce type auront une icône fournie par TextMate et enregistrée avec UTI. Pour déterminer si c'est le cas, il faudrait regarder la base de données des services de lancement - lsregister -dump
La raison pour laquelle j'ai besoin de cela est purement à des fins de débogage. Une icône est assignée à un fichier qui ne devrait pas être assigné et il serait utile de savoir d'où vient exactement l'icône. – ericg
Je peux obtenir une partie de la réponse avec le code: NSString * uti = [ws typeOfFile: @ "/ Utilisateurs/egorr/Bureau/fichier.vwx" erreur: & erreur]; \t NSLog (@ "UTI:% @", uti); Ce dont je ne sais toujours pas, c'est comment obtenir le chemin d'accès à l'icône du fichier. – ericg
Qu'est-ce que vous essayez réellement de faire? Avez-vous _A_ fichier avec des icônes en conflit, ou des charges de fichiers de différentes extensions? Les documents reçoivent leurs icônes attribuées par Finder.app en fonction des informations et des icônes collectées à partir des applications installées sur le système. Si votre objectif est de modifier tous les fichiers VectorWorks, vous devez écrire du code pour tout rassembler.Fichiers vwx, puis utilisez 'setIcon: forFile: options:' sur tous les fichiers, l'écriture de code pour modifier le contenu des autres applications est un peu louche. – theMikeSwan