我努力做到以下幾點:的iOS:在構建階段改變的info.plist
- 在構建階段,打開一個純文本文件和文字
- 更改屬性的值info.plist到步驟1中獲得的值。
我可以爲此編寫一個shell腳本嗎?
這將是巨大的,如果有人能指導我實現這一目標。
我努力做到以下幾點:的iOS:在構建階段改變的info.plist
我可以爲此編寫一個shell腳本嗎?
這將是巨大的,如果有人能指導我實現這一目標。
是的,你可以。我會做的三個步驟:
@PeyloW提供了做這件事。另一種方法是添加一個運行腳本構建步驟。在那一步你可以重寫你的Info.plist。我一直這樣做來設置svnversion。
我建議把文件中的腳本,然後把. myscript.sh
在運行腳本階段。這比將整個腳本直接放在Xcode中更容易理解和維護。
+1將腳本放在單獨的文件中。 我也曾經重寫過plist文件。但是這樣做往往會對源代碼管理中的plist文件進行不必要的修改。所以我改變了env變量解決方案。 – PeyloW
env變量解決方案非常好,如果我構建另一個版本控制腳本,我可能會轉而採用這種方法以簡化操作。該腳本更加靈活。 –
我有把一個內部版本號爲場中我info.plist中的腳本文件。我在項目中的info.plist中放置了一些佔位符文本,然後腳本將其替換。它只會在發佈版本上增加內部版本號。在開發版本上,它只是說它們是一個開發版本。
if [ "$BUILD_STYLE" = "Release" ]
then
if [ ! -f build-number ]; then
echo 0 > build-number
else
expr `cat build-number` + 1 > build-number.new
mv build-number.new build-number
fi
perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`cat build-number`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
else
perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`echo Development`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
fi
也許最簡單的方法是使用PlistBuddy。我有一個運行腳本階段,看起來像這樣:
BUILD_NUMBER=`git rev-list HEAD --count`
INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
if [ -f "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" ] ; then
oldversion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$INFO_PLIST"`
fi
if [ "$BUILD_NUMBER" != "$oldversion" ] ; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFO_PLIST"
fi
(需要注意的是啓動和Xcode 6,你必須運行此的複製包資源階段之後,因爲Info.plist
不會被複制到目標位置直到那時和PlistBuddy會失敗)
編輯01/17:已更新,以避免不必要的複製或目標籤名。除非有真正改變,否則你不想觸碰Info.plist,否則Xcode會將其視爲已修改的對象(並因此將其視爲目標)。檢查以前的值CFBundleVersion
可以顯着加快構建 - 它節省了我幾秒鐘的noop構建。
我花了很長時間才弄清楚爲什麼我的腳本爲常規構建工作,但在構建存檔時失敗。它必須在複製捆綁軟件資源之後運行。謝謝! –
謝謝!但是在這個階段我怎麼能打開一個文件並從中讀取文本呢? – Mithin
@Mithin - 完全取決於您編寫shell腳本的語言。 – PeyloW
如果鍵是布爾值,該怎麼辦?它不會接受環境變量名稱佔位符。 –