返回

解决 Linux 下 DMG x64 构建失败 arm64 构建成功的难题

Linux

解决 DMG 在 Linux 下针对 x64 构建不工作但 arm64 构建正常运行的问题

前言

在 Linux 上构建 DMG 文件时,针对 x64 构建经常会出现无法运行的问题,但针对 arm64 构建却能正常运行。本文将深入探讨导致此问题的根源,并提供详细的解决方案。

问题根源

此问题通常源于 genisoimage 或 dmg 实用程序在创建 x64 DMG 文件时未能正确处理可执行文件。具体来说,x64 可执行文件需要特殊标志才能在 Mac 上运行,而这些标志在构建过程中可能未被正确设置。

解决方案

要解决此问题,请按照以下步骤操作:

1. 使用 lipo 检查可执行文件:

lipo -info /path/to/MyApp.app/Contents/MacOS/MyApp

2. 添加架构标志:

lipo -create -architecture arm64 /path/to/MyApp.arm64 -architecture x86_64 /path/to/MyApp.x86_64 -output /path/to/MyApp

3. 更新 DMG 文件:

genisoimage -V MyApp -D -R -apple -no-pad -o proto.img /path/to/template
dmg dmg proto.img final.dmg

4. 检查 DMG 文件:

hdiutil mount -nobrowse final.dmg

5. 验证可执行文件:

打开 DMG 文件,验证可执行文件是否可以正常运行。

注意事项

  • 确保为您的特定 macOS 版本和体系结构设置了正确的标志。
  • 仔细检查您的命令,确保它们正确无误。
  • 如果问题仍然存在,请检查 genisoimage 和 dmg 实用程序的版本,确保它们是最新的。

结论

通过遵循这些步骤,您可以解决 DMG 在 Linux 下针对 x64 构建无法运行但针对 arm64 构建正常运行的问题。请记住,详细的错误消息和上下文信息对于调试此类问题至关重要。

常见问题解答

1. 为什么会出现这个问题?

这个问题是由 genisoimage 或 dmg 实用程序在创建 x64 DMG 文件时未能正确处理可执行文件造成的。

2. 如何检查可执行文件是否包含 arm64 和 x64 架构?

使用 lipo 命令:

lipo -info /path/to/MyApp.app/Contents/MacOS/MyApp

3. 如何添加架构标志?

使用 lipo 命令:

lipo -create -architecture arm64 /path/to/MyApp.arm64 -architecture x86_64 /path/to/MyApp.x86_64 -output /path/to/MyApp

4. 如何更新 DMG 文件?

genisoimage -V MyApp -D -R -apple -no-pad -o proto.img /path/to/template
dmg dmg proto.img final.dmg

5. 如何检查 DMG 文件是否可以正常安装?

hdiutil mount -nobrowse final.dmg