记录 Electron 应用(macOS)上传到Mac APP Store的经历,以及商店之外的证书认证


最近公司在做Electron桌面端项目,我负责macOS端打包上传到Mac App Store的工作。

期间卡了2天没有进展,今天总算搞定了,记录一下整个的操作过程。

 

因为我之前只做过Cordova Xcode 的打包上传,并没有Electron 的上传经验,很多知识点和流程都是现去理解的。

当有些名词不理解的时候,无论看中文还是看英文的文档,其实都跟看天书一样,特别的酸爽。

希望这次通过我自己的理解也可以帮到需要的人。

首先说明一下:

这里所有的操作流程都是针对2020年之前有效,之后Apple和Electron的变化可能并不完全适用,仅供参考。

 

知识背景的参考链接及说明:

https://developer.apple.com/

首先你需要一个开发者账号,

可以用自己苹果手机的Apple ID,

让公司的apple account管理员把你加进去,设置成app manager角色

这样你就可以自己生成Electron所需的企业版 certificates, identifiers 和 provisioning profile.

 

准备工作1:

Electron 上传App Store 需要创建4种类型的证书

Mac Installer Distribution :负责安装应用时认证

Mac App Distribution:负责上传App Store时认证,注:因为属于第三方应用,此证书无法在Xcode Account 中添加生成,我是在Apple Developer的平台创建的 

Distribution:负责本地部署打包时签名(code singing)使用

Development:  为防止意外打包时找不到相关证书,最好也生成一下

其中Mac App Distribution 证书需要手动下载了安装到 Mac 的 keychain中。

最终效果如下:

 

 准备工作2:

创建AppID,其实就是Identifier, 用来唯一标识你的APP,格式一般为 com.公司名.APP名

 

准备工作3:

创建provisioning profile, 这个可以理解为证书和设备的一个关联文件,打包的时候也会用到。创建的时候需要选择对应的appID

 

准备工作4:

在左侧 membership 菜单中找到 公司的 Team ID, 存下来备用

到此,Apple Developer平台的准备工作就告一段落了

--------------------------------------------------------

https://appstoreconnect.apple.com/login

登录Apple的APP商店管理平台,这里的角色权限(App Manager)是和Apple Developer同步的。

 

准备工作5:

点击 + 号,创建要上传的应用信息,

选择AppID, 也叫BundleID, Identifier ID,就是之前 “ 准备工作2” 我们创建好的,

填写对应相关信息,效果如下:

 

准备工作6:

https://appleid.apple.com/

登录自己的Apple ID, 在Security一栏中,生成 APP-SPECIFIC PASSWORDS,用来 验证/上传pkg文件到Mac App Store时所需的密码

 

 

 

 

准备工作7:

当时上传过程中报错没有找到512*512和512*512@x2的图标,这里重新生成一下所需的 icon.icns

注意必须是icns类型的图标。方法可参考一下链接

https://stackoverflow.com/questions/12306223/how-to-manually-create-icns-files-using-iconutil/20703594#20703594

至此,所以准备工作就都可以了。

--------------------------------------------------------

https://www.electron.build/

使用electron build 打包应用,

electron-build 工具的 相关配置也是看了好多遍才弄明白,

在Apple Store上传masOS App 需要 pkg 扩展名文件,

这里我们选择 MAS 类型打包,

截个图,列下来我在package.json里的配置

 

打包的时候需要code signing, 指定 CSC_NAME = "公司的证书名", 这样就能绑定到部署用的证书了。

打包好的pkg需要做一些针对electron特有的 entitlement 添加和 sandbox 配置,

具体方法参见官网

https://www.electronjs.org/docs/tutorial/mac-app-store-submission-guide#mac-app-store-submission-guide

如果还是不清楚,下面这个文章对我很有帮助,强烈建议大家点进去按步骤操作
https://webspaceteam.com/electron/how-to-publish-an-electron-application-to-mac-app-store

大概意思就是创建几个plist文件, 替换为自己的TeamID( "准备工作4" )和BundleID

通过bash脚本去修改打包后文件里面的几个plist,然后重新生成pkg文件包

最终command line效果如下:

---------------------------------------------------------

 

https://help.apple.com/app-store-connect/#/devb1c185036

这是最后一步了,需要把修改后的打包文件验证并上传到app store connect,

使用的工具是

命令行 xcode altool:https://help.apple.com/asc/appsaltool/

或者 下载图形用户工具:https://help.apple.com/itc/transporter/

这里我用的是xcode altool,

需要注意的是 --validate-app 参数验证时报错说找不到 iOS App,

因为我们的是 macOS App, 所以直接使用  --upload-app 参数,也会进行验证,有问题会报错,没问题就上传成功了。

注意:这里的参数 -p 是"准备工作6" 中生成的 APP-SPECIFIC PASSWORDS

Command line效果如下

刚上传完需要等1-2分钟后才能在App store connect 看到结果:

最终效果在App store connect 如下:

 

怎么处理 Missing Compliance

在选择完build包之后,商店平台会弹出4个问题让你回答。

1:Does your app use encryption? 

     选Yes,指是否用https做数据传输

2:Does your app qualify for any of the exemptions provided in Category 5, Part 2 of the U.S. Export Administration Regulations?

     选 NO,没有自定义的密码学

3:Does your app implement any encryption algorithms that are proprietary or not accepted as standards by international standard bodies (IEEE, IETF, ITU, etc.)? 

     选NO,没有自定义算法,除非是银行类软件

4:  Does your app implement any standard encryption algorithms instead of, or in addition to, using or accessing the encryption within Apple’s operating system? 

    选NO, 美国的规则有个例外,如果只用https调用就不需要

之后点确定,就可以解决那个警告了。

 

 -------------------------------------------------

后续更新:在公司官网下载dmg文件,安装到电脑时提示“恶意软件”的解决方法。

这个问题的根源是没有做证书认证,notarized。

登陆 https://developer.apple.com/account/

添加一个Developer ID Applecation 类型的证书

此证书的作用是在Apple Store之外下载时需绑定的证书,如果没有,安装时就会提示“恶意软件”

此证书需要Account Holder权限才能生成,我是让公司主管帮忙生成的。

拿到证书后双击就可以导入到keychain, 效果如下:

 

下一步就可以按照官网提供的electron notarized 方法去解决了。

链接如下:

https://kilianvalkhof.com/2019/electron/notarizing-your-electron-application/

步骤这里简单说一下:

1.创建plist文件

2. 创建脚本,使用"electron-notarize" 模块,对你的APP进行证书认证

注意:这里的密码是 "准备工作6" 中生成的 APP-SPECIFIC PASSWORDS 

3.增加 build config

 

4. 最后,在dmg 对象中添加 sign: false

"dmg": { "sign": false },

 

这样,再次运行打包脚本,

如果一切设置正常,

你的APP就不会报“恶意软件”了。

同时还会收到一封Apple发来的邮件。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM