macOS与Electron Builder的跨架构构建给出了“mach-o文件,但是不兼容的架构”运行时错误

xmakbtuz  于 2023-10-14  发布在  Electron
关注(0)|答案(1)|浏览(158)

我有一个用Electron Builder为macOS和Windows构建的Electron应用程序。
目前,对于macos,我们的应用程序仅针对x64目标构建(在英特尔机器上),然后推送到S3进行自动更新。现在我想为arm64和x64 macos目标构建应用程序(注意:我现在不想做一个通用的应用程序)。
我为Electron Builder添加了以下配置:

...
    target: {
      target: 'default',
      arch: [
        'x64',
        'arm64'
      ]
    },
    ...

当我在Intel(x64)机器上构建,然后尝试在Apple Silicon机器上运行arm64应用程序时,我得到以下错误:

mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')

此外,如果我在Apple硅机器上构建并尝试在同一台机器上运行Intel版本(使用Rosetta),我会得到以下结果:

mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')

唯一可行的方法是在英特尔机器上构建英特尔应用程序,然后在苹果硅机器上构建arm64应用程序。但是这不是一个选项,因为我需要发布的latest.yml引用,如果我从不同的机器上发布两个不同的发布(最新的一个覆盖了前一个yaml文件),情况就不是这样了。
我尝试将buildDependenciesFromSource: true添加到配置根(如#7349#6623中所述),但没有成功。
注意,我们的应用程序使用内部(专有)本机节点库。如果我从项目中删除这个本机节点库及其用法,一切似乎都很好。
有什么想法吗?
PS:我还在Github上创建了一个issue,因为我不确定它是Electron Builder中的错误还是我这边的错误。

xtupzzrd

xtupzzrd1#

这是由于electron-vite复制了过时版本的库。我刚刚在electron-vite配置中添加了这个:

{
  main: {
    ...
    build: {
      rollupOptions: { external: ["my-native-lib"] },
    },
  },
  ...
  },
}

相关问题