electron mac 打包、分發(fā)流程(dmg & mas)

dmg?包

背景

在一些從沒(méi)有安裝過(guò)此軟件的電腦上安裝未簽名或未公證的?dmg?包時(shí),會(huì)觸發(fā)蘋果的?Gatekeeper,阻止用戶安裝你的?App。

測(cè)試階段可以去設(shè)置->安全與隱私->通用欄目下面點(diǎn)擊仍要打開(kāi),或者設(shè)置安裝選項(xiàng)為允許任何來(lái)源(如果沒(méi)有該選項(xiàng)可以在終端中執(zhí)行?sudo?spctl?--master-disable?)來(lái)解決此問(wèn)題,下面介紹正式包的分發(fā),正式包分發(fā)需要包括?簽名?和?公證?2?個(gè)步驟

簽名

使用?dmg?包分發(fā)的方式需要使用?Developer?ID?Application?的證書(shū)簽名,只簽?.app?文件即可,.dmg?文件不用簽

證書(shū)獲取

下載證書(shū)

在?apple?developer?后臺(tái)下載該證書(shū),若沒(méi)有,則創(chuàng)建一個(gè),只有?Account?Holder?才有權(quán)限創(chuàng)建此類型的證書(shū),也可以通過(guò)其他同學(xué)導(dǎo)出的?p12?文件安裝此證書(shū)

安裝證書(shū)

需將證書(shū)安裝在鑰匙串登錄模塊下

打開(kāi)鑰匙串,切換到登錄,保證當(dāng)前是在登錄欄下,雙擊下載的證書(shū),即可將證書(shū)安裝到登錄模塊下(保證此證書(shū)在鑰匙串中包含密鑰)

使用證書(shū)簽名

使用?electron-builder?的打包方式,內(nèi)置?electron-osx-sign?簽名模塊,不用單獨(dú)運(yùn)行簽名腳本

identity

identity?屬性為?package.json?中?build.mac?下的屬性

- 配置?null,強(qiáng)制不簽名

- 配置?app.com?Inc.?(xxxxxxxx)?,使用鑰匙串中的?app.com?Inc.?(xxxxxxxx)?證書(shū)進(jìn)行簽名

- 不配置?identity?屬性,打包時(shí),electron-builder?會(huì)自動(dòng)去鑰匙串中查找可用的證書(shū)進(jìn)行簽名

證書(shū)類型

上述?identity?的配置不能包含證書(shū)頭部信息,electron-builder?會(huì)根據(jù)環(huán)境配置默認(rèn)拼接,規(guī)則為

此圖為?electron-builder@23.3.2?版本的拼接規(guī)則,不同版本的?electron-builder?規(guī)則有所差異。圖中代碼位置在/node_modules/app-builder-lib/out/macPackager.js

公證

- 在?electron-builder?提供的?afterSign?hook?腳本中寫(xiě)入公證腳本

//?package.json

{??...??"build":?{????...????"afterSign":?"afterSign.js"??}}

- 在?afterSign.js?腳本中,使用?electron-notarize?模塊進(jìn)行公證

這里的?appleId、?appleIdPassword?為團(tuán)隊(duì)中任一有權(quán)限的賬號(hào)即可

appleIdPassword?獲取

登錄?appid,生成你的專用密碼

公證結(jié)果

若公證失敗,命令行?log?或郵箱可以看到失敗的原因

若公證成功,Apple?Developer?會(huì)向你的郵箱發(fā)送公證結(jié)果,此時(shí)就可以放心得分發(fā)你的?dmg?文件給其他人了

mas?包

這里主要講解?mas?包如何打包、簽名。mas?包打完后,生成?.pkg?文件,再通過(guò)?Transporter?等工具上傳的步驟這里不再?gòu)?fù)述

mas?正式包

配置

//?package.json

證書(shū)、profile?獲取

- 使用?Mac?App?Distribution?類型的證書(shū)給?.app?文件簽名使用,此證書(shū)在安裝到鑰匙串后名字可能會(huì)改成“3rd?Party?Mac?Developer?Application”

- 使用?Mac?Installer?Distribution?類型的證書(shū)給?.pkg?文件簽名使用,此證書(shū)在安裝到鑰匙串后名字可能會(huì)改成“3rd?Party?Mac?Developer?Installer”

- 在?developer?后臺(tái)新建一個(gè)?profile、或者使用已經(jīng)創(chuàng)建過(guò)的,關(guān)鍵信息是此?profile?需要與上述?Mac?App?Distribution?證書(shū)相關(guān)聯(lián),此?profile?用于在?package.json?中?mas.provisioningProfile?中配置

簽名

使用?electron-builder?的打包方式,內(nèi)置?electron-osx-sign?簽名模塊,不用單獨(dú)運(yùn)行簽名腳本,electron-builder?會(huì)自動(dòng)尋找鑰匙串中的證書(shū),進(jìn)行簽名。(可查看上述?identity?規(guī)則)

安裝完證書(shū)、配置完?package.json?后,運(yùn)行?electron-builder?build?--mac??構(gòu)建?mas?包

注意!!上圖為?electron-builder@23.3.2?版本尋找?3rd?Party?的證書(shū),低版本可能會(huì)尋找?Apple?Distribution?的證書(shū),解決方案為升級(jí)?electron-builder?版本,或手動(dòng)修改?/node_modules/app-builder-lib/out/macPackager.js?最下面的代碼,Apple?Distribution?->?3rd?Party?Mac?Developer?Application

腳本執(zhí)行完畢,簽名成功后,生成?.pkg?包(electron-builder?會(huì)自動(dòng)查找?3rd?Party?Mac?Developer?Installer?證書(shū)給?.pkg?文件簽名,若本地沒(méi)有此證書(shū),命令行會(huì)報(bào)錯(cuò)),用于上傳?App?Store?Connect

mas-dev?測(cè)試包

配置

證書(shū)、profile?獲取

- 構(gòu)建?mas-dev?包的方式需要使用?Mac?Developer?類型的證書(shū),供簽名使用

- 在?developer?后臺(tái)新建一個(gè)?profile、或者使用已經(jīng)創(chuàng)建過(guò)的,關(guān)鍵信息是此?profile?需要與上述?Mac?Developer?證書(shū)相關(guān)聯(lián),此?profile?用于在?package.json?中?masDev.provisioningProfile?中配置

簽名

使用?electron-builder?打包、簽名,運(yùn)行?electron-builder?build?--mac??構(gòu)建?mas-dev?包

腳本執(zhí)行完畢,簽名成功后,生成?.app?文件用于測(cè)試

設(shè)備綁定

此時(shí),打開(kāi)?.app?文件可能會(huì)崩潰,還需要在?develop?后臺(tái)中綁定測(cè)試設(shè)備

Device?ID(UUID)在關(guān)于本機(jī)->概覽->系統(tǒng)報(bào)告->硬件->硬件UUID?獲取

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容