Как прочитать информацию из файла /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];
}