7
votes

Comment obtenez-vous l'identifiant du paquet du nom d'une application au cacao?

Dites que vous avez le nom d'une application, mail.app , comment obtenez-vous de manière programmable com.apple.mail à partir du nom de l'application?


0 commentaires

4 Réponses :


0
votes

C'est la valeur de la clé CFBundentifier dans le contenu / info.plist


1 commentaires

Ajout à cela, le dossier "Contenu" de l'application peut généralement être trouvé dans / Applications / / .app / contenu /



17
votes

La méthode suivante retournera l'identifiant de la paquet d'une application pour une application nommée: xxx pré>

pour le courrier, vous pouvez appeler la méthode comme: p> xxx pré>

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")


4 commentaires

Merci! C'est exactement ce que je cherchais. Cependant, dans mes tests mail.app fonctionne aussi bien, ce qui n'est pas surprenant étant donné que Apple dit .app est facultatif dans bon nombre de ses documents. Cependant, mail.app et mail.app 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 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.



-1
votes

Ceci est une implémentation rapide éventuelle xxx


0 commentaires

1
votes

Développement de la réponse de Francesco Germinara dans Swift 4, MacOS 10.13.2:

let id = Bundle.bundleIDFor(appNamed: "Mail")


0 commentaires