launchd:已注册的 URL 方案的启动顺序

问题描述

我的应用有一个自定义注册的 ULR 方案,我们称之为 myapp://。开发时系统上有多个应用程序版本:

  • 生产版本可能在 /Applications
  • DerivedData 中的当前版本
  • Archives 中发布的存档版本

现在当 myapp:// 被打开时,例如浏览器,实际上启动哪个版本似乎完全随机。人们可能会猜测它应该是最后一个活动或正在运行的版本,但它不是。

我能以某种方式影响这个发射顺序吗?如何在系统上可靠地测试多个版本的 URL 方案?

解决方法

它丑陋而蛮力,但是……你能“破解”你不想启动的应用吗?

例如像

这样的shell脚本

break.sh

#!/bin/bash
mv /Applications/MyApp.app /Applications/MyApp.disable
mv /DerivedData/MyApp.app /DerivedData/MyApp.disable
for x in /Archives/*.app
  do mv /Archives/$x /Archives/$x.disabled
done

然后恢复做一个像restore.sh这样的脚本

 #!/bin/bash
 mv /Applications/MyApp.disable /Applications/MyApp.app
 mv /DerivedData/MyApp.disable /DerivedData/MyApp.app
 for x in /Archives/*.app
   do mv /Archives/$x Archives/`echo $x | sed -e /s/disabled//g`
 done

显然,编辑上面的内容以破坏您想要继续工作的内容。