构建MacOS应用小白教程(打包 签名 公证 上架)

news2025/2/27 2:58:23

打包

package.json中,dependencies会被打进 Electron 应用的包里,而devDependencies则不会,所以必要的依赖需要放到dependencies中。files中定义自己需要被打进 Electron 包里的文件。以下是一个完整的 mac electron-builder的配置文件。

const base = {
  appId: 'com.xxxx.xxxx', 
  productName: 'Electron 打包模版', // 应用名称,安装后的应用就是名称
  icon: './media/images/icon.ico',
  files: [  // 除了package.json中dependencies外,另外需要打包的文件添加到此处
    'main.js',
    'bundles',
    'updater/win/index.html',
    'updater/build/bootstrap.js',
    'updater/mac/Updater.js',
    'updater/mac/index.html'
  ],
  publish: { // 需要结合 const { autoUpdater } = require('electron-updater'); 使用
    provider: 'generic', // 指定服务器类型,generic 通用服务器,也可以是 github 等
    url: '' // 线上服务器地址
  },
  mac: {
    target: [  // 需要打包出的类型
      "dmg",
      "zip",
      "pkg",
      "mas"
    ],
    icon: 'media/images/icon.icns',
    hardenedRuntime: true,
    entitlements: 'electron-builder/entitlements.plist',  // 申请可以操作系统权利
    entitlementsInherit: 'electron-builder/entitlements.plist',
    provisioningProfile: 'electron-builder/comalibabaslobs.provisionprofile'
  },
  pkg: {
    isRelocatable: false,
    overwriteAction: "upgrade",
  },
  mas: {
    icon: 'media/images/icon.icns',
    hardenedRuntime: true,
    entitlements: 'electron-builder/entitlements.mas.plist',
    entitlementsInherit: 'electron-builder/entitlements.mas.plist',
  },
  dmg: {
    background: 'media/images/dmg-bg.png',
    icon: 'media/images/icon.icns',
    iconSize: 100,
    sign: false,
    contents: [ // mac 会有拖动图标安装的过程,这里配置图标的位置、大小、拖动的文件夹
      {
        x: 112,
        y: 165,
      },
      {
        type: 'link',
        path: '/Applications',
        x: 396,
        y: 165,
      },
    ],
  },
  extraMetadata: {  // 打包线上应用,控制变量为 production,此设置会直接在打包的 package.json 中加入 env这个变量,并且把值设置为 production。可以在文件中引用 const pjson = require('./package.json');  此时 pjson.env 等于 'production'
    env: 'production',
  }
};

module.exports = base;

签名

  • Electron 签名 & 认证 macOS 版本 官方文档
  • 苹果开发者申请证书地址

MacOS 10.15 之前,应用如果没有进行签名,首次打开的时候就会出现“恶意软件”提示。

1. 加入开发者

加入 Apple Developer Program(需要缴纳年费)

如果是管理员,会看到可以申请 Developer ID Application,如果不是管理员就会像我这种,看到是灰色的。Electron 打包是需要用这个身份生成证书的。

2. 生成签名证书

如果有管理员权限,点击生成新的证书。

Choose File 里面的文件从哪里来?打开 mac 的钥匙串访问 -> 证书助理 -> 从证书颁发机构请求证书,这里生成了 CertificateSigningRequest.certSigningRequest 的文件,这个文件可以被多次用来生成 mac 证书。

填写必要信息,用户邮箱填写你的 app开发者邮箱,常用名称随便取一个,然后选择保存到本地磁盘。

3. 安装签名证书

上次文件后就生成证书了,下载证书安装。如果出现了次证书不受信任的情况,在列表中双击证书,将使用此证书时更改为始终信任。

如果安装的证书不对,会出现 Command failed: codesign ...

4. 证书导出 p12 给其它人使用

在 mac 的钥匙串访问中,找到证书,然后 右键 -> 导出证书,一般导出 .p12 形式,然后输入证书安装的密码。其它人拿着你的证书,告诉他安装密码即可安装。

5. 不要 Developer ID Application 签名证书,不影响 Electron 应用打包

在打包过程中,找不到 Developer ID Application 签名证书的情况下,会跳过处理。但是应用不签名和公证会影响electron-autoupdater 自动更新能下载无法打开,用户首次打开会提示恶意软件,应用无法上架到appStore。

公证

MacOS 10.14.5 之后,应用如果没有进行公证(将安装包上传到 Apple 审查),首次打开的时候就会出现更严重的“恶意软件”提示。没有进行过公证也无法上传到 Apple Store 中提供给其他人下载。

代码公证 

const { notarize } = require('electron-notarize');
notarize({
  appPath: '',          // 应用的路径 xxx.app 结尾的 
  appBundleId: '',      // appid
  appleId: '',          // 苹果开发者 id
  appleIdPassword: '',  // 应用专用密码
  ascProvider: ''       // 证书提供者
})
  • appPath打包后应用的路径,.app 或者 .dmg 结尾。

  • appBundleId 跟 Electron-builder 配置的 appId 一致,这个 appId 要妥善命名。不要发布应用以后再修改,不然会导致应用无法自动更新。比较好的命名一般都是 com.xxx(公司名).xxx(应用英文名)

  1. 苹果开发者的账号 appleId,填写自己的开发者id 就可以,确保自己是属于开发者。应用专用密码 appleIdPassword,登录 appleid.apple.com/account/man…

这个密码生成后只会出现一次,之后再也没办法看到,所有请保存下来。如果忘记了密码,就重新创建一个,为方便管理不用的密码进行删除后重新创建比较合适。

 

  1. ascProvider 证书的提供者,通过 mac 钥匙串访问查看。你所有使用的签名证书,括号里面的就是证书提供者。
  2. 公证会把程序压缩包上传到 apple 服务器,保证网络通畅。公证成功后,开发者邮箱会收到邮件。
  3. notarize {}后面是绝对的json结构,不要出现这些是单引号的情况,不然会报错。 appPathappBundleIdappleIdPasswordascProvider

命令行工具公证

需要下载 xcode

  1. 一句话命令公证
    xcrun altool --notarize-app --primary-bundle-id "com.xxx.xxx" --username "your developer appleid" --password "appleId-password" --asc-provider "ProviderShortname" -t osx --file xxx.dmg
    

 

2.ascProvider 证书的提供者命令行查询

xcrun altool --list-providers -u "apple id" -p "appleIdPassword(应用专用密码)”

3. 公证成功后

No errors uploading 'xxxxxxx-xxxx.dmg'.
RequestUUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

上架 AppStore 商店

Electron 应用如果要能发到 appStore,需要 electron-builder 构建 mas(Mac应用商店),经过签名公证后上传到 app store connect,上传之前应用需要支持sandbox。

注册AppId

在 electron-builder 配置的 appId,无论写什么我们都是可以打包配置成功的,因为不涉及到发到 appStore。如果需要发到 appStore,就需要到 apple 开发者官网中去申请一个正式的了。

https://juejin.cn/post/7009179524520738824 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.4 网络概念(分层、TCP)

网络层与传输层概述 网络层: 抽象概念:网络层是基于 IP 的抽象概念,与数据链路层用 MAC 地址标记设备不同。MAC 地址是一种具体化的概念,绑定于所在的物理网络,而 IP 地址可以是固定的,也可以通过路由动态…

【JetPack】Room数据库笔记

Room数据库笔记 ORM框架&#xff1a;对齐数据库数据结构与面向对象数据结构之间的关系&#xff0c;使开发编程只考虑面向对象不需要考虑数据库的结构 Entity : 数据实体&#xff0c;对应数据库中的表 <完成面向对象与数据库表结构的映射> 注解&#xff1a; 类添加注解…

基于前端技术UniApp和后端技术Node.js的电影购票系统

文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…

大模型微调---Lora微调实战

目录 一、前言二、LoRA实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、LoRA微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 LoRA是一种参数高效的微调技术&#xff0c;通过低秩转换对大型语言模型进行适应性更新&#xff0c;减少…

centos7下docker 容器实现redis主从同步

1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…

SLAAC如何工作?

SLAAC如何工作&#xff1f; IPv6无状态地址自动配置(SLAAC)-常见问题 - 苍然满关中 - 博客园 https://support.huawei.com/enterprise/zh/doc/EDOC1100323788?sectionj00shttps://www.zhihu.com/question/6691553243/answer/57023796400 主机在启动或接口UP后&#xff0c;发…

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…

【从零开始入门unity游戏开发之——C#篇21】C#面向对象的封装——`this`扩展方法、运算符重载、内部类、`partial` 定义分部类

文章目录 一、this扩展方法1、扩展方法的基本语法2、使用扩展方法3、扩展方法的注意事项5、扩展方法的限制6、总结 二、运算符重载1、C# 运算符重载2、运算符重载的基本语法3. 示例&#xff1a;重载加法运算符 ()4、使用重载的运算符5、支持重载的运算符6、不能重载的运算符7、…

C语言:文件IO

C语言&#xff1a;文件IO 文件操作 概述 什么是文件 文件是保存在外存储器&#xff08;一般代指磁盘&#xff0c;U盘&#xff0c;移动硬盘等&#xff09;的数据的集合 文件操作体现在哪几个方面 文件内容的读取文件内容的写入 数据的读取和写入可被视为针对文件进行输入&…

时间序列异常值处理方法

文章目录 一、删除法二、替换法三、插值法四、滑动窗口五、基于模型的替换 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 时间序列预测算法—Prophet 时间序列分类任务—tsfresh python时间序列处理 有季节效应的非平稳序列分析 时间序列异常值检测方法 时间序列…

【报错】node:internal/modules/cjs/loader:936

报错问题&#xff1a; 当执行npm run dev后&#xff0c;出现下面错误 这个错误一般是由于Node.js无法找到所需的模块而引起的&#xff0c;解决此问题的一种方法就是重新安装所需的模块。 解决办法&#xff1a; 删除npm install 所下载在项目里的node_modules文件执行操作&…

故障诊断 | 一个小创新:特征提取+KAN分类

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

javac 编译java文件源码 怎么生成 ast语法树 步骤详解

在 javac 中&#xff0c;编译源代码并生成抽象语法树&#xff08;AST&#xff09;是一个多步骤的过程&#xff0c;涉及从源码解析到最终生成字节码。以下是详细步骤&#xff0c;描述了如何使用 javac 编译源码并生成 AST。 1. 准备源文件 javac 首先需要源文件。这些源文件是…

人工智能入门是先看西瓜书还是先看花书?

在人工智能入门时&#xff0c;关于先看《机器学习》&#xff08;西瓜书&#xff09;还是先看《深度学习》&#xff08;花书&#xff09;的问题&#xff0c;实际上取决于个人的学习目标和背景。 《机器学习》&#xff08;西瓜书&#xff09;由周志华教授撰写&#xff0c;是一本…

Linux 安装Nginx 并配置启动 (已实测)

文章目录 一、安装Nginx二、配置 Nginx 为系统服务 一、安装Nginx 安装依赖&#xff0c;确保Nginx编译和运行正常&#xff0c;打开终端执行以下命令 yum install -y wget gcc-c pcre-devel zlib-devel openssl-devel下载Nginx # 例如&#xff0c;下载Nginx 1.24.0版本 wget …

Linux 下的 GPT 和 MBR 分区表详解

文章目录 Linux 下的 GPT 和 MBR 分区表详解一、分区表的作用二、MBR&#xff08;Master Boot Record&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 三、GPT&#xff08;GUID Partition Table&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 四…

10. 虚拟机VMware Workstation Pro下共享Ubuntu和Win11文件夹

本文记录当前最新版虚拟机VMware Workstation Pro&#xff08;2024.12&#xff09;如何在win11下共享文件&#xff0c;以实现Windows与Ubuntu互传文件的目的。 1. 创建共享文件夹 1.1 先关闭虚拟机的客户机&#xff0c;打开虚拟机设置 1.2 在虚拟机设置界面找到“选项”->“…

有哪些免费的 ERP 软件可供选择?哪些 ERP 软件使用体验较好?

想找个 “免费” 的 ERP 软件&#xff1f; 咱得知道&#xff0c;ERP 那可是涉及财务、人力、供应链、采购、销售等好多方面的重要企业软件。功能这么全&#xff0c;能免费才怪呢&#xff01;真要是有免费的&#xff0c;早就火遍大江南北&#xff0c;说不定把市场都垄断了&…

2024 年的科技趋势

2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步&#xff0c;未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django

windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …