electron 电子伪造:安全地添加appleId和密码

bd1hkmkf  于 2022-12-16  发布在  Electron
关注(0)|答案(2)|浏览(405)

我正在尝试用electron-forge打包我的电子应用程序,为了让它在mac上可用,我需要对它进行协同设计,这需要在package.json文件中传递appleId和app-specific-password等信息。

如何安全地传递此信息?(即下载应用程序的用户无法使用此信息)

如果要使用环境变量,我希望了解在哪里设置环境变量(在单独的文件中?在start命令中?)以及如何在package.json中访问它们。
如果能帮我解决这个问题我会很感激的。
我考虑的细节:

  • 电子伪造codesign documentation没有提到如何以安全的方式提供osx所需的细节,但它提到了它使用电子公证(除其他外)的引擎盖下,电子公证的documentation说:“永远不要将密码硬编码到打包脚本中,至少使用环境变量”,但没有提供如何做到这一点的细节。
  • 这个堆栈溢出answer提供了关于设置一个单独的forge.config.js文件的有用信息,然后说你应该“使用process.env.YOUR_VARIABLE_NAME加载你的环境变量”。它没有提供更多的细节--加载打包应用的环境变量是我在这里试图弄清楚的。
    --这个堆栈溢出answer提到手动设置,但没有提到如何设置,它还提到使用dotenv package--但我很惊讶这个任务需要一个独立的包,而这个包对任何mac electron应用程序来说都是基础。
z0qdvdin

z0qdvdin1#

我将它们存储在项目目录下的.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,该脚本将使用dotenv拉出APPLEIDAPPLEIDPASS

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
  })
}

最后两行appleIdappleIdPassword用于提取环境变量。
例如,不要将.env文件提交到github。将.env添加到您的.gitignore文件中。另外:script/notarize.js应用程序不是应用程序本身的一部分,它在您构建应用程序时运行。

rjzwgtxy

rjzwgtxy2#

我已经从一个电子锻造的维护者那里得到了回复,他说这样做的方法是:

  • 在生成脚本本身中加载环境变量。例如:$ VAR1=something VAR2=somethingelse npm run make .
  • 然后,在package.json引用的forge.config.js文件中引用这些变量。引用语法示例:process.env.VAR1

相关问题