运行时改变App的图标
ImageMagick,Terminal,Xcode,去写一个自动在你的app的图标上加上"debug"或者"beta"标识的脚本。
- 安装ImageMagick
-
这是一个非常强大的图形处理图软件套件,专门通过终端进行。你可以非常简单地通过Homebrew来安装ImageMagick
brew update
这是确定你是否从Homebrew上安装的最新的安装包,这个也是确认你是否有安装Homebrewbrew install ImageMagick
使用Homebrew来安装你所需要的安装包
- 安装Ghostscript
-
因为你将使用的ImageMagick会依赖它。Ghostscript是一个软件套件用于呈现PDF和PS文件。你需要它是因为它提供了支持ImageMagick的字体。
brew install ghostscript
brew doctor
如果中间发生错误,运行这个命令,如果安装失败,你会得到一个消息,并告诉你如何去修复它。
ImageMagick基本使用
convert
:一张图片,修改它,然后保存为一张新的图片;composite
:一张图片,在它上面覆盖另外一张图片,然后存为新的第三张图片
convert [email protected] -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" test.png
[email protected] 是输入图片的名字;
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
- 你也要将debugRibbon.png 和 betaRibbon.png 放在和.xcodeproj同级的目录文件中
- 应用程序图标的名称必须像
[email protected]
。Xcode使用此命名约定来确定使用哪个图标根据设备使用 - 在你的工程中,选择项目的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 "[email protected]")
- 上面获取到图标的地址
-
IFS=$'\n'
设置IFS-internal字段分隔符换行符。如果你不这样做,第二行就会失败,因为文件名,Llama Trot,包含一个空格 -
$ { SRCROOT }
文件夹递归搜索文件[email protected]
IFS=$'\n'
#1
PATH=${PATH}:/usr/local/bin
#2
TARGET_PATH="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/[email protected]"
BASE_IMAGE_PATH=$(find ${SRCROOT} -name "[email protected]")
#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 "[email protected]"
generateIcon "[email protected]"
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 "[email protected]" generateIcon "[email protected]"
来自http://www.cocoachina.com/ios/20150909/13354.html
我不愿成为你退而求其次的人。
以上内容纯属个人笔记,不作其他用途