在編譯時(shí)修改AppIcon

怎樣方便的知道出app當(dāng)前的版本信息横殴,版本號,是beta/debug/release呢衫仑?之前最直接的方式是在app某一頁面,顯示這些信息粥鞋,需要的時(shí)候去查看。現(xiàn)在出了一個(gè)利器呻粹,在AppIcon上直接就可以看出這些信息苏研,一目了然。見圖摹蘑。

appIcon


主要思路

使用ImageMagick來生成新的appIcon,并替換生成的app包里面的資源庄萎。這樣就達(dá)到了修改appIcon的目的塘安。主要用到shell腳本來實(shí)現(xiàn)。

在app生成目錄中兼犯,選中app,右鍵顯示包內(nèi)容切黔,AppIcon就在這里。只要替換了它們就達(dá)到目的了凌埂。

包內(nèi)容


動(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腳本

在build phase中添加script

先來個(gè)簡單的:echo "hello world"

hello world

編譯,查看腳本運(yùn)行結(jié)果呕寝。可以看到輸出了hello world下梢。

運(yùn)行結(jié)果


4塞蹭、新建工程,將sampleIcon導(dǎo)入到Imageassets的AppIcon中番电。同時(shí)將sampleIcon中的beta.png,debug.png文件拖入到工程根目錄这刷。如圖:

導(dǎo)入debug和beta圖片


在shell腳本中添加

echo "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"

echo "${SRCROOT}"

shell執(zhí)行結(jié)果

${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}表示生成的app所在目錄崭歧。

${SRCROOT}表示工程根目錄

打開Finder到app目錄,右鍵包內(nèi)容撞牢,可以看到appIcon。

app所在目錄
包內(nèi)容


修改腳本所宰,替換成如下(替換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)變了。

新的appIcon


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中打印的是一致的。

build號


將"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}

buildNumber
versionNumber

添加版本號罢荡,同樣的替換成$versionNumber就可以了。

(2)在腳本中修改版本號

/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString "2.3"" "${PROJECT_DIR}/${INFOPLIST_FILE}"


6区赵、添加configuration,默認(rèn)有debug笼才,release。現(xiàn)在我們添加一個(gè)beta昂羡。

添加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

原文鏈接:How To Change Your App Icon at Build Time

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓣窄,一起剝皮案震驚了整個(gè)濱河市尘惧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喷橙,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬荣,死亡現(xiàn)場離奇詭異疙剑,居然都是意外死亡践叠,警方通過查閱死者的電腦和手機(jī)嚼蚀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轿曙,“玉大人,你說我怎么就攤上這事守谓。” “怎么了斋荞?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵虐秦,是天一觀的道長。 經(jīng)常有香客問我羡疗,道長,這世上最難降的妖魔是什么叨恨? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任痒钝,我火速辦了婚禮,結(jié)果婚禮上送矩,老公的妹妹穿的比我還像新娘。我一直安慰自己栋荸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布爱沟。 她就那樣靜靜地躺著,像睡著了一般呼伸。 火紅的嫁衣襯著肌膚如雪钝尸。 梳的紋絲不亂的頭發(fā)上搂根,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天铃辖,我揣著相機(jī)與錄音,去河邊找鬼澳叉。 笑死沐悦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的藏否。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼副签,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冠场?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碴裙,失蹤者是張志新(化名)和其女友劉穎舔株,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载慈,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年办铡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琳要。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晒杈,死狀恐怖孔厉,靈堂內(nèi)的尸體忽然破棺而出帖努,到底是詐尸還是另有隱情,我是刑警寧澤拼余,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布亩歹,位于F島的核電站,受9級特大地震影響小作,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜达罗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一静秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抚笔,春花似錦、人聲如沸殊橙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸽疾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間制肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工综液, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒飒,地道東北人谬莹。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓附帽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕉扮。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容