当前位置: 首页 > news >正文

如何将 Electron 项目上架 Apple Store

前言

Electron 是一个开源框架,它允许开发者使用 Web 技术(HTMLCSSJavaScript)来构建跨平台的桌面应用程序。

Electron 应用程序可以运行在 WindowsmacOSLinux 上,为用户提供了一种统一的方式来开发和维护软件。

本文将探讨如何将 Electron 构建的桌面应用程序上架到 App Store 中。

创建证书

进入苹果开发者平台

https://developer.apple.com/account

进入证书列表:

创建证书(Certificates)

Certificates 用于对需要上架应用进行签名

创建 Apple DevelopmentApple Distribution 两个证书。

Apple Development 证书用于在 Apple Developer 网站上注册的计算机上签署用于开发和测试的应用程序。

注册方法会在准备配置文件中描述。

带有 Apple Development 证书签名的应用无法提交到 Mac 应用商店。

为此,应用程序必须使用 Apple Distribution 证书进行签名。

但请注意,使用 Apple Distribution 证书签名的应用程序不能直接运行,它们必须由 Apple 重新签名才能运行,也就是只有从 Mac 应用商店下载后才能运行。

创建&上传证书签名请求

在启动台中找到“钥匙串访问”

在“常用名称”栏位中,输入密钥的名称。

将“CA 电子邮件地址”栏位留空。

选择“存储到磁盘”,然后点按“继续”,将证书保存到本地即可。

回到刚才创建证书的页面,选择刚刚生成的 CSR 文件

至此 Apple Development 的证书创建完成

用同样的方式再创建好 Apple Distribution 证书

创建ID(identifier)

identifier 应用的唯一标识

注册开发设备

获取开发设备id:设置->通用->关于本机->系统报告

进入设备管理页面添加设备

分两次将你设备的 UDIDUUID 填入 Device ID 中(特别是m1以上的机型,一定需要分两次填写)

安装证书

打开 Apple PKI,下载以下的证书并安装

https://www.apple.com/certificateauthority/

如果已有则跳过此步骤

创建provisioning profile

每个应用需要创建两个 provisionprofile,分别是 developmentdistribution,后续如果证书、设备、应用Id有任何变更都要到这里来更新 profile

创建 development 时请记得勾选全部的设备。

创建 distribution 时要选择 Apple Distribution 的证书。

profile 生成完下载到项目文件夹下,然后双击安装 development 描述文件,并且必须安装上。

申请 DevelopmentDistribution 各自的 profile 文件

注意,下载 profile 后记得双击安装 development 描述文件

xcode相关操作

进入 xcode 设置,点击 Settings->Accounts,登录你的开发者账号,点击右下角 Download Manual Profiles,此时会将你开发者账号中的 profiles 全部更新到 xcode 中。

每次在 apple developer 中新增 provisioning profile 都要到这里点击 Download Manual Profiles,否则你的 Transporter 将无法上传应用到 Mac App Store

点击 Manage Certificates ,确保里面有最开始配置的 certificates ,主要是 Mac DevelopentMac App Distribution 证书。

打包应用

1、创建 entitlements.mas.plist 文件

此文件用来记录和声明应用的权限,这里的权限最终会被合并到 info.plist 文件中。

如果苹果审核人员对应用提出审核意见,大概率就需要调整这个文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JDBC API详解二
  • 基于SSM和VUE的药品管理系统(含源码+sql+视频导入教程+文档)
  • 解锁全球机遇:澳大利亚服务器租用市场的独特魅力
  • 音视频入门基础:WAV专题(9)——FFmpeg源码中计算WAV音频文件每个packet的duration和duration_time的实现
  • 网络原理(3)—— 应用层、传输层(TCP)
  • Redis 是否存在线程安全问题:深入解析与技术分析
  • Robust Image Denoising through Adversarial Frequency Mixup
  • “他人笑我太疯癫,我笑他人看不穿“,关于做知识分享,被Diss,哇哦,真厉害
  • MongoDB 的适用场景
  • SM7015非隔离电磁炉/电饭煲电源芯片12V/18V输出
  • Java设计模式之责任链模式详细讲解和案例示范
  • 1.初识ChatGPT:AI聊天机器人的革命(1/10)
  • 一段代码搞懂String被final修饰的影响
  • 【UI】element ui table(表格)expand实现点击一行展开功能
  • 【Moveit2官方教程】使用 MoveIt Task Constructor (MTC) 框架来定义和执行一个机器人任务
  • JS 中的深拷贝与浅拷贝
  • @angular/forms 源码解析之双向绑定
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 0基础学习移动端适配
  • CSS中外联样式表代表的含义
  • Javascript弹出层-初探
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • laravel with 查询列表限制条数
  • leetcode388. Longest Absolute File Path
  • Making An Indicator With Pure CSS
  • MD5加密原理解析及OC版原理实现
  • node和express搭建代理服务器(源码)
  • Phpstorm怎样批量删除空行?
  • Python学习笔记 字符串拼接
  • SpriteKit 技巧之添加背景图片
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • vue中实现单选
  • 初探 Vue 生命周期和钩子函数
  • 多线程事务回滚
  • 关于for循环的简单归纳
  • 官方解决所有 npm 全局安装权限问题
  • 面试遇到的一些题
  • 漂亮刷新控件-iOS
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 用element的upload组件实现多图片上传和压缩
  • 原生js练习题---第五课
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • #ifdef 的技巧用法
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (14)Hive调优——合并小文件
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C语言)字符分类函数
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)图像的%2线性拉伸
  • (一)使用Mybatis实现在student数据库中插入一个学生信息