Electron-forge:安全添加 appleId 和密码

问题描述 投票:0回答:3

我正在尝试使用 electro-forge 打包我的电子应用程序。为了使应用程序在 Mac 上可用,我需要对应用程序进行协同设计,这需要在 package.json 文件中传递 appleId 和应用程序特定密码等信息。

我如何安全地传递这些信息?(即下载应用程序的人无法使用)

如果环境变量是可行的方法,我希望了解在哪里设置环境变量(在单独的文件中?在启动命令中?)以及如何在 package.json 本身中访问它们。

如果有任何帮助来解决这个问题,我将不胜感激。


我考虑过的细节:

-Electron Forge codesign 文档 没有提及如何以安全的方式实际提供 osx 所需的详细信息。它确实提到它在底层使用了电子公证(以及其他),并且电子公证的文档说:“永远不要将密码硬编码到打包脚本中,至少使用环境变量”,但没有提供有关如何执行此操作的详细信息。

-此堆栈溢出answer提供了有关设置单独的

forge.config.js
文件的有用信息,然后说您应该“使用process.env.YOUR_VARIABLE_NAME加载环境变量”。它没有提供更多细节——加载打包应用程序的环境变量是我在这里试图弄清楚的。

--这个堆栈溢出answer提到手动设置它们,但没有提到如何设置。它还提到使用 dotenv 包——但令我惊讶的是,此任务需要一个单独的包,这对于任何 mac 电子应用程序来说都是基础。

electron electron-forge
3个回答
4
投票

我将它们存储在项目目录中的

.env
文件中,如下所示:

APPLEID=your_id
APPLEIDPASS=your_password

package.json
我有一个部分:

  "build": {
    "productName": "PRODUCT",
    "appId": "your app id",
    "copyright": "Copyright",
    "directories": {
      "output": "build"
    },
    "afterSign": "scripts/notarize.js",

afterSign
指向脚本
scripts/notarize.js
,它将使用
APPLEID
拉出
APPLEIDPASS
dotenv

require('dotenv').config()
const { notarize } = require('electron-notarize')

exports.default = async function notarizing(context) {
  const { electronPlatformName, appOutDir } = context
  if (electronPlatformName !== 'darwin') {
    return
  }

  const appName = context.packager.appInfo.productFilename;

  return await notarize({
    appBundleId: 'your app id',
    appPath: `${appOutDir}/${appName}.app`,
    appleId: process.env.APPLEID,
    appleIdPassword: process.env.APPLEIDPASS
  })
}

最后两行

appleId
appleIdPassword
提取了环境变量。

切勿将

.env
文件提交到 github 等地方。为了确保:将
.env
添加到您的
.gitignore
文件中。另外:
script/notarize.js
应用程序不是您应用程序本身的一部分,它在您构建应用程序时运行。


0
投票

我已经收到了一位 Electron Forge 维护者的回复,他说这样做的方法是:

  • 在构建脚本本身中加载环境变量。例如:

    $ VAR1=something VAR2=somethingelse npm run make

  • 然后,在 package.json 引用的 forge.config.js 文件中适当引用这些变量。参考语法示例:

    process.env.VAR1


0
投票

您可以在

forge.config.ts
文件中注明。

const { utils: { fromBuildIdentifier } } = require('@electron-forge/core');

module.exports = {
  buildIdentifier: process.env.IS_BETA ? 'beta' : 'prod',
  packagerConfig: {
    appBundleId: fromBuildIdentifier({ beta: 'com.beta.app', prod: 'com.app' })
  }
};

本文档会很有帮助:https://www.electronforge.io/config/configuration#build-identifiers

© www.soinside.com 2019 - 2024. All rights reserved.