实现将 HMCL 在 macOS 中打包为 App Bundle 疑难杂症与解决方案讨论 #4968
Replies: 10 comments 35 replies
|
HMCL以及PCL等便携式的启动器打包到 bundle 里面没什么好处吧,纯增加下载时的体积。 虽然 app bundle 可以自带 jre,但是启动游戏本来就需要自己安装 Java ,启动器带不带没啥太大的区别吧? |
|
弄了个自动化打包 dmg,但单纯就是启动方便点,不用手搓命令行了,没有解决 |
或许可以参考 Terracotta 的安装方式,通过
可以为每个版本都提供一个签过名的 App Bundle,在更新时直接替换 App Bundle 本体,但这样需要调整更新服务器的逻辑 |
|
关于游戏模式,仅修改启动器的 App Category 可能并不够,它只对启动器本身生效,无法传递到 Minecraft 上。详见 PrismLauncher/PrismLauncher#1644 (comment) |
|
发现一个重要问题,就是macOS中被一些软件(比如Safari)下载的app会被打上quarantine标签,然后运行时就有可能受到App Translocation,也就是给你拷贝到神秘位置再运行,而且会加上很多限制,比如说这个神秘位置是只读的 只有通过访达将App不和其他文件一起,不随父文件夹一起移动离开最初被解压出的位置才会解除Translocation。或者直接去掉quarantine标签也行 HMCL如果以App Bundle形式分发,也会受到Translocation的影响 |
|
注意到 #5987 的合并,未来可以在 App Bundle 启动 Launcher 时强制给 HMCL 传入相应的环境变量到更加合适的 |
|
发现一个问题,如果App Bundle里面的可执行文件是个脚本,脚本会被用Rosetta转译执行。不确定为什么 |
|
参考这条评论,想必在终端启动HMCL也是可以解决这些问题的。那么为什么不用sh脚本( |
|
总结一下吧。 目前的解决方案主要有这些: 1. Jar分发+终端启动(当前方案)直接用jar分发构建文件,在终端执行 优点:终端可以申请麦克风权限、更新方便。 缺点:用户不友好、启动不方便、macOS方面的特性无法实现 2.dmg分发打包成.app包放到dmg里分发。 优点:用户友好、申请权限方便、支持更改图标等功能 缺点:签名弄不好不让运行、公证繁琐、 3.pkg安装包类似上条。 4.公证签名的dmg.pkg全套都走apple的那套流程。 优点:官方支持的做法、权限方便 缺点:要付年金 它们要解决这些问题:
按什么方法来就看维护者们的意愿了。 |
|
其实有一个办法解决以上所有问题,就是用Swift重写HMCL…… 补充几点个人意见:
|

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
为何要实现?
应 #4450 需求,我也注意到 Glavo 的视频下面偶见用户请求 macOS 使用 App Bundle 分发 HMCL
另外,我还注意到要实现以下功能,必须先实现打包为 App Bundle 这一步:
好处与坏处,详见:#4450 (comment)
问题 / 疑难杂症:
1. HMCL 本体该存放在哪?
随着 #4765 的 Close,代表着 ShulkerSakura/HMCL-MacOS/ 所提供的解决方案不可行,尤其是此项目的解决方案对 macOS 本身就是不合法的(它给人的感觉就是 Windows 下把所有配置文件存放在 EXE 可执行文件内),并且此方法除了可能的权限问题,在添加签名后几乎很难避免报应用程序损坏的错误
2. HMCL 更新(包括 App Bundle 本体)
上面提到的项目解决方案因为权限也可能面临无法更新
解决方案:#4450 (comment)
可能还有更多问题需要解决
All reactions