【IconOverlaying】在AppIcon上顯示自定義信息

前言

在項目的QA階段,如果有一種途徑可以讓測試的小姐姐們知道當前App是什么版本,以及包是inhouse還是adhoc的,就可以節(jié)省不少確認當前App包信息的時間,定位Bug也會更方便許多。
例如這樣:


在AppIcon上顯示版本信息

一目了然有沒有!每次要驗證問題前都可以方便的知道要不要更新新包(以svn版本號為判斷基準)、清楚需要在哪種打包方式打的包上驗證,甚至可以盡情打開自己的腦洞,DIY自己的AppIcon!

而這一切都得益于krzysztofzablocki這位大神寫一個腳本IconOverlaying,github地址在這IconOverlaying。實際上這位大神已經(jīng)將IconOverlaying集成到KZBootstrap這個插件中了,同樣奉上github地址KZBootstrap

在項目中用CocoaPods添加KZBootstrap后,我們的App就已經(jīng)具有了一個經(jīng)過默認修改的AppIcon。但如果不想只因為用到這個小功能就多引用一個Pod,或者需要定制屬于自己的AppIcon,那本文接下來的內(nèi)容也許會對你有幫助。

1、說明

在真正配置IconOverlaying前,可以簡單了解一下它是怎么運作的。簡單來說就是在App編譯打包成.app之后,到利用證書簽名為.ipa之前的這兩個步驟中,利用腳本將我們需要的信息合成到.app包中的AppIcon.png上。

閱讀大神提供的Shell腳本,我們可以發(fā)現(xiàn)以下幾點:

  1. .app包的路徑、icon文件名稱、項目信息等都可以通過Xcode的環(huán)境變量和info.plist獲取。
  2. git(svn)的版本信息、當前分支,可以通過git(svn)的相關(guān)腳本命令獲取。
  3. 圖片的合成依賴ImageMagick這個工具,而ImageMagick則依賴于GhostScript,所以這兩個工具都需要先安裝好。

知道這些之后也算心里有數(shù)了,接下來開始集成這個功能到我們的項目中。

2、集成

配置IconOverlaying十分簡單,步驟大概為:

  1. 確保ImageMagickGhostScript已經(jīng)安裝,安裝方法是在命令行中用brew安裝。
Tidus$ brew install imagemagick
Tidus$ brew install ghostscript
  1. 在我們的項目中隨便創(chuàng)建一個.sh文件,然后復(fù)制大神提供的Shell腳本中的內(nèi)容粘貼到我們的.sh文件。
  2. 在Xcode中選中對應(yīng)的Target -> Build Phases -> 左上角New Run Script Phase,在Shell文本框中輸入
"${SRCROOT}/你的項目名/剛才新建的sh文件.sh"
##在這里我的是
"${SRCROOT}/CommonDemo/processIcon.sh"

配置到此結(jié)束,然后運行我們的項目后返回模擬器桌面,如無意外就應(yīng)該可以看到我們的AppIcon被添加上了一些版本信息了。

3、可能會出現(xiàn)的問題

盡管配置IconOverlaying本身十分簡單,但在這過程中我也遇到了一點問題。

1)編譯時報錯Permission denied

比如:


Permission denied

這是由于腳本沒有運行權(quán)限導(dǎo)致的,給腳本加上運行權(quán)限即可

Tidus$ chmod +x /Users/tidus/Applications/SourceTree/CommonDemo/CommonDemo/processIcon.sh 

2)腳本提示找不到入口

比如:


這是由于腳本是根據(jù)打包后.app中的info.plist中的CFBundleIconFiles字段來確定AppIcon的名字的,參考腳本中的這段代碼,輸出的就是指定plist中指定字段的值:

icon=`/usr/libexec/PlistBuddy -c "Print CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles:$i" "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}"`

輸出

所以需要在info.plist中加上icon files (iOS 5)的節(jié)點,即使沒有配置值也可以。
加上icon files (iOS 5)

3)生成的AppIcon.png有樣式問題

個別AppIcon.png在處理后會出現(xiàn)異常情況,比如:


具體原因未知,但問題出在用ImageMagick生成mask.png時,后來查閱ImageMagick的相關(guān)文檔后用新的代碼替換了原來的生成mask的代碼,問題解決。

#腳本中原來的代碼
convert /tmp/blurred.png -gamma 0 -fill white -draw "rectangle 0,$band_position,$width,$height" /tmp/mask.png
#用另一種方式創(chuàng)建mask
convert -size ${width}x${height} -set colorspace RGB xc:none -fill black -draw "rectangle 0,$band_position,$width,$height" -colorspace sRGB /tmp/mask.png

順帶貼上ImageMagick的相關(guān)文檔:
http://www.imagemagick.org/Usage/
https://www.imagemagick.org/script/index.php

4)其他問題

另外腳本中還存在幾處語法錯誤,例如在判斷是否Release環(huán)境時:

#編譯時這里報了語法錯誤
if [ $CONFIGURATION = "Release" ]; then
#修復(fù)并加入其他判斷
if [[ $CONFIGURATION == "Release" ]] && [[ $PRODUCT_BUNDLE_IDENTIFIER != *.inhouse ]] && [[ $PRODUCT_BUNDLE_IDENTIFIER != *.adhoc ]]
    then

將其修正后,也加入了根據(jù)BUNDLE_IDENTIFIER判斷打包方式的邏輯。

4、參考資料:

phzean寫的一篇文章:ios 腳本實現(xiàn)程序Icon顯示APP版本信息

文章就到此結(jié)束了,DEMO:https://github.com/Tidusww/CommonDemo.git,有興趣的朋友可以去看看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在你完成應(yīng)用程序的beta版本后,最后會有些人去幫你測試,使你去完善應(yīng)用程序……或者會有投資青睞。但是如果測試人員...
    zmp1123閱讀 6,896評論 15 46
  • 怎樣方便的知道出app當前的版本信息,版本號,是beta/debug/release呢?之前最直接的方式是在app...
    微微笑的蝸牛閱讀 2,567評論 2 52
  • Github 傳送門 簡介 LLIconVersioning是一個腳本,可以自動創(chuàng)建帶有調(diào)試信息的appIcon。...
    HDB_Li閱讀 1,020評論 0 0
  • 絕大部分 App 都會有測試版、AppStore 正式版,通常情況下,我們不能很快速的確定使用者安裝 App 的環(huán)...
    LuisX閱讀 5,105評論 7 28
  • 推薦一個自動化打包的工具套件,提供一個運行良好的持續(xù)部署流程,只需要運行一個簡單的命令就可以觸發(fā)這個流程。下面是G...
    終于閱讀 661評論 0 1

友情鏈接更多精彩內(nèi)容