如何在应用商店发布 Electron 应用?

tpi*_*chu 5 javascript macos xcode electron electron-builder

我已将应用程序打包为 mas 文件以上传到 App Store。但

  1. 从 Xcode 11 开始,它们不再提供应用程序加载器
  2. Electron 不生成 XCode 项目。

在这种情况下,最好的解决方案是什么?

tpi*_*chu 11

1. 我们需要在 developer.apple.com 上生成证书,并且还需要导入到我们的钥匙串中。

  • 苹果开发证书
  • 苹果发行证书
  • Mac App 分发证书(用于公证)
  • Mac 安装程序分发证书(用于公证)
  • (3rd Party) Developer ID 申请证书(用于发布到应用商店)
  • (第 3 方)开发者 ID 安装程序证书(用于发布到应用商店)

在此处输入图片说明

然后您需要从应用商店连接下载您的应用的配置文件。(把它放在任何你想去的地方,但需要在配置中指出这一点)

您可以在此处找到创建和下载应用程序的配置文件https://developer.apple.com/account/resources/profiles/list

2.需要配置你的electron-builder.这里是配置。

{
    "productName": "your product",
    "appId": "com.my.first.app", //which can be found on your app store connect
    "directories": {
        "buildResources": "buildResources",
        "output": "release"
    },
    "files": ["main.js", "node_modules", "build" ], // include other necessary resources.
    "mac": {
        "type": "distribution",
        "target": ["mas", "pkg", "dmg"],
        "artifactName": "${productName}-${version}-${os}.${ext}",
        "category": "public.app-category.utilities",
        "provisioningProfile": "embedded.provisionprofile"
    },
    "mas": {
        "hardenedRuntime" : false, //IMPORTANT!!!!
        "type": "distribution",
        "category": "public.app-category.utilities",
        "entitlements": "build/entitlements.mas.plist",
        "entitlementsInherit": "build/entitlements.mas.inherit.plist"
    },
}
Run Code Online (Sandbox Code Playgroud)

构建/entitlements.mas.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.application-groups</key>
        <string>[prefix (on your app store connect)].[app bundleID EX: com.desktop.app]</string>
        <key>com.apple.security.cs.allow-jit</key>
        <true/>
        <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
        <true/>
        <key>com.apple.security.cs.allow-dyld-environment-variables</key>
        <true/>
    </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

构建/entitlements.mas.inherit.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.inherit</key>
        <true/>
    </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

(因为这个权限列表是基本的,你可以根据自己的需要进行配置,但上面一个是发布应用商店的必填项。特别是,sand-box必须按照苹果的要求设置)

运行后,npm run build这意味着 (electron-builder .) Electron-builder 将生成mas, mac,pkg然后

3. 将应用程序上传到 Mac App Store。我用过TransporterMac App Store 上提供的。(正如我之前提到的问题。从 Xcode11 开始,它们不再支持应用程序加载器)

重要提示:Electron-builder 已修复 v22.5.0 的签名问题,因此您需要使用更高版本。

最后,这是与当前电子构建器配合良好的项目结构。 在此处输入图片说明

参考:

https://medium.com/@jondot/shipping-electron-apps-to-mac-app-store-with-electron-builder-e960d46148ec

https://github.com/electron/electron-osx-sign/issues/188

https://github.com/electron/electron/issues/22656

希望对你有帮助~

(不幸的是:当启用沙箱时,应用程序停止工作。Electron 团队正在处理这个任务。所以相信这会很快解决。https://github.com/electron/electron/issues/24936

  • 有这方面的更新吗?Electron这边还存在阻塞问题吗? (3认同)