如何在macOS中实现App Bundle多实例启动
macOS 封装脚本APP多实例并行运行最优解决方案
你之前配置
LSMultipleInstancesProhibited未生效的核心原因是该键的语义为「禁止多实例」,开启多实例需要将该布尔值设为false,而非true。
以下方案按优先级从高到低排序:
方案1:原生系统级多实例支持(最推荐)
- 保留app完整功能(包括Dock图标、Finder文件关联),无需修改核心脚本逻辑
- 在app的
Info.plist中添加/修改以下两个键:LSMultipleInstancesProhibited:布尔值设为falseLSUIElement:如果不需要在Dock常驻显示,可设为true,进一步降低系统对实例的限制
- 配置完成后右键打开一次app完成签名缓存更新,后续即可直接双击多次打开、或拖拽多个文件到app图标并行处理
方案2:入口脚本异步分发(适配现有逻辑的优化版)
比直接加&更稳定,不会出现参数丢失、进程被系统回收的问题:
- 打开app包内容,进入
Contents/MacOS/目录,找到默认的入口可执行文件,替换为以下逻辑的shell脚本:
#!/bin/zsh # 接收所有传入的文件路径参数 TASK_ARGS="$*" # 异步调用实际业务脚本,nohup保证入口进程退出后任务正常运行 nohup /bin/bash /path/to/你的实际业务脚本路径 $TASK_ARGS > ~/Library/Logs/你的脚本日志名.log 2>&1 & # 入口进程立刻退出,释放系统实例配额 exit 0
- 给新的入口脚本加执行权限:
chmod +x /path/to/你改后的入口脚本 - 优势:无需修改plist配置,完美兼容Finder拖拽文件打开的逻辑,多个任务完全并行互不干扰,还能自定义日志路径排查问题
方案3:命令行强制多开(适合批量调用场景)
如果需要脚本批量触发任务,直接用open命令的-n参数即可绕过系统实例限制:
# 强制启动新实例打开指定视频文件转码 open -n /Applications/你的转码.app /Users/xxx/Downloads/待转码视频.mp4
- 该参数在Big Sur及所有后续macOS版本均原生支持,无需修改app任何配置
内容的提问来源于stack exchange,提问作者florit
相关产品推荐
相关产品推荐

