Как вы получаете Идентификатор пакета из названия приложения в Какао? - PullRequest
5 голосов
/ 23 февраля 2012

Скажем, у вас есть имя приложения, Mail.app, как вы программно получаете com.apple.mail из имени приложения?

Ответы [ 4 ]

17 голосов
/ 23 февраля 2012

Следующий метод возвращает идентификатор пакета приложения для именованного приложения:

- (NSString *) bundleIdentifierForApplicationName:(NSString *)appName
{
    NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
    NSString * appPath = [workspace fullPathForApplication:appName];
    if (appPath) {
        NSBundle * appBundle = [NSBundle bundleWithPath:appPath];
        return [appBundle bundleIdentifier];
    }
    return nil; 
}

Для Mail вы можете вызвать метод следующим образом:

NSString * appID = [self bundleIdentifierForApplicationName:@"Mail"];

appID теперь содержитcom.apple.mail

1 голос
/ 11 января 2018

Расширение ответа Франческо Герминары в Swift 4, macOS 10.13.2:

extension Bundle {
    class func bundleIDFor(appNamed appName: String) -> String? {
        if let appPath = NSWorkspace.shared.fullPath(forApplication: appName) {
            if let itsBundle = Bundle(path: appPath) { // < in my build this condition fails if we're looking for the ID of the app we're running...
                if let itsID = itsBundle.bundleIdentifier {
                    return itsID
                }
            } else {
                //Attempt to get the current running app.
                //This is probably too simplistic a catch for every single possibility
                if let ownID =  Bundle.main.bundleIdentifier {
                    return ownID
                }
            }
        }
        return nil
    }
}

Поместив его в свой проект Swift, вы можете назвать его так:

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

или

let id = Bundle.bundleIDFor(appNamed: "Mail")
0 голосов
/ 26 июня 2014

Это возможная быстрая реализация

func bundleIdentifierForApplicationName(appName : String) -> String
{
    var workspace = NSWorkspace.sharedWorkspace()
    var appPath : String = workspace.fullPathForApplication(appName)
    if (appPath != "") {
        var appBundle : NSBundle = NSBundle(path:appPath)
     return appBundle.bundleIdentifier
    }
   return ""
}
0 голосов
/ 23 февраля 2012

Это значение для ключа CFBundleIdentifier в Contents / Info.plist

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...