You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为基于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 "你的公证密钥链配置文件" --wait
    
    等终端显示status: Accepted就说明公证通过了,再给插件钉上公证票根(离线也能验证):
    xcrun stapler staple 你的插件名.qlgenerator
    
    可以用spctl -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 你的最终应用.dmg
    
    显示accepted就说明完全符合苹果的要求了。

最后补个小提醒:不建议把QL插件塞进主APP包内部的Contents/Library/QuickLook目录,苹果的规范是QL插件要放在系统或用户的QuickLook目录下,这样系统才能正确识别加载。如果你硬要塞进去,那还要重新签名主APP再打包,反而麻烦。

火山引擎 最新活动