需求背景
为了区分线上版本、测试版本以及调试版本,我们在开发过程中一般会修改bunlde Id以便在一个设备上安装不同版本的App。然而问题来了,如何快速区分出桌面上的App是什么版本呢?最直观的就是改变App图标,达到显而易见的目的。
在看了这篇译文后,利用脚本可以非常便利的实现这个需求(这是原文)。虽然译文翻译有些问题,但还是确实让大家能伸手一把(原文作者真心是手把手教学)。
实际工作
实际上,原文中对脚本解释的非常清楚,我这里简单记录下,顺便提一下注意点。
实现原理:在Xcode下build时,运行一个shell脚本,使用ImageMagick这个图像处理软件套件进行图标转换和组合,替换掉原本设置的AppIcon。
实现步骤:
- 使用brew安装ImageMagick brew install ImageMagick
- 安装Ghostscript brew install ghostscript 它提供了支持ImageMagick的字体
- 将需要组合的调试图片放到项目根目录
- 将以下脚本加入到项目中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| IFS=$'\n' echo "ready change app icon" buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE") echo "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" echo "${SRCROOT}" echo $(find ${SRCROOT} -name "AppIcon76x76@2x~ipad.png") PATH=${PATH}:/usr/local/bin function changeAppIcon () { BASE_IMAGE_NAME=$1 TARGET_PATH="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${BASE_IMAGE_NAME}" BASE_IMAGE_PATH=$(find ${SRCROOT} -name ${BASE_IMAGE_NAME}) WIDTH=$(identify -format %w ${BASE_IMAGE_PATH}) FONT_SIZE=$(echo "$WIDTH * .2" | bc -l) echo "CFBundleVersion = $buildNumber" echo "CFBundleShortVersionString = $versionNumber" if [ "${CONFIGURATION}" == "Debug" ]; then convert debugRibbon.png -resize $WIDTHx$WIDTH resizedRibbon.png convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize ${FONT_SIZE} -gravity south -annotate 0 "$buildNumber" - | composite resizedRibbon.png - ${TARGET_PATH} fi if [ "${CONFIGURATION}" == "AdHoc" ]; then convert betaRibbon.png -resize $WIDTHx$WIDTH resizedRibbon.png convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize ${FONT_SIZE} -gravity south -annotate 0 "$buildNumber" - | composite resizedRibbon.png - ${TARGET_PATH} fi } changeAppIcon "AppIcon76x76@2x~ipad.png" changeAppIcon "AppIcon76x76~ipad.png" changeAppIcon "AppIconx40x40@2x~ipad.png" changeAppIcon "AppIcon40x40~ipad.png" changeAppIcon "AppIcon29x29@2x~ipad.png" changeAppIcon "AppIcon29x29~ipad.png" echo "finish"
|
需要注意的几点有:
- 路径问题(可以看到以上脚本跟原文中的有些差别)
- 图片名称,需要修改项目中AppIcon的命名
- 获取编译构建号,根据不同版本写入AppIcon中
最后效果类似下图
在这里再分享个根据githash更新编译构建号的脚本
1 2 3 4 5 6 7 8
| Githash=$(git --git-dir="${PROJECT_DIR}/.git" --work-tree="${PROJECT_DIR}" rev-parse --short HEAD) RevisionNumber=$(git rev-list --count HEAD) BuildTimestamp=$(date +'%Y-%m-%d %H:%M') GitCommit= bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "$INFOPLIST_FILE") /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $RevisionNumber" "$INFOPLIST_FILE" /usr/libexec/PlistBuddy -c "Set :BuildTimestamp $BuildTimestamp" "$INFOPLIST_FILE" /usr/libexec/PlistBuddy -c "Set :GitCommit $Githash" "$INFOPLIST_FILE"
|
后续
目前该功能已经集成到项目中,配合jenkins集成打包,各种轻松无压力~
以后可以在此基础上加一些其他功能,等需要时再加上咯。