最近公司在做Electron桌面端項目,我負責macOS端打包上傳到Mac App Store的工作。
期間卡了2天沒有進展,今天總算搞定了,記錄一下整個的操作過程。
因為我之前只做過Cordova Xcode 的打包上傳,並沒有Electron 的上傳經驗,很多知識點和流程都是現去理解的。
當有些名詞不理解的時候,無論看中文還是看英文的文檔,其實都跟看天書一樣,特別的酸爽。
希望這次通過我自己的理解也可以幫到需要的人。
首先說明一下:
這里所有的操作流程都是針對2020年之前有效,之后Apple和Electron的變化可能並不完全適用,僅供參考。
知識背景的參考鏈接及說明:
首先你需要一個開發者賬號,
可以用自己蘋果手機的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:
登錄自己的Apple ID, 在Security一欄中,生成 APP-SPECIFIC PASSWORDS,用來 驗證/上傳pkg文件到Mac App Store時所需的密碼
准備工作7:
當時上傳過程中報錯沒有找到512*512和512*512@x2的圖標,這里重新生成一下所需的 icon.icns
注意必須是icns類型的圖標。方法可參考一下鏈接
至此,所以准備工作就都可以了。
--------------------------------------------------------
使用electron build 打包應用,
electron-build 工具的 相關配置也是看了好多遍才弄明白,
在Apple Store上傳masOS App 需要 pkg 擴展名文件,
這里我們選擇 MAS 類型打包,
截個圖,列下來我在package.json里的配置
打包的時候需要code signing, 指定 CSC_NAME = "公司的證書名", 這樣就能綁定到部署用的證書了。
打包好的pkg需要做一些針對electron特有的 entitlement 添加和 sandbox 配置,
具體方法參見官網
如果還是不清楚,下面這個文章對我很有幫助,強烈建議大家點進去按步驟操作
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發來的郵件。