Dites que vous avez le nom d'une application, mail.app code>, comment obtenez-vous de manière programmable
com.apple.mail code> à partir du nom de l'application? p>
4 Réponses :
C'est la valeur de la clé CFBundentifier dans le contenu / info.plist P>
Ajout à cela, le dossier "Contenu" de l'application peut généralement être trouvé dans / Applications /
La méthode suivante retournera l'identifiant de la paquet d'une application pour une application nommée: pour le courrier, vous pouvez appeler la méthode comme: p> appid code> contient maintenant
com.apple.mail code> p>
SWIFT 5.1 H2>
import AppKit
func bundleIdentifier(forAppName appName: String) -> String? {
let workspace = NSWorkspace.shared
let appPath = workspace.fullPath(forApplication: appName)
if let appPath = appPath {
let appBundle = Bundle(path: appPath)
return appBundle?.bundleIdentifier
}
return nil
}
// For Mail you can call the method like so:
let appID = bundleIdentifier(forAppName: "Mail")
Merci! C'est exactement ce que je cherchais. Cependant, dans mes tests mail.app code> fonctionne aussi bien, ce qui n'est pas surprenant étant donné que Apple dit
.app code> est facultatif dans bon nombre de ses documents. Cependant,
mail.app code> et
mail.app code> semble aussi fonctionner, alors je suppose que peut-être que le nom de l'application n'est pas vraiment sensible à la casse.
Ok je vais supprimer la note qui dit le contraire
Notez que FullPathForApplication: AppName code> est déprécié par MacOS 10.15. Je ne pouvais trouver aucune alternative, je suppose que Apple veut que nous utilisions seulement des identifiants de paquet ...
Merci Sindre Sorhus, j'ai ajouté un avis de privation.
Ceci est une implémentation rapide éventuelle
Développement de la réponse de Francesco Germinara dans Swift 4, MacOS 10.13.2:
let id = Bundle.bundleIDFor(appNamed: "Mail")