如何为基于Install4j创建的macOS JavaScript应用安装QuickLook预览插件
如何为基于Install4j创建的macOS JavaScript应用安装QuickLook预览插件
我之前帮同事处理过几乎一模一样的场景,Install4j确实没原生支持把QuickLook插件打包进主应用的流程,不过你说的「先生成主APP的DMG,再添加已签名公证的插件」这个思路完全行得通,一步步来,每一步都要注意签名和公证的细节,不然苹果的Gatekeeper会拦:
一、先搞定签名+公证好的QuickLook插件
这是基础,插件本身必须合规,不然最后合在一起全白搭:
- 首先你得有一个可用的
.qlgenerator插件包:这个插件要在Info.plist里正确声明它支持的文件UTI(比如你主APP关联的自定义格式),还要实现QuickLook的预览逻辑(如果是JS相关文件,用Swift/Obj-C写的插件或者基于QLServer的脚本都可以,只要符合苹果的QL插件规范)。 - 给插件单独签名:打开终端,用你的开发者ID证书签名,必须加硬ening选项才能过公证:
codesign -s "Developer ID Application: 你的开发者全称" --deep --force --options runtime 你的插件名.qlgenerator - 对插件进行公证:先把插件打包成zip(notarytool不直接处理目录),再提交公证:
等终端显示zip -r 插件名.zip 你的插件名.qlgenerator xcrun notarytool submit 插件名.zip --keychain-profile "你的公证密钥链配置文件" --waitstatus: Accepted就说明公证通过了,再给插件钉上公证票根(离线也能验证):
可以用xcrun stapler staple 你的插件名.qlgeneratorspctl -a -t open --context context:primary-signature -v 你的插件名.qlgenerator验证,显示accepted就没问题。
二、处理Install4j生成的主APP DMG
现在把Install4j导出的原始DMG拆解开,准备加插件:
- 先正常用Install4j生成主应用的DMG,生成后挂载这个DMG:双击打开或者用命令:
挂载后在hdiutil attach 你的主应用原始.dmg/Volumes/目录下会有对应的卷名,比如YourApp 1.0。 - 把DMG里的所有内容复制到临时工作目录,避免直接修改只读的挂载卷:
mkdir -p ~/temp_dmg_workspace cp -R /Volumes/YourApp\ 1.0/* ~/temp_dmg_workspace/ - 复制完成后卸载原始DMG:
hdiutil detach /Volumes/YourApp\ 1.0
三、整合插件并重新打包DMG
这里分两种情况,看你想要的安装体验:
情况1:让用户手动安装插件(简单但不够自动化)
- 直接把你准备好的
.qlgenerator插件复制到临时工作目录,和主APP图标放一起,同时加个ReadMe.txt说明:请将此插件拖到 ~/Library/QuickLook 目录下,然后执行 qlmanage -r 并重启Finder生效。
情况2:自动安装插件(体验更好,需要加安装脚本)
- 在临时工作目录创建安装脚本
install_ql_plugin.sh,内容如下:#!/bin/bash # 安装QuickLook插件到用户目录 QL_DIR="$HOME/Library/QuickLook" mkdir -p "$QL_DIR" cp -R "./你的插件名.qlgenerator" "$QL_DIR/" # 刷新QuickLook缓存 qlmanage -r qlmanage -r cache echo "QuickLook插件安装完成,请重启Finder生效" - 给脚本加执行权限:
chmod +x ~/temp_dmg_workspace/install_ql_plugin.sh - 把
.qlgenerator插件复制到临时工作目录,和脚本放在同一层级。
完成插件整合后,重新打包DMG:
hdiutil create -volname "YourApp 1.0 With QL Plugin" -srcfolder ~/temp_dmg_workspace -ov -format UDZO 你的最终应用.dmg
四、对新DMG进行签名+公证
这一步绝对不能省,不然用户打开会被Gatekeeper拦截:
- 先给新DMG签名:
codesign -s "Developer ID Application: 你的开发者全称" --deep --force --options runtime 你的最终应用.dmg - 然后公证新DMG:
xcrun notarytool submit 你的最终应用.dmg --keychain-profile "你的公证密钥链配置文件" --wait - 公证通过后钉上票根:
xcrun stapler staple 你的最终应用.dmg
五、验证最终效果
- 挂载新DMG,安装主应用,再按情况1或2的方式处理插件,之后找一个插件支持的文件,按空格看看能不能正常预览。
- 也可以用命令验证DMG的合规性:
显示spctl -a -t open --context context:primary-signature -v 你的最终应用.dmgaccepted就说明完全符合苹果的要求了。
最后补个小提醒:不建议把QL插件塞进主APP包内部的Contents/Library/QuickLook目录,苹果的规范是QL插件要放在系统或用户的QuickLook目录下,这样系统才能正确识别加载。如果你硬要塞进去,那还要重新签名主APP再打包,反而麻烦。




