【问题标题】:iOS11 AppIcon can't changeiOS11 AppIcon 无法更改
【发布时间】:2017-09-08 10:11:16
【问题描述】:
  • Xcode 9 测试版 6
  • iOS 11 测试版 10

    我想要使用自定义 App 图标打包应用程序,所以我尝试在 DerivedData (/Users/XXX/Library/Developer/Xcode/DerivedData/project/Build/Products/Debug-iphoneos/xxx.app 替换 AppIcon.png 文件)

    它适用于 iOS 10,但不适用于 iOS 11

    有人能解决吗?

    感谢提前

【问题讨论】:

  • 为什么在派生数据中?你没有代码吗?如果您没有通过创建一个 Zip 文件来更改 IPA 文件,请添加新图像并再次将 zip 转换为 IPA 文件。最后通过任何工具说代码辞职,比如 Fastlane。
  • 我有代码,但是我通过 shell 脚本用 buildversion 创建了一个新的自定义图标,我尝试替换它,但在 iOS 11 上失败了
  • 完美的代码和图标也是如此。现在检查应用程序图标在您的代码中的位置。应该在 imageassets 文件夹中。打开资产文件夹,选择应用图标并拖放您的新图标文件。
  • 我确实知道如何通过Images.xcassets更改应用程序图标,但我没有新图片作为图标,构建应用程序时由脚本生成的图片
  • @Paladinfeng,您可能知道编译器在构建包(即调试或发布)期间对文件进行哈希处理,因此您不能只替换包中的文件 - 您的脚本必须在之前运行或者你需要在编译前更改为项目中的图标。

标签: ios ios11


【解决方案1】:

我找到了解决办法。 我在源 .xcasset 文件夹中更改应用程序图标,而不是在派生数据中(使用 ImageMagick)。所以,这是我的脚本:

#!/bin/bash

IFS=$'\n'
BASE_ICONS_DIR=$(find ${SRCROOT}/${PRODUCT_NAME} -name "AppIcon.appiconset")
IFS=$' '
CONTENTS_JSON="${BASE_ICONS_DIR}/Contents.json"

version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${INFOPLIST_FILE}"`
# The next line adds special suffix, necessary in my project
version="${version/'$(VERSION_SUFFIX)'/$VERSION_SUFFIX}"

function tag() {
    export PATH=$PATH:/usr/local/bin:/opt/boxen/homebrew/bin/
    ICON_PATH=$1

    width=`identify -format %w ${ICON_PATH}`
    [ $? -eq 0 ] || exit 1

    height=$((width * 30 / 100))

    if [ "${CONFIGURATION}" != "AppStore" ]; then
       convert -background '#0008' \
       -fill white -gravity center \
       -size ${width}x${height} \
       caption:"${version}" \
       "${ICON_PATH}" +swap -gravity south -composite "${ICON_PATH}" || exit 1
    fi
}

ICONS=(`grep 'filename' "${CONTENTS_JSON}" | cut -f2 -d: | tr -d ',' | tr -d '\n' | tr -d '"'`)

ICONS_COUNT=${#ICONS[*]}

IFS=$'\n'

for (( i=0; i<ICONS_COUNT; i++ )); do
    tag "$BASE_ICONS_DIR/${ICONS[$i]}"
done

此脚本在Copy Bundle Resources 之前执行。执行应用程序图标更改后,因此我需要使用附加运行脚本作为最后一个构建阶段来恢复更改:

if [ "${CONFIGURATION}" != "AppStore" ]; then
   IFS=$'\n'
   git checkout -- `find "${SRCROOT}/${PRODUCT_NAME}" -name AppIcon.appiconset -type d`
fi

我的构建阶段如下所示:

【讨论】:

  • 我们不能更改 IPA 中的图标并退出它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多