macOS용으로 Electron 어플리케이션의 서명(code signing)·공증(notarization)을 한다

Electron 애플리케이션의 macOS 버전을 배포하는 데는 두 가지 방법이 있습니다.

1) Mac App Store
2) 인터넷에서 직접 배포 (예 : GitHub release에 파일 업로드)

2)의 방법으로 배포하는 경우, 서명(code signing) 및 공증(notarization)이 필요합니다. 이 기사에서는 실제로 Electron 애플리케이션을 출시한 경험을 바탕으로 필요한 설정에 대해 설명합니다.

전제



내가 개발한 Electron 어플리케이션( Photo Location Map )에서는, 다음의 상태·조건으로부터, 릴리스를 향해 서명·공증에 필요한 설정을 했습니다.
  • electron-builder를 사용하여 dmg 생성
  • dmg를 직접 인터넷에 배포한다. (Mac App Store가 아닙니다.)
  • GitHub Releases 에 publish 하는 설정으로 하고 있습니다.


  • 서명·공증 없는 경우



    서명·공증 없는 경우, 인터넷상에서 다운로드한 어플리케이션을 기동하려고 하면, 다음의 메세지가 나오고, 기동할 수 없습니다.



    또, 서명의 설정을 하고 있지 않은 경우, electron-builder로 빌드시( electron-builder build )에, skipped macOS application code signing 라고 메세지가 나옵니다.
      • electron-builder  version=21.2.0 os=19.0.0
      • loaded configuration  file=/Users/Tomoyuki/Documents/GitRepo/GitHub/photo-location-map/electron-builder.json
      • writing effective config  file=release/builder-effective-config.yaml
      • packaging       platform=darwin arch=x64 electron=7.0.0 appOutDir=release/mac
      • skipped macOS application code signing  reason=cannot find valid "Developer ID Application" identity or custom non-Apple code signing certificate, see https://electron.build/code-signing 
    

    서명 설정하기



    우선 서명이 필요합니다. 서명을 위해서는 다음 두 가지가 필요합니다.
  • Apple Developer Program에 등록한다.
  • Xcode에서 Developer ID Application을 작성합니다.

  • Developer ID Application은 Xcode를 시작하고 Preferences에서 다음 이미지와 같이 만들 수 있습니다. 도중, Apple ID의 유저명・패스워드를 입력하는 팝업이 나오므로, Apple Developer Program 등록시에 붙인 Apple ID를 사용합니다.







    Developer ID Application을 작성한 후에는 electron-builder에서 빌드 시에 "Developer ID Application을 사용하여 sign했다"라는 메시지가 나오게 됩니다.
      • electron-builder  version=21.2.0 os=19.0.0
      • loaded configuration  file=/Users/Tomoyuki/Documents/GitRepo/GitHub/photo-location-map/electron-builder.json
      • writing effective config  file=release/builder-effective-config.yaml
      • packaging       platform=darwin arch=x64 electron=7.0.0 appOutDir=release/mac
      • signing         file=release/mac/Photo Location Map.app identityName=Developer ID Application: Tomoyuki Aota 
    

    서명이 끝나고 공증이 없는 경우



    서명되고 공증이 없는 경우 인터넷에서 다운로드한 응용 프로그램을 시작하려고 하면 다음 메시지가 표시되고 시작할 수 없습니다.



    공증 설정



    공증의 방법에 대해서는, 다음 페이지를 참고로 했습니다.
    Notarizing your Electron application | Kilian Valkhof

    내가 개발중인 응용 프로그램에서는 다음과 같은 변경이 필요했습니다.
    htps : // 기주 b. 코 m/토모 유키 아오타/p

    Apple ID와 App Specific Password를 지정해야 하지만 환경 변수에 저장하도록 했습니다.
    htps : // 기주 b. 코 m / 토모 유키 아오타 / p 호토 ぉ 카치 온 마 p / 푸 l / 192 / 후 ぇ s # ぢ f 55db2099c7 a0 et f7f93007 또는 fse 6c7 ebR24-R25
        appleId: process.env.APPLE_ID, 
        appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD,
    

    공증은 5-10분 정도 걸립니다. 공증이 끝나면 Apple에서 메일이 옵니다.


    그런 다음 공증 결과를 확인하는 스크립트를 넣어두면 편리합니다. 공증에 시간이 걸리는 경우 등의 조사에 도움이 됩니다. ( Notary Service가 떨어짐 일이 있거나 합니다. ) 터미널에서는 xcrun altool --notarization-history 0 -u ${appleId} -p ${appSpecificPassword} 제 경우에는 이전의 변경 중에서 ${appleId}라는 스크립트를 준비했습니다.

    서명되고 공증된 경우



    인터넷에서 다운로드한 응용 프로그램을 시작하면 다음 팝업이 나타납니다. 애플리케이션을 시작할 수 있습니다.



    결론



    공증은 macOS 10.14.5 및 macOS 10.15에서 필수로 간주됨 그래서 2019년 11월 현재 필요한 작업과 라이브러리( electron-notarize ) 관련 설정 등 아직 유동적인 면이 있습니다. 그러므로, 이 기사에 쓰여지고 있는 것에 가세해, 최신의 정보를 쫓도록(듯이) 유의하면 좋다고 생각합니다.

    좋은 웹페이지 즐겨찾기