2011-01-09 4 views
1

Ich möchte die Bundle-ID einer Anwendung erhalten, die ihren Pfad angibt.Ziel C: Wie bekomme ich die Bundle-ID einer anderen Anwendung?

zB:

NSString* vlcFilePath = @"/Applications/VLC.app" 

Ich weiß, wie die Paket-ID zu bekommen NSWorkspace zu verwenden, wenn es die aktive Anwendung ist, aber in diesem Fall ist es nicht unbedingt die aktive Anwendung.

Antwort

12

NSBundle eine bundleIdentifier Methode hat. Dies wird nicht ausgeführt oder die Anwendung laden, wenn es nicht bereits/Laufen geladen wird:

NSString *vlcFilePath = @"/Applications/VLC.app"; 

NSBundle *bundle = [NSBundle bundleWithPath:vlcFilePath]; 

NSLog (@"%@", [bundle bundleIdentifier]); 
+0

Das ist kurz und gut, was ist, wenn ich es direkt von .ipa anstelle von .app-Datei möchte, gibt es eine Möglichkeit, es zu bekommen, ich möchte nicht öffnen und dann öffnen Sie die Payload und dann die .app-Datei. –

-2

Öffnen Sie die plist-Datei des Anwendungspaket und von dort lesen:

NSDictionary *plistInfo = [NSDictionary dictionaryWithContentsOfFile:[vlcPath stringByAppendingPathComponent:@"Contents/Info.plist"]]; 

NSLog(@"VLC bundle identifier = %@", [plistInfo objectForKey:@"CFBundleIdentifier"]); 
+0

schlechte Idee. Die Info.plist kann an anderen Orten gespeichert werden. Die Verwendung von Bundle-APIs ist wesentlich robuster. – Julien

+0

Insbesondere wird dies nicht für Anwendungen funktionieren, die ihre Info.plist in einem speziellen Abschnitt der Binärdatei speichern, oder Anwendungen, die das Flat-Bundle-Layout verwenden. Sie sollten NSBundle generell als undurchsichtiges Verzeichnisformat behandeln und nur über seine API darauf zugreifen. –

Verwandte Themen