iOS打包腳本動態(tài)顯示Version
需求
1是越、根據(jù)info.plist配置的版本號,顯示在程序內(nèi)部顯示版本號
2安接、需要在啟動頁下方動態(tài)顯示版本號
3叛氨、區(qū)分發(fā)布包和內(nèi)測包
1达址、根據(jù)info.plist配置的版本號躲因,顯示在程序內(nèi)部顯示版本號
這個需求很簡單早敬,只需要獲取到info.plist里面的版本號,我們可以放到工具類中作為一個靜態(tài)方法
+(NSString*)appVersion
{
return [[NSBundle mainBundle]
objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
}
拿到appVersion,想怎么處理就容易了大脉。
需要在啟動頁下方動態(tài)顯示版本號
要想解決這個問題搞监,我們先調(diào)研了Launch Screen File分為兩種,一種直接設(shè)置成圖片箱靴,另一種是加載LaunchScreen.storyboard文件。
- 使用圖片:我們直接放棄荷愕,除非用腳本動態(tài)合成圖片衡怀,這個太過于復(fù)雜
- 使用LaunchScreen.storyboard文件:我們知道xib文件其實(shí)是一個xml文件,我們只需要通過某種方式安疗,在程序編譯之前用腳本把xml里面的版本信息替換掉
我們分兩步走抛杨,在run script phase里面插入腳本即:
1、用腳本獲取info.plist里面的版本字段
#1荐类、用腳本獲取info.plist里面的版本字段
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "./目錄/info.plist");
echo $versionNumber
# PlistBuddy功能很強(qiáng)大怖现,有興趣的可以研究
2、用腳本替換掉xml里版本相關(guān)信息
#.sh
#我在LaunchScreen.storyboard里面拖了一個UILabel進(jìn)去玉罐,取名為AppVersion
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" $versionNumber\"/" ./目錄/LaunchScreen.storyboard;
在用XCode直接跑程序的時候屈嗤,親測沒問題,但是用了腳本發(fā)布app吊输,就會出現(xiàn)問題了饶号。
run script phase里面的腳本會在發(fā)布腳本編譯完再執(zhí)行,這樣就起不到作用季蚂。
解決辦法茫船,我們把腳本統(tǒng)一的放到外部的發(fā)布腳本里面,確保在腳本編譯程序之前替換成功扭屁。
區(qū)分發(fā)布包和內(nèi)測包
- 在內(nèi)測包算谈,Alpha版本的時候版本號顯示為:Alpha_V20180702
- 在發(fā)布包,發(fā)布版本的時候版本號顯示正常的:V1.0.1
同樣的我們來分析一下任務(wù):
1料滥、Alpha_V20180702里面包含了固定字符串Alpha_V和一個時間串
#獲取時間
versionNumber=$(date +%Y%m%d);
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" Alpha_V$versionNumber\"/" ./目錄/LaunchScreen.storyboard;
*2然眼、如果我們需要在程序內(nèi)部使用,又不想重新寫代碼獲取時間葵腹,這里有一個方法
- 先在目標(biāo)文件中申明一個變量
const NSString *version = @"V1.1.3";
#.sh
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目錄/AboutUsView.m;
#sed 查找以const NSString *version = @開頭的并替換為const NSString *version = @"xxx";
完整代碼
echo "打包模式 1-Debug/2-Release"
read debugMode
echo "打包模式 1-Alpha版本/2-發(fā)布版"
read archiveFlag
if [ "$archiveFlag" = "1" ];then
versionNumber=$(date +%Y%m%d);
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" Alpha_V$versionNumber\"/" ./目錄/LaunchScreen.storyboard;
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目錄/AboutUsView.m;
else
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "./目錄/info.plist");
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\"$versionNumber\"/" ./目錄/LaunchScreen.storyboard;
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目錄/AboutUsView.m;