macOS 开发 - Notarization 公证你的 Developer ID 应用

本文详细介绍了macOS开发中的Notarization公证过程,包括使用Xcode和终端命令进行公证的步骤,以及遇到的问题和解决方案。公证是确保应用安全性的必要步骤,特别是对于10.15及以上版本的macOS。文中还提到了Gatekeeper门禁机制,以及Rootless和SIP的相关信息,为开发者提供了完整的安全设置指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、Notarization 公证 简介

相关新闻:
https://developer.apple.com/cn/news/?id=09032019a

10.15 上,新下载的应用如果没有经过公证,将无法使用。(gatekeeper 将会弹窗提示:“无法打开 xxx ,因为无法检查其是否包含恶意软件”)。此前已安装的应用还可以使用。
2020 年1月后,已安装的应用如果没有公证,也无法使用。

公证


关于Notarization 机制的由来和原理,这篇文章写得很好了,大家可以去阅读:《嘶吼RoarTalk:所有开发人员都注意了!苹果将正式采用Notarization机制》

### 使用 `electron-builder` 打包生成 `.pkg` 文件的配置教程 #### 1. 安装依赖 为了使用 `electron-builder` 来构建 macOS 的 `.pkg` 文件,首先需要安装必要的工具和库。可以通过以下命令来安装: ```bash npm install electron-builder --save-dev ``` 如果目标是 macOS 平台,则还需要安装一些额外的依赖项用于签名和公证 (Notarization),这些步骤对于 macOS 应用程序发布到 App Store 或通过 Gatekeeper 认证至关重要。 --- #### 2. 配置 `package.json` 在项目的根目录下找到 `package.json` 文件,并添加或修改 `build` 字段以支持 `.pkg` 文件的生成。以下是典型的配置示例: ```json { "name": "your-app-name", "version": "1.0.0", "main": "main.js", "scripts": { "build": "electron-builder" }, "build": { "appId": "com.yourcompany.appname", // 替换为您的应用ID "mac": { "target": [ "pkg" // 指定为目标格式 .pkg ], "category": "public.app-category.developer-tools", // 可选的应用类别 "icon": "assets/icon.icns" // 图标路径 }, "files": [ "dist/**/*", // 主应用程序文件夹 "!**/*.ts", // 排除 TypeScript 原始文件 "!node_modules/**/{test,__tests__,jest,babel,test-utils}/**" // 排除非生产环境模块 ] } } ``` 上述配置中的字段解释如下: - **`appId`**: 设置唯一的应用 ID,通常遵循反向域名命名法。 - **`mac.target`**: 显式指定要生成的目标文件类型(此处为 `.pkg`)。 - **`files`**: 列出需要包含或排除的文件/文件夹模式[^1]。 --- #### 3. 创建图标资源 `.pkg` 文件通常需要一个自定义图标 (`icns`) 格式的图像作为应用标志。可以利用在线转换器或将 PNG 转换成 ICNS 格式。完成后将其放置于项目中指定的位置(如 `assets/icon.icns`),并在 `package.json` 中引用该路径。 --- #### 4. 构建流程 运行以下命令即可触发打包过程: ```bash npm run build ``` 此操作会读取 `package.json` 中的 `build` 配置部分,并按照设定好的规则生成最终产物——即 `.pkg` 文件。默认情况下,输出会被保存至 `dist/mac` 子目录内[^1]。 --- #### 5. 签名与公证 (可选) 针对 macOS 用户体验优化以及安全合规性考虑,建议完成以下两项附加设置: ##### a) 应用签名 确保已获取 Apple Developer Program 提供的有效证书,并将其导入 Mac 设备上的钥匙串访问工具。接着调整 `package.json` 如下所示: ```json "mac": { ... "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "entitlements.mac.plist", "entitlementsInherit": "entitlements.mac.inherit.plist", "identity": "Developer ID Application: Your Name (ABCDEF123)" // 替代为您自己的开发者身份字符串 }, ``` 其中提到的两个 plist 文件需自行创建并填充相关内容,主要涉及权限声明等内容[^2]。 ##### b) Notarization 自动化提交 启用远程验证服务进一步增强安全性,只需补充参数即可让 builder 处理整个事务链路: ```json "afterSign": "./notarize.sh", "osxNotarize": { "appleId": "youremail@apple.com", "appleIdPassword": "@keychain:APP_PASSWORD_KEYCHAIN_ITEM_NAME", "ascProvider": "TEAM_ID_OR_SHORT_NAME" } ``` 注意这里引入了一个外部脚本负责实际调用苹果 API;同时推荐存储敏感数据的方式采用 Keychain Access 工具而非明文硬编码形式暴露密码信息[^2]。 --- #### 总结 综上所述,借助 `electron-builder` 实现跨平台桌面端软件分发变得异常简便高效,尤其当专注于 macOS 生态圈时更是如此。只要合理规划初始阶段的各项准备工作,就能顺利产出高质量的产品交付物 [.pkg][^1]. 问题
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富婆E

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值