Flutter auto_updater结合Sparkle更新后macOS应用名称不更新问题咨询
问题解答
1. 如何在auto_updater包中开启SPARKLE_NORMALIZE_INSTALLED_APPLICATION_NAME标志?
目前Flutter的auto_updater包没有直接暴露该Sparkle编译标志的配置入口,但可以通过两种间接方式实现:
- 修改Podfile注入编译标志:进入项目的
macos目录,编辑Podfile,添加post_install钩子来给Sparkle注入编译宏:
post_install do |installer| installer.pods_project.targets.each do |target| if target.name == 'Sparkle' target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'SPARKLE_NORMALIZE_INSTALLED_APPLICATION_NAME=1' end end end end
修改后执行pod install,重新编译项目即可让Sparkle启用该标志。
- 自定义auto_updater本地副本:如果Podfile钩子不生效,可以fork auto_updater仓库,找到其依赖Sparkle的编译配置部分,手动添加
SPARKLE_NORMALIZE_INSTALLED_APPLICATION_NAME宏定义,再将项目的auto_updater依赖指向修改后的仓库地址。
2. 确保OTA更新后应用名称正确更新的替代方案
如果上述方法无法生效,还可以尝试以下方案:
- 更新完成后手动触发重命名:监听auto_updater的更新完成回调,通过Flutter原生通道编写macOS原生代码,手动检查并重命名/Applications目录下的应用包,同时执行命令重置Dock缓存(如
killall Dock)让新名称生效。 - 校验更新包的Bundle配置一致性:确认更新包的
Info.plist中CFBundleDisplayName和CFBundleName都已更新为新名称,同时Sparkle更新元数据(appcast.xml)里的bundleName字段也同步设置为新名称,避免配置不一致导致识别问题。 - 临时引导用户手动操作:在更新提示中告知用户,更新完成后手动删除旧名称应用,将新应用拖入/Applications目录,再右键Dock图标选择退出并重启Dock。
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

