Как прочитать информацию из файла /S/L/E kext info.plist?

Я просто новичок в программировании на Mac OS X, поэтому, пожалуйста, будьте терпеливы со мной. Я пытаюсь создать приложение для какао, целью которого является чтение некоторой информации из файла kext файла Info.plist, полный путь которого /System/Library/Extensions/NVDAResman.kext/Contents/Info.plist

час

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (weak) IBOutlet NSTextField *nvidiaNameTextField;

@end

м.

#import "AppDelegate.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    [self setnvidiaNameTextField];
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}

// This will allow the application to quit instead of just closing the window
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{
    return YES;
}

// Find NVIDIA Kernel Extension Name
-(void)setnvidiaNameTextField
{
    NSString *nvidiaNameTextField = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
    self.nvidiaNameTextField.stringValue = [NSString stringWithFormat:@"%@", nvidiaNameTextField];
}

@end

это работает, но с моим проектом Info.plist файл, и это не то, что я хочу.

Итак, мой вопрос, как я могу прочитать Info.plist с NVDAResman.kext?

заранее спасибо

PS: я использую Xcode 7.1 beta (7B60)

2 ответа

Решение
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/Extensions/NVDAResman.kext/Contents/Info.plist"];

Обратите внимание, что любой поиск, использующий "[NSBundle mainBundle]", будет выполняться в пакете приложения (в структуре папок.app). Также, если вы планируете изолированную программную среду своего приложения, приведенный выше код не будет работать, и нет никакого решения, чтобы заставить его работать с Sandboxing (безопасность платформы OS X).

Вот как я это сделал (спасибо xhruso00)

м.

// Find NVIDIA Kernel Extension Name
-(void)setnvidiaVersionTextField
{
    NSDictionary *infoDict = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/Extensions/NVDAResman.kext/Contents/Info.plist"];
    NSString* nvidiaVersionTextField = [infoDict objectForKey:@"CFBundleName"];
    self.nvidiaVersionTextField.stringValue = [NSString stringWithFormat:@"%@", nvidiaVersionTextField];
}
Другие вопросы по тегам