2011-02-24 34 views
6

在C++的iOS項目(或任何其他的Mac OS),是有使二者提供給Info.plist設置的一個值的一個簡單的方法,並以的形式的代碼一個預處理宏?的Info.plist值作爲C++的#define

理想情況下,我想有這樣的事情

C++代碼:

#define MY_VERSION_STRING "1.0" 

的Info.plist

CFBundleVersion: ${MY_VERSION_STRING} 

或者,有沒有從獲取值的方法.pList在C++中? (沒有手動解析.pList爲xml)

+0

Xcode支持Info.plist預處理。 – Richard 2011-06-15 16:41:12

回答

2

可能不是最好的解決方案,但是您可以在構建腳本中使用/ usr/libexec/PlistBuddy實用程序來生成包含提取值的定義的.h文件來自plist。

要輸出從plist中的值:

/usr/libexec/PlistBuddy -c 'Print :Path:To:Key' filename.plist 
+0

這將工作 - 我可以添加預生成步驟來生成.h文件。乾杯! – 2011-02-24 01:18:48

0

屬性列表也可以存儲陣列或一些二進制數據。你如何表達?它是非常特定領域的。所以,如果你確切地知道你是怎麼想的每個類型在C++中表示,你必須要麼解析plist文件並生成C++代碼,是預處理指令,或一些代碼定義數組,枚舉等有可用的PlistBuddyplutil工具,但他們可能不會有太大的幫助。最簡單的方法是使用perl,詳見Using Perl to Manage Plist Files

祝你好運!

0

如果有人願意做同樣的事情,這是我加入到目標編譯階段前的腳本:

VERSION=`/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' Info.plist` 

echo "#define VERSION_STRING L\"$VERSION\"" > Version.h 
2

我知道這已經回答了,但我會加上我的兩個分爲後裔。正如理查德如上所述,Xcode中有預處理的Info.plist文件一對夫婦的選擇 - 最相關的當前問題是「預處理Info.plist中」和「的Info.plist預處理前綴文件」。

如果您的版本信息在ver.h中定義,則可以包含ver.h作爲前綴文件,並直接從Info.plist引用版本宏。

1

這是不涉及PlistBuddy可言,完全使用構建設置所有容易可行的。

創建用戶定義的構建設置你的項目/目標無論是在Xcode的用戶界面,或者如果您熟悉xcconfig文件,你可以在一個完全文本=形式存在定義它。

  1. 您可以在Xcode或xcconfig文件中創建值爲1.0的設置MY_VERSION_STRING作爲構建設置。
  2. 在你的Info.plist你CFBundleVersion線將有$ {} MY_VERSION_STRING
  3. 你把一個值上Info.plist的預處理
  4. 最後,利用GCC_PREPROCESSOR_DEFINITIONS的建立變量。對於該構建設置,您可以指定MY_VERSION_STRING = $ {MY_VERSION_STRING}的值,這會導致您的定義的和共享的構建設置定義可用於c/C++/obj-c代碼,就像您將其創建爲#define
0

如果您使用#define ...,您應該使用.plist鍵MY_VERSION_STRING,而不是$ {MY_VERSION_STRING}。這也適用於「Info.plist預處理器前綴文件」。在這兩種情況下,不要忘記設置「預處理Info.plist文件」。