1. 程式人生 > >Qt讀取蘋果系統OSX上的plist資原始檔

Qt讀取蘋果系統OSX上的plist資原始檔

先講一下整體流程:

1、先在X-Code上建立.h和.mm檔案,並寫出主要讀取資原始檔函式和介面

2、把.h和.mm檔案新增到Qt中,並寫出C++間接呼叫介面

3、把介面和呼叫讀取plist資原始檔介面聯絡起來

對於MAC上的應用軟體的資訊讀取,一般是對於該應用程式的info.plist的解析。

解析方法:

a、採用QT的Dom介面進行解析 ,就是把蘋果的info.plist檔案當成xml檔案來解析,具體解析和解析XML方式一致,很簡單,這裡就不囉嗦了。

b、採用Object-C讀取,然後通過C++來呼叫。第二種也比較容易,但是存在OC知識的陌生性,下面我們來一起進入第二種方法的解析吧。(說到要用Object-C,不得不提.mm檔案和.m檔案的差異性,這裡我們用.mm檔案。.mm檔案除了可以包含Objective-C和C程式碼以外還可以包含C++程式碼,而.m檔案只能包含Objective-C和C程式碼。這裡我們要用到.mm檔案,.mm檔案可以直接用蘋果電腦的X-Code開發平臺生成,標頭檔案還是.h。)

完成介面的話如圖:


現將如圖.mm檔案程式碼公佈如下:

#include "readDeviceInfo.h"
#include <QDebug>
#import <Foundation/Foundation.h>
#import <iostream>
#ifdef Q_OS_OSX
    #import <Cocoa/Cocoa.h>
#endif

#import <GLKit/GLKit.h>
ReadDeviceInfo::ReadDeviceInfo()
{
}
QString ReadDeviceInfo::getAppNameStr()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleExecutableKey]; //獲取專案名稱
    return QString::fromNSString(executableFile);
}

QString ReadDeviceInfo::getAppPublicVersion()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleInfoDictionaryVersionKey]; //獲取外部版本
    return QString::fromNSString(executableFile);
}

QString ReadDeviceInfo::getAppPrivateVersion()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey]; //獲取內部版本
    //NSString *executableFile = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"CFBundleVersion"];
    return QString::fromNSString(executableFile);
}

以上是蘋果提供的最常用的三個介面,還有如下介面:

const CFStringRef kCFBundleInfoDictionaryVersionKey;
const CFStringRef kCFBundleExecutableKey;
const CFStringRef kCFBundleIdentifierKey;
const CFStringRef kCFBundleVersionKey;
const CFStringRef kCFBundleDevelopmentRegionKey;
const CFStringRef kCFBundleNameKey;
const CFStringRef kCFBundleLocalizationsKey;