node-keytar icon indicating copy to clipboard operation
node-keytar copied to clipboard

Issue Building Keytar on M1 Mac

Open xkenneth opened this issue 2 years ago • 7 comments

Prerequisites

I could not access the message board. I read through these pre-reqs and they seem more relevant to Atom as a text editor than just to Keytar as a module.

Description

Steps to Reproduce

  1. Add KeyTar to a project with Electron, Webkit, Typescript, etc.

Expected behavior:

I would expect key tar to build and run when installed through NPM/yarn.

Actual behavior:

Some cryptic build error is produced that I am struggling to find out how to get around.

xkenneth@Bandley-M1 decode-lake-stats % yarn start yarn run v1.22.10 $ electron-forge start ✔ Checking your system ✔ Locating Application ⠦ Preparing native dependencies: 0 / 1gyp info find Python using Python version 2.7.16 found at "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python" ⠧ Preparing native dependencies: 0 / 1(node:685) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only. (Use node --trace-deprecation ...` to show where the warning was created) gyp info spawn /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python gyp info spawn args [ gyp info spawn args '/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/node-gyp/gyp/gyp_main.py', gyp info spawn args 'binding.gyp', gyp info spawn args '-f', gyp info spawn args 'make', gyp info spawn args '-I', gyp info spawn args '/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/keytar/build/config.gypi', gyp info spawn args '-I', gyp info spawn args '/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/node-gyp/addon.gypi', gyp info spawn args '-I', gyp info spawn args '/Users/xkenneth/.electron-gyp/13.1.7/include/node/common.gypi', gyp info spawn args '-Dlibrary=shared_library', gyp info spawn args '-Dvisibility=default', gyp info spawn args '-Dnode_root_dir=/Users/xkenneth/.electron-gyp/13.1.7', gyp info spawn args '-Dnode_gyp_dir=/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/node-gyp', gyp info spawn args '-Dnode_lib_file=/Users/xkenneth/.electron-gyp/13.1.7/<(target_arch)/node.lib', gyp info spawn args '-Dmodule_root_dir=/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/keytar', gyp info spawn args '-Dnode_engine=v8', gyp info spawn args '--depth=.', gyp info spawn args '--no-parallel', gyp info spawn args '--generator-output', gyp info spawn args 'build', gyp info spawn args '-Goutput_dir=.' gyp info spawn args ] ⠇ Preparing native dependencies: 0 / 1gyp info spawn make gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] CXX(target) Release/obj.target/keytar/src/async.o ⠹ Preparing native dependencies: 0 / 1In file included from ../src/async.cc:4: In file included from ../../node-addon-api/napi.h:2725: ../../node-addon-api/napi-inl.h:1393:24: error: use of undeclared identifier 'napi_object_freeze' napi_status status = napi_object_freeze(_env, _value); ^ ../../node-addon-api/napi-inl.h:1399:24: error: use of undeclared identifier 'napi_object_seal' napi_status status = napi_object_seal(_env, _value); ^ ⠸ Preparing native dependencies: 0 / 12 errors generated. make: *** [Release/obj.target/keytar/src/async.o] Error 1 ✖ Preparing native dependencies: 0 / 1

An unhandled error has occurred inside Forge: node-gyp failed to rebuild '/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/keytar'. Error: make failed with exit code: 2

Error: node-gyp failed to rebuild '/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/keytar'. Error: make failed with exit code: 2

at ModuleRebuilder.rebuildNodeGypModule (/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/electron-rebuild/src/module-rebuilder.ts:231:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at Rebuilder.rebuildModuleAt (/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/electron-rebuild/src/rebuild.ts:283:5)
at Rebuilder.rebuild (/Users/xkenneth/Work/electron/decode-lake-stats/node_modules/electron-rebuild/src/rebuild.ts:189:9)
at /Users/xkenneth/Work/electron/decode-lake-stats/node_modules/@electron-forge/core/src/util/rebuild.ts:33:5

error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. xkenneth@Bandley-M1 decode-lake-stats % npm test npm ERR! Missing script: "test" npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm run

npm ERR! A complete log of this run can be found in: npm ERR! /Users/xkenneth/.npm/_logs/2021-08-07T20_48_01_486Z-debug.log xkenneth@Bandley-M1 decode-lake-stats % `

Reproduces how often:

Every Time

Versions

Atom : 1.58.0 Electron: 9.4.4 Chrome : 83.0.4103.122 Node : 12.14.1

macOS 11.4

Additional Information

I tried going to the suggest support forum and was met with an HTTP cert error that my browser brought up. I ignored it and still couldn't get to the forum. Any help would be much appreciated.

xkenneth avatar Aug 07 '21 20:08 xkenneth

@xkenneth

Hey, I think you can set asarUnpack in build option.

in your package.json (I use electron-builder to build)

"build": {
    "asarUnpack": "node_modules/keytar"
}

https://github.com/electron-userland/electron-builder/issues/3940#issuecomment-900527250

My versions are as following.

Electron: 13.1.4 Node : v14.15.1 macOS 11.5.2 M1

yuikoito avatar Aug 17 '21 18:08 yuikoito

@xkenneth @yuikoito I have a similar issue, it builds on my M1 mac but runs into an error when the app starts, it says Screenshot from 2021-08-19 11-16-41

Any ideas?

Wizdave97 avatar Aug 19 '21 10:08 Wizdave97

@Wizdave97

Did you do code-sign? I got same error no suitable image found when I forgot to do code sign. So I am not very good at using electron but I assume your problem was happened by code sign.

I used electron-notarize and made notarize.js and wrote as follows.

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: process.env.APP_BUNDLE_ID,
    appPath: `${appOutDir}/${appName}.app`,
    appleId: process.env.APPLEID,
    appleIdPassword: process.env.APPLEIDPASS,
    ascProvider: process.env.ASC_PROVIDER,
  })
}

then set in package.json (I used electron-builder, and if you use another build packager, the code might be changed. But anyway you need to do code sign.)

afterSign: script/notarize.js

yuikoito avatar Aug 19 '21 17:08 yuikoito

@Wizdave97 also, you should add in your plist file

    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>

in package.json

  entitlements: 'entitlements.mac.plist'
  entitlementsInherit: 'entitlements.mac.plist'

When you completely do code-sign and write the above lines in plist file, your app would be work.

yuikoito avatar Aug 19 '21 18:08 yuikoito

@yuikoito I'm working with @Wizdave97

Yes, we have those entitlements. We are code-signing and notarizing. I'm wondering if electron-rebuild is not picking up the binary for some reason.

maccman avatar Sep 02 '21 20:09 maccman

@maccman Hmm.. I see. Are you sure asarUnpack option is working? I don't know about electron-forge but maybe you need to unpack for keytar. Even so if you have still errors, I am sorry but I don't know but maybe you can try electron-builder (This works for me)

yuikoito avatar Sep 03 '21 02:09 yuikoito

Hey this seems to be that the native module has been compiled for x86_64, but actually, it should have been done for arm64e which has got me also into a fix.

jthoma avatar Nov 29 '21 23:11 jthoma