記錄 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