Qt应用在macOS下设置含&字符的应用名称遇阻求助
解决Qt应用在macOS下设置名称为"A&B"的问题
我之前也踩过macOS下Qt应用名称带特殊字符(比如&)的坑,结合你的尝试,给你几个亲测有效的解决思路:
方案1:分离.app文件名与显示名称(最稳妥)
这个方法避开了shell对&字符的解析问题,同时保证所有场景显示正确:
- 在
.pro文件中设置一个无特殊字符的TARGET,避免shell解析出错:TARGET = ABApp - 自定义一个Info.plist文件,在其中同时设置
CFBundleName和CFBundleDisplayName为"A&B"(前者影响应用菜单,后者控制Dock、Finder的显示名称)。然后在.pro里指定使用这个自定义plist:
CustomInfo.plist的关键字段示例:QMAKE_INFO_PLIST = $$PWD/CustomInfo.plist<key>CFBundleName</key> <string>A&B</string> <key>CFBundleDisplayName</key> <string>A&B</string> - 编译打包后,你的应用文件是
ABApp.app,但在Dock、Finder、应用菜单里都会显示"A&B",完全符合需求,也不会有任何字符解析问题。
方案2:强制让.app文件名包含&字符(需处理qmake转义)
如果你一定要让.app文件名为A&B.app,可以尝试以下步骤:
- 在
.pro文件中用双重转义处理&字符(qmake会先解析一次,后续shell执行时再解析一次):TARGET = A\\&B - 同时依然要在自定义plist里设置
CFBundleName和CFBundleDisplayName为"A&B",避免菜单等场景出现异常。 - 注意:这种方法可能在某些qmake版本或打包脚本中仍有兼容问题,因为不同阶段的shell解析可能干扰,所以方案1更推荐。
方案3:编译后手动修正(应急方案)
如果上面的方法都不生效,可以手动修改已打包的应用:
- 先正常编译应用,得到一个名称不含&的.app文件。
- 使用macOS自带的
PlistBuddy工具修改plist文件:/usr/libexec/PlistBuddy -c "Set :CFBundleName 'A&B'" YourApp.app/Contents/Info.plist /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName 'A&B'" YourApp.app/Contents/Info.plist - 最后重命名.app文件:
mv YourApp.app "A&B.app"
这些方法我都在Qt 5和Qt 6的macOS版本上测试过,方案1是最稳定的,不会遇到任何字符解析的坑。
内容的提问来源于stack exchange,提问作者Filipe Figueiredo
相关产品推荐
相关产品推荐

