2011-10-30 55 views
15

最後......經過幾年的觀看和一個月的參與,我有機會問你們一個我自己的問題。如何讓XCode添加生成日期和時間Info.plist文件

我的老闆不相信我(或任何進程)增加內部版本號,他也希望有一個生成日期&時間烘焙到應用程序中。我想把它放到通常的Info.plist文件中。

我發現此相關的問題:

Build information in iOS Application (date/time app was built)

,並根據問題的答案在那裏,我走進了計劃編輯器,並添加下面的構建階段的「後操作」部分中的腳本:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

在Xcode中,我的方案編輯器窗口看起來是這樣的:

不幸的是,BuildDate從未寫入Info.plist。

將「$ {builddate}」更改爲「$ builddate」也不起作用。我在腳本中添加了這一行:

echo "build date is $builddate" > /tmp/result.txt 

並且日期在寫出的文件中顯得非常好。從上面的腳本中寫入字符串到Info.plist文件中工作得很好,很煩人。

那麼,總結一下,如何獲取要添加到Info.plist文件的日期?

+0

我沒有使用有任何問題,你腳本作爲後置動作,除非它最終將簽名無效。似乎在構建階段而不是在執行後操作方面工作得很好,無論您是否共享工作區,這也有助於工作。它也比預執行更好,因爲預執行會因修改實際的info.plist而導致構建時間覆蓋而變得更加流暢。 – smparkes

回答

4

邁克爾答案中的代碼不正確或不再更新。下面的版本修復了set語法中的錯誤,並且還支持在其中包含空格的構建路徑。

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

注:此更改提交的修改,但得到了拒絕,我還沒有足夠的聲譽張貼在他的回答評論...

2

我正在使用您的確切代碼,但是在執行前操作而不是執行後操作中,並且構建的產品中的info.plist正確報告了構建日期。換句話說,您必須在之前將您的info.plist 自定義爲將其複製到構建的產品中,這對我來說聽起來很合理。

順便說一句,感謝您的建議,它非常聰明和有用。

+0

如果您在預先操作中執行此操作,然後實際更新info.plist,則更新會在更新中閃過。可能沒什麼關係,因爲info.plist沒有得到更新。 – smparkes

5

AHHHH,我花了30分鐘(上2個小時,我已經浪費了頂部),看着答案爲這個問題張貼我自己之前:

Insert Subversion revision number in Xcode

這動作後腳本的伎倆,併爲我工作:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

正如你所看到的,它做一個黑客位的有(加入它,如果它不存在;設置正確後)。

如果任何人都可以使用上面的「defaults write」方法(我認爲可能比「PlistBuddy」更好的支持)提出解決方案,我會很高興找到(當然我會接受和使用那也是優越的答案)。