运行时改变App的图标

运行时改变App的图标


ImageMagick,Terminal,Xcode,去写一个自动在你的app的图标上加上"debug"或者"beta"标识的脚本。
  1. 安装ImageMagick
  • 这是一个非常强大的图形处理图软件套件,专门通过终端进行。你可以非常简单地通过Homebrew来安装ImageMagick

    brew update这是确定你是否从Homebrew上安装的最新的安装包,这个也是确认你是否有安装Homebrew

    brew install ImageMagick使用Homebrew来安装你所需要的安装包

  1. 安装Ghostscript
  • 因为你将使用的ImageMagick会依赖它。Ghostscript是一个软件套件用于呈现PDF和PS文件。你需要它是因为它提供了支持ImageMagick的字体。

    brew install ghostscript
    brew doctor如果中间发生错误,运行这个命令,如果安装失败,你会得到一个消息,并告诉你如何去修复它。

  1. ImageMagick基本使用

  2. convert:一张图片,修改它,然后保存为一张新的图片;

  3. composite:一张图片,在它上面覆盖另外一张图片,然后存为新的第三张图片

convert AppIcon60x60@2x.png -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" test.png

  • AppIcon60x60@2x.png 是输入图片的名字;

  • fill white 设置文本为白色;

  • font Times-Bold 告诉ImageMagick使用什么字体;

  • pointsize 18 设置字体的大小为18;

  • gravity south 文本与图片的底部对齐

  • annotate 0 "Hello World" 告诉ImageMagick使带有"Hello World"文本注释的图片旋转的度数为0度;

  • test.png 输出的文件名,并且ImageMagick将会覆盖掉已经存在的文件。

convert -list font看下你所能用的字体有哪些


composite betaRibbon.png test.png test2.png这个是将betaRibbon.png放在test.png的上面,然后将合成的图片保存为test2.png

convert betaRibbon.png -resize 120x120 smallBetaRibbon.png将betaRibbon.png的尺寸改为120x120的


Xcode

  1. 你也要将debugRibbon.png 和 betaRibbon.png 放在和.xcodeproj同级的目录文件中
  2. 应用程序图标的名称必须像AppIcon60x60@2x.png。Xcode使用此命名约定来确定使用哪个图标根据设备使用
  3. 在你的工程中,选择项目的Target,然后选择Build Phases,点击+,在弹出的菜单中选择New Run Script Phase

echo "hello word"最简单的打印

echo "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"你运行你的项目后的文件夹路径,包含最后一个图标

echo "${SRCROOT}"项目文件所在的文件夹路径

IFS=$'\n'
//
echo $(find ${SRCROOT} -name "AppIcon60x60@2x.png")
  • 上面获取到图标的地址
  • IFS=$'\n'设置IFS-internal字段分隔符换行符。如果你不这样做,第二行就会失败,因为文件名,Llama Trot,包含一个空格
  • $ { SRCROOT }文件夹递归搜索文件AppIcon60x60@2x.png
IFS=$'\n'
#1
PATH=${PATH}:/usr/local/bin
#2
TARGET_PATH="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppIcon60x60@2x.png"
BASE_IMAGE_PATH=$(find ${SRCROOT} -name "AppIcon60x60@2x.png")
#3
convert betaRibbon.png -resize 120x120 resizedBetaRibbon.png
#4convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" ${TARGET_PATH} (修改文字)
convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" - | composite resizedBetaRibbon.png - ${TARGET_PATH}
  • 如果你省略第一行,编译将失败。你的终端有一个叫PATH的变量,来存储一些默认的本地脚本。对于所有的命令终端认为这是第一个,默认并不是Unix的一部分。这允许任何命令位于一个目录路径运行没有指定完整的命令的位置。Xcode需要将相同的PATH变量分享给你的终端。这行添加/user/local/bin到PATH变量,Homebrew安装的地方。

  • 接下来的两行,获取本地的应用图标,然后分别将该路径保存到TARGET_PATH 和 BASE_IMAGE_PATH 变量中

  • 这行是将betaRibbon.png的图标的尺寸改为合适的大小;

  • 最后一行做了两件事情。首先,它在原始的应用图标上添加"Hello World"文本。然后该脚本执行合成的功能--将有beta标识的图片放置在其上面。然后将合成的图片保存为应用的图标。


PATH=${PATH}:/usr/local/bin
IFS=$'\n'
function generateIcon() {
    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 * .15" | bc -l)
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
    convert bate.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}
}
generateIcon "AppIcon60x60@2x.png"
generateIcon "AppIcon60x60@3x.png"
generateIcon "AppIcon76x76~ipad.png"
generateIcon "AppIcon76x76@2x~ipad.png"
  • 这使得整个图像处理代码为一个函数,称为generateIcon(),并且你将图标的名称传递给过程作为参数。脚本访问这个论点通过使用$1,并设置变量BASE_IMAGE_PATH.$ { BASE_IMAGE_PATH }然后放置AppIcon60x60@2x之前放置的地方。

  • 你将会发现ImageMagick的一个新功能,Identity,这个功能会获取图片的信息。在这种情况下,你想使用通过格式化-format %w 得到的宽度在identify,去重新改变betaRibbon.png的大小。

    FONT_SIZE=$(echo "$WIDTH * .15" | bc -l)

    • 设置一个FONT_SIZE变量可变宽度的五分之一。因为Unix算术不支持浮点运算,您必须使用bc程序。basic calculator的缩写,bc能够处理浮点类型的计算。

    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")

    • 通过使用PlistBuddy来获取构建号

  • 在Xcode中,到项目配置中。你将会看到两个默认的设置:Debug和Release。点击+,选择Duplicate Release 然后将它命名为 Beta。

    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
    versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
    
    • 获取版本号及编译号,注意路径路径路径

    PATH=${PATH}:/usr/local/bin
    IFS=$'\n'
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion"   "${INFOPLIST_FILE}")
    versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${INFOPLIST_FILE}")
    function generateIcon() {
      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 * .15" | bc -l)
      if [ "${CONFIGURATION}" == "Debug" ]; then
      convert debugRibbon.png -resize ${WIDTH}x${WIDTH} resizedRibbon.png
      convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize ${FONT_SIZE} -gravity south -annotate 0 "$versionNumber" - | composite resizedRibbon.png - ${TARGET_PATH}
      fi
      if [ "${CONFIGURATION}" == "Beta" ]; then
      convert betaRibbon.png -resize ${WIDTH}x${WIDTH} resizedRibbon.png
      convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize ${FONT_SIZE} -gravity south -annotate 0 "$versionNumber" - | composite resizedRibbon.png - ${TARGET_PATH}
      fi
    }
    generateIcon "AppIcon60x60@2x.png"
    generateIcon "AppIcon60x60@3x.png"
    

来自http://www.cocoachina.com/ios/20150909/13354.html


我不愿成为你退而求其次的人。
以上内容纯属个人笔记,不作其他用途

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容