Skip to content

Commit 3f8e719

Browse files
committed
fix(packaging): repair macos app bundle layout
1 parent 6ba2d76 commit 3f8e719

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

scripts/Info.no-xcode.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
<string>LimePet</string>
1111
<key>CFBundleIdentifier</key>
1212
<string>com.lime.pet</string>
13+
<key>CFBundleIconFile</key>
14+
<string>AppIcon</string>
1315
<key>CFBundleInfoDictionaryVersion</key>
1416
<string>6.0</string>
1517
<key>CFBundleName</key>

scripts/build-app.sh

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ CONTENTS_DIR="${APP_DIR}/Contents"
99
MACOS_DIR="${CONTENTS_DIR}/MacOS"
1010
RESOURCES_DIR="${CONTENTS_DIR}/Resources"
1111
PLIST_TEMPLATE="${SCRIPT_DIR}/Info.no-xcode.plist"
12+
ICON_SOURCE_PATH="${REPO_ROOT}/LimePet/Resources/dewy-lime.png"
13+
ICON_OUTPUT_PATH="${RESOURCES_DIR}/AppIcon.icns"
1214

1315
CONFIGURATION="debug"
1416
VERSION=""
@@ -53,6 +55,31 @@ if [[ -z "${BUILD_NUMBER}" ]]; then
5355
BUILD_NUMBER="$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PLIST_TEMPLATE}")"
5456
fi
5557

58+
generate_app_icon() {
59+
local source_png="$1"
60+
local output_icns="$2"
61+
62+
if [[ ! -f "${source_png}" ]]; then
63+
echo "未找到应用图标源文件: ${source_png}" >&2
64+
return 1
65+
fi
66+
67+
local iconset_dir
68+
iconset_dir="$(mktemp -d "${TMPDIR:-/tmp}/lime-pet-iconset.XXXXXX").iconset"
69+
mv "${iconset_dir%.iconset}" "${iconset_dir}"
70+
71+
local sizes=(16 32 128 256 512)
72+
for size in "${sizes[@]}"; do
73+
sips -s format png -z "${size}" "${size}" "${source_png}" --out "${iconset_dir}/icon_${size}x${size}.png" >/dev/null
74+
75+
local retina_size=$((size * 2))
76+
sips -s format png -z "${retina_size}" "${retina_size}" "${source_png}" --out "${iconset_dir}/icon_${size}x${size}@2x.png" >/dev/null
77+
done
78+
79+
iconutil -c icns "${iconset_dir}" -o "${output_icns}"
80+
rm -rf "${iconset_dir}"
81+
}
82+
5683
BIN_DIR="$(swift build --package-path "${REPO_ROOT}" --configuration "${CONFIGURATION}" --show-bin-path)"
5784
find "${BIN_DIR}" -maxdepth 1 -type d -name "*.bundle" -exec rm -rf {} + 2>/dev/null || true
5885

@@ -79,18 +106,19 @@ cp "${PLIST_TEMPLATE}" "${CONTENTS_DIR}/Info.plist"
79106
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUILD_NUMBER}" "${CONTENTS_DIR}/Info.plist"
80107

81108
if [[ -n "${RESOURCE_BUNDLE_PATH}" ]]; then
82-
cp -R "${RESOURCE_BUNDLE_PATH}" "${RESOURCES_DIR}/"
109+
cp -R "${RESOURCE_BUNDLE_PATH}" "${APP_DIR}/"
83110
fi
84111

85112
TARGET_RESOURCE_ROOT="${RESOURCES_DIR}"
86113
if [[ -n "${RESOURCE_BUNDLE_PATH}" ]]; then
87-
TARGET_RESOURCE_ROOT="${RESOURCES_DIR}/$(basename "${RESOURCE_BUNDLE_PATH}")"
114+
TARGET_RESOURCE_ROOT="${APP_DIR}/$(basename "${RESOURCE_BUNDLE_PATH}")"
88115
fi
89116

90117
mkdir -p "${TARGET_RESOURCE_ROOT}"
91118
cp "${REPO_ROOT}/LimePet/Resources/character-library.json" "${TARGET_RESOURCE_ROOT}/character-library.json"
92119
cp "${REPO_ROOT}/LimePet/Resources/live2d-model-catalog.json" "${TARGET_RESOURCE_ROOT}/live2d-model-catalog.json"
93120
rsync -a "${REPO_ROOT}/LimePet/Resources/live2d-runtime"/ "${TARGET_RESOURCE_ROOT}/live2d-runtime"/
121+
generate_app_icon "${ICON_SOURCE_PATH}" "${ICON_OUTPUT_PATH}"
94122

95123
chmod +x "${MACOS_DIR}/LimePet"
96124

0 commit comments

Comments
 (0)