返回 Skill 列表
extension
分类: 开发与工程无需 API Key

electron-release

指导Electron应用程序的发布过程,包括构建、代码签名、公证以及支持自动更新的GitHub发布。在发布Electron应用、创建DMG安装包、设置自动更新或解决公证问题时使用。

person作者: jakexiaohubgithub

Electron Release Guide

Complete release workflow for Electron applications with auto-update support.

Supported Configurations

| Stack | Platform | Build Type | Status | |-------|----------|------------|--------| | Vite + electron-builder | macOS | Local | ✅ Documented | | Other configurations | - | - | 📝 To be added |

Quick Start (macOS + Vite + electron-builder)

# 1. Build with notarization
APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac

# 2. Rename ZIPs (GitHub converts spaces to dots)
cp "dist/App Name-X.Y.Z-arm64-mac.zip" "dist/App-Name-X.Y.Z-arm64-mac.zip"
cp "dist/App Name-X.Y.Z-mac.zip" "dist/App-Name-X.Y.Z-mac.zip"

# 3. Create release with ALL files
gh release create vX.Y.Z \
  dist/latest-mac.yml \
  "dist/App-Name-X.Y.Z-arm64-mac.zip" \
  "dist/App-Name-X.Y.Z-mac.zip" \
  dist/app-name-X.Y.Z-arm64.dmg \
  dist/app-name-X.Y.Z-x64.dmg \
  --title "vX.Y.Z" --notes "Release notes..."

Complete Workflow

Phase 1: Pre-Release

  1. Update version in package.json
  2. Commit version bump:
    git add package.json
    git commit -m "chore(release): bump version to X.Y.Z"
    git push origin main
    

Phase 2: Build

  1. Build with notarization:

    APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac
    

    | Env Var | Purpose | |---------|---------| | APPLE_KEYCHAIN_PROFILE | Keychain profile for notarization | | Alternative: APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_ID | Direct credentials |

  2. Verify build output:

    ls -la dist/*.dmg dist/*.zip dist/*.yml
    

    Expected files:

    • latest-mac.yml - Auto-update metadata
    • App Name-X.Y.Z-arm64-mac.zip - ARM64 update payload
    • App Name-X.Y.Z-mac.zip - x64 update payload
    • app-name-X.Y.Z-arm64.dmg - ARM64 installer
    • app-name-X.Y.Z-x64.dmg - x64 installer

Phase 3: Prepare Release Assets

  1. Rename ZIP files (critical for auto-update):

    # GitHub converts spaces to dots, but latest-mac.yml expects hyphens
    cp "dist/App Name-X.Y.Z-arm64-mac.zip" "dist/App-Name-X.Y.Z-arm64-mac.zip"
    cp "dist/App Name-X.Y.Z-mac.zip" "dist/App-Name-X.Y.Z-mac.zip"
    
  2. Verify latest-mac.yml URLs match renamed files:

    cat dist/latest-mac.yml
    # Check that 'url:' entries match your renamed ZIP filenames
    

Phase 4: GitHub Release

  1. Create release with all required files:

    gh release create vX.Y.Z \
      dist/latest-mac.yml \
      "dist/App-Name-X.Y.Z-arm64-mac.zip" \
      "dist/App-Name-X.Y.Z-mac.zip" \
      dist/app-name-X.Y.Z-arm64.dmg \
      dist/app-name-X.Y.Z-x64.dmg \
      --title "vX.Y.Z" \
      --notes "$(cat <<'EOF'
    ## What's Changed
    - Feature 1
    - Bug fix 2
    EOF
    )"
    
  2. Verify release assets:

    gh release view vX.Y.Z --json assets --jq '.assets[].name'
    

Required Files for Auto-Update

| File | Purpose | Missing = | |------|---------|-----------| | latest-mac.yml | Version + SHA512 hashes | "No updates available" | | *-arm64-mac.zip | ARM64 update payload | Download fails on M1/M2/M3 | | *-mac.zip | x64 update payload | Download fails on Intel | | *.dmg | Manual download | No manual install option |

Common Mistakes

| Mistake | Symptom | Fix | |---------|---------|-----| | DMG only, no ZIP | Auto-update silently fails | Upload all ZIP files | | Missing latest-mac.yml | "No updates available" | Upload latest-mac.yml | | Wrong ZIP filename | Download error | Rename to match latest-mac.yml URLs | | No notarization env var | Gatekeeper blocks app | Set APPLE_KEYCHAIN_PROFILE | | Spaces in filename | 404 on download | Rename: spaces → hyphens |

Troubleshooting

"Download error" on auto-update

# Check if filenames match
cat dist/latest-mac.yml | grep url:
gh release view vX.Y.Z --json assets --jq '.assets[].name'
# URLs in yml must exactly match asset names

"No updates available"

# Verify latest-mac.yml is uploaded
gh release view vX.Y.Z --json assets --jq '.assets[].name' | grep yml

Gatekeeper blocks app

# Rebuild with notarization
APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac
# Check build log for "notarization successful"

electron-builder.yml Reference

mac:
  target:
    - target: dmg
      arch: [arm64, x64]
    - target: zip
      arch: [arm64, x64]
  notarize: true
  hardenedRuntime: true

publish:
  provider: github
  owner: your-org
  repo: your-repo

Success Criteria

  • [ ] Build completes with "notarization successful"
  • [ ] All 5 files uploaded to GitHub Release
  • [ ] ZIP filenames match latest-mac.yml URLs exactly
  • [ ] Test: older version detects update
  • [ ] Test: download and install succeeds