如何在Xcode构建非App macOS Bundle时通过脚本设置自定义.icns图标?
替换音频插件Bundle自定义图标的Xcode构建脚本方案
嘿,我开发音频插件的时候也碰到过一模一样的问题——那些基于旧版Rez工具的脚本确实没法适配现在的Bundle结构了。下面给你几个可以直接在Xcode构建阶段用的靠谱脚本方案,帮你把.vst3、.component和.aaxplugin这些Bundle的默认图标换成自定义的.icns文件:
方案1:完整的图标替换流程
这个脚本会自动把你的自定义.icns文件复制到每个插件Bundle的资源目录,同时更新对应的Info.plist配置,确保系统识别自定义图标。
- 在Xcode中,给你的目标添加一个Run Script构建阶段(位置放在「Copy Bundle Resources」之后)
- 把下面的代码粘贴进去,记得替换成你自己的图标路径和文件名:
# 自定义.icns文件的路径(根据你的项目结构调整) CUSTOM_ICNS="${PROJECT_DIR}/Resources/MyPluginIcon.icns" # 自定义图标文件名(不带.icns后缀) ICON_NAME="MyPluginIcon" # 遍历三种音频插件Bundle类型 for BUNDLE_EXT in ".vst3" ".component" ".aaxplugin"; do # 构建后的Bundle完整路径 BUNDLE_LOC="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}${BUNDLE_EXT}" # 检查Bundle是否存在 if [ -d "$BUNDLE_LOC" ]; then # 创建Resources目录(防止某些插件模板没自动生成) mkdir -p "${BUNDLE_LOC}/Contents/Resources" # 复制自定义图标到Bundle资源目录 cp "$CUSTOM_ICNS" "${BUNDLE_LOC}/Contents/Resources/" # 更新Info.plist,指定使用自定义图标 defaults write "${BUNDLE_LOC}/Contents/Info.plist" CFBundleIconFile "$ICON_NAME" # 标记Bundle为自定义图标(解决系统不刷新图标的问题) SetFile -a C "$BUNDLE_LOC" fi done
方案2:简化版(已配置资源复制)
如果你已经把自定义.icns文件添加到了Xcode的「Copy Bundle Resources」阶段(确保它会被自动复制到每个Bundle的Resources目录),那只需要更新Info.plist即可:
# 自定义图标文件名(不带.icns后缀) ICON_NAME="MyPluginIcon" for BUNDLE_EXT in ".vst3" ".component" ".aaxplugin"; do BUNDLE_LOC="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}${BUNDLE_EXT}" if [ -d "$BUNDLE_LOC" ]; then defaults write "${BUNDLE_LOC}/Contents/Info.plist" CFBundleIconFile "$ICON_NAME" SetFile -a C "$BUNDLE_LOC" fi done
关键注意事项
- 确保你的.icns文件符合macOS规范:包含从16x16到512x512@2x的多分辨率图标,否则在不同设备上可能显示异常。
- Xcode的Run Script阶段,Shell选择
/bin/bash,取消勾选「Run script only when installing」,这样每次构建都会自动替换图标。 - 如果遇到权限问题,检查你的项目路径和构建产物目录是否有读写权限,尽量避免用
sudo(可能导致后续权限混乱)。 - 旧版Rez工具是针对Carbon框架的资源文件系统,现在的音频插件Bundle用的是现代的Info.plist+Resources目录结构,所以完全不需要再依赖Rez了。
内容的提问来源于stack exchange,提问作者HowardAntares
相关产品推荐
相关产品推荐

