怎樣方便的知道出app當(dāng)前的版本信息横殴,版本號,是beta/debug/release呢衫仑?之前最直接的方式是在app某一頁面,顯示這些信息粥鞋,需要的時(shí)候去查看。現(xiàn)在出了一個(gè)利器呻粹,在AppIcon上直接就可以看出這些信息苏研,一目了然。見圖摹蘑。
主要思路
使用ImageMagick來生成新的appIcon,并替換生成的app包里面的資源庄萎。這樣就達(dá)到了修改appIcon的目的塘安。主要用到shell腳本來實(shí)現(xiàn)。
在app生成目錄中兼犯,選中app,右鍵顯示包內(nèi)容切黔,AppIcon就在這里。只要替換了它們就達(dá)到目的了凌埂。
動(dòng)手實(shí)現(xiàn)
1诗芜、首先安裝ImageMagick。使用homebrew來安裝伏恐。在命令行中輸入:brew install ImageMagick。
如果還未安裝homebrew翠桦,要先用如下命令安裝homebrew
ruby -e "$(curl -fsSL?https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后再執(zhí)行brew install ImageMagick。
此外還需要安裝Ghostscript丛晌,因?yàn)镮mageMagick是依賴于它的,提供了字體支持茂洒。
brew install ghostscript
Ghostscript?is a software suite designed for rendering PDF and PS files. You need it because it provides the font support for ImageMagick.
2、牛刀小試
下面來介紹下ImageMagick的幾個(gè)命令督勺〗锓。可以下載sampleIcon來試試。
convert:修改圖片荧恍。
composite:合成圖片。
例子:
convert AppIcon60x60@2x.png -fill white -font Helvetica-Narrow -pointsize 18 -gravity south -annotate 0 "hello world" test.png
AppIcon60x60@2x.png 輸入的圖片
-fill white 設(shè)置文本顏色摹菠,red骗爆,black,orange等等摘投。
-font Helvetica-Narrow 設(shè)置字體(支持的字體可以通過convert -list font來查看)
-pointsize 18 設(shè)置字體大小
-gravity south設(shè)置文字對齊方向,south表示底部對齊犀呼,west表示靠左對齊
-annotate 0 旋轉(zhuǎn)的角度,若設(shè)置成90°外臂,文字將順時(shí)針旋轉(zhuǎn)90°。
"hello world" ?表示要繪制的文字专钉。
test.png 表示生成的新圖片,若已存在同名的,會(huì)覆蓋原文件娃兽。
convert betaRibbon.png -resize 120x120 smallBetaRibbon.png
resize進(jìn)行裁剪。
composite smallBetaRibbon.png test.png test2.png
合成圖片
3第练、在Xcode中添加shell腳本
先來個(gè)簡單的:echo "hello world"
編譯,查看腳本運(yùn)行結(jié)果呕寝。可以看到輸出了hello world下梢。
4塞蹭、新建工程,將sampleIcon導(dǎo)入到Imageassets的AppIcon中番电。同時(shí)將sampleIcon中的beta.png,debug.png文件拖入到工程根目錄这刷。如圖:
在shell腳本中添加
echo "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
echo "${SRCROOT}"
${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}表示生成的app所在目錄崭歧。
${SRCROOT}表示工程根目錄
打開Finder到app目錄,右鍵包內(nèi)容撞牢,可以看到appIcon。
修改腳本所宰,替換成如下(替換6p的AppIcon需要對@3x.png進(jìn)行操作)
#添加/usr/local/bin到環(huán)境變量
PATH=${PATH}:/usr/local/bin
#appIcon所在路徑TARGET_PATH="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppIcon60x60@2x.png"
#輸入圖片所在路徑畜挥,find命令找出AppIcon60x60@2x.png的路徑
BASE_IMAGE_PATH=$(find ${SRCROOT} -name "AppIcon60x60@2x.png")
#裁剪圖片到120*120
convert betaRibbon.png -resize 120x120 resizedBetaRibbon.png
#生成圖片到appIcon實(shí)際所在路徑
convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" -| composite resizedBetaRibbon.png - ${TARGET_PATH}
運(yùn)行后,返回桌面看appIcon躯泰,已經(jīng)變了。
5麦向、在appIcon上顯示版本號
(1)如何在shell中獲取版本號呢客叉?通過PlistBuddy话告,它是對plist文件進(jìn)行讀取的工具卵慰,所在路徑是/usr/libexec。
CFBundleVersion:build號
CFBundleShortVersionString:版本號裳朋,如2.1.1
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
echo $buildNumber
versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
echo $versionNumber
可以看到shell中打印的是一致的。
將"hello world"替換成"$buildNumber"送挑,app上的文件變成了1泛范。
convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "$buildNumber" -| composite resizedBetaRibbon.png - ${TARGET_PATH}
添加版本號罢荡,同樣的替換成$versionNumber就可以了。
(2)在腳本中修改版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString "2.3"" "${PROJECT_DIR}/${INFOPLIST_FILE}"
6区赵、添加configuration,默認(rèn)有debug笼才,release。現(xiàn)在我們添加一個(gè)beta昂羡。
在腳本中添加config的判斷摔踱,beta版本使用beta圖片,debug使用debug圖片派敷,release不做操作。Edit scheme中的config篮愉,重新運(yùn)行,發(fā)現(xiàn)AppIcon發(fā)生了改變试躏。
if [ "${CONFIGURATION}" == "Debug" ]; then
convert debugRibbon.png -resize 120x120 resizedDebugRibbon.png
convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" -| composite resizedDebugRibbon.png - ${TARGET_PATH}
fi
if [ "${CONFIGURATION}" == "Beta" ]; then
convert betaRibbon.png -resize 120x120 resizedBetaRibbon.png
convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" -| composite resizedBetaRibbon.png - ${TARGET_PATH}
fi
7、改進(jìn)下
在前面我們都是寫死的120*120冗酿,當(dāng)使用@3x時(shí)络断,圖片尺寸應(yīng)該是180*180项玛。這里用identify來動(dòng)態(tài)得出圖片本身的大小。
WIDTH=$(identify -format %w ${BASE_IMAGE_PATH})
identify是ImageMagick提供的襟沮。獲取圖片信息
然后convert -resize $WIDTHx$WIDTH昌腰。
同樣,也可以動(dòng)態(tài)設(shè)置pointsize遭商,根據(jù)不同分辨率,以下以WIDTH為基準(zhǔn)巫玻。
FONT_SIZE=$(echo "$WIDTH* .15" | bc -l)
然后將以上代碼封成函數(shù),只需傳入圖片名稱仍秤,即可可很。
function generateIcon(){
#$0表示shell本身文件名,$1表示第一個(gè)參數(shù)
BASE_IMAGE_NAME = $1
BASE_IMAGE_PATH=$(find ${SRCROOT} -name ${BASE_IMAGE_NAME})
...
}
調(diào)用:
generateIcon "AppIcon60x60@2x.png"
generateIcon "AppIcon60x60@3x.png"
可同時(shí)修改@2x我抠,@3x的AppIcon。
demo地址:demo