0

我只是 Mac OS X 编程的新手,所以请耐心等待。我正在尝试制作一个可可应用程序,其目标是从 Info.plist kext 的文件中读取一些信息,完整路径是/System/Library/Extensions/NVDAResman.kext/Contents/Info.plist

H。

#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 文件一起使用,这不是我想要的。

所以我的问题是如何从 NVDAResman.kext 读取 Info.plist?

先感谢您

PS:我使用的是 Xcode 7.1 beta (7B60)

4

2 回答 2

0
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/Extensions/NVDAResman.kext/Contents/Info.plist"];

请注意,使用“[NSBundle mainBundle]”进行的任何搜索都将在您的应用程序包中(在 .app 文件夹结构下)。此外,如果您计划对您的应用程序进行沙箱化,上述代码将无法工作,并且没有解决方案可以使其与沙箱化(OS X 平台的安全性)一起使用。

于 2015-09-29T21:24:53.930 回答
0

这就是我的做法(感谢 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];
}
于 2015-09-29T22:06:58.147 回答