本指南提供以下相關(guān)資訊:
要為 Electron 應(yīng)用簽名,則必須首先安裝下列應(yīng)用:
您還必須注冊(cè)一個(gè)蘋果開發(fā)者帳戶,并加入 蘋果開發(fā)者計(jì)劃。
Electron應(yīng)用可以通過 Mac 應(yīng)用商店或其外部進(jìn)行發(fā)布。 每種方式都需要不同的簽名和測(cè)試方法。 本指南側(cè)重于通過 Mac 應(yīng)用商店進(jìn)行發(fā)布,也會(huì)提及其他方法。
以下步驟描述了如何從 Apple 獲得證書,如何對(duì)Electron應(yīng)用程序進(jìn)行簽名以及如何測(cè)試它們。
獲得簽名證書的最簡單方法是使用 Xcode:
“Apple Development”證書用于在Apple Developer網(wǎng)站上注冊(cè)的計(jì)算機(jī)上簽署用于開發(fā)和測(cè)試的應(yīng)用程序。 注冊(cè)方法會(huì)在 準(zhǔn)備配置文件 中描述。
帶有"Apple Development"證書簽名的應(yīng)用無法提交到Mac 應(yīng)用商店。 為此,應(yīng)用程序必須使用"Apple Distribution"證書進(jìn)行簽名。 但請(qǐng)注意,使用"Apple Distribution"證書簽名的應(yīng)用程序不能直接運(yùn)行,它們必須由 Apple 重新簽名才能運(yùn)行,也就是只有從 Mac 應(yīng)用商店下載后才能運(yùn)行。
您可以注意到還有其他類型的證書。
"Developer ID Application"證書用于將應(yīng)用發(fā)布到Mac 應(yīng)用商店以外的地方之前簽名。
"Deceloper ID Installer"和"Mac Installer Distribution"證書用于簽署 Mac 安裝程序包,而不是應(yīng)用程序本身。 大多數(shù)Electron應(yīng)用不使用Mac Installer Package,因此通常不需要它們。
完整的證書類型列表可以在這里找到。
使用 "Apple Development" 和 "Apple Distribution" 證書簽名的應(yīng)用程序只能在 App Sandbox下運(yùn)行, 所以他們必須使用Electron 的 MAS 構(gòu)建。 然而,“Developer ID Application”證書沒有這個(gè)限制,因此,用其簽名的應(yīng)用既可以使用普通構(gòu)建也可以使用 Electron 的 MAS 構(gòu)建。
Apple在過去幾年中一直在更改證書的名稱,您可能會(huì)在閱讀舊文檔時(shí)遇到這些證書,并且一些工具仍然在使用舊名稱。
如果您想在將應(yīng)用提交給Mac App Store之前在本地機(jī)器上測(cè)試您的應(yīng)用, 您必須使用"Apple Development"證書簽名該應(yīng)用,并在程序包中嵌入配置文件。
要 創(chuàng)建一個(gè)配置文件,您可以按照以下步驟:
/path/to/yourapp.provisionfile
。提交到 Mac App Store 的應(yīng)用程序必須在 Apple App Sandbox下運(yùn)行, 并且只有Electron的 MAS 構(gòu)建可以使用App Sandbox 運(yùn)行。 在 App Sandbox 下運(yùn)行時(shí),Electron 的標(biāo)準(zhǔn) darwin 構(gòu)建將無法啟動(dòng)。
當(dāng)使用 @electron/osx-sign
對(duì)應(yīng)用程序進(jìn)行簽名時(shí),它會(huì)自動(dòng)將必要的權(quán)限添加到您的應(yīng)用程序的權(quán)限中,但如果您使用自定義權(quán)限,則必須確保添加了應(yīng)用沙盒能力:
<?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">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
如果您在不使用 @electron/osx-sign
的情況下簽署應(yīng)用程序,則必須確保應(yīng)用程序包的權(quán)限至少具有以下密鑰:
<?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">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>TEAM_ID.your.bundle.id</string>
</array>
</dict>
</plist>
TEAM_ID
應(yīng)替換為 Apple 開發(fā)者帳戶的Team ID,your.bundle.id
應(yīng)替換為應(yīng)用的App ID。
以下權(quán)限必須添加到應(yīng)用程序包的二進(jìn)制程序和助手中:
<?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">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
應(yīng)用程序包的 Info.plist
必須包含 ElectronTeamID
鍵,其值為你的 Apple 開發(fā)者團(tuán)隊(duì)ID:
<plist version="1.0">
<dict>
...
<key>ElectronTeamID</key>
<string>TEAM_ID</string>
</dict>
</plist>
使用 @electron/osx-sign
時(shí),將通過從證書名稱中提取團(tuán)隊(duì) ID 來自動(dòng)添加 ElectronTeamID
密鑰。 如果@electron/osx-sign
找不到正確的團(tuán)隊(duì) ID,則可能需要你手動(dòng)添加此鍵 。
要對(duì)可以在您的開發(fā)機(jī)器上運(yùn)行的應(yīng)用程序進(jìn)行簽名,您必須使用“Apple Development”證書對(duì)其進(jìn)行簽名,并將配置文件傳遞給 @electron/osx-sign
。
electron-osx-sign YourApp.app --identity='Apple Development' --provisioning-profile=/path/to/yourapp.provisionprofile
如果您在沒有 @electron/osx-sign
的情況下進(jìn)行簽名,則必須將配置文件放入 YourApp.app/Contents/embedded.provisionprofile
。
簽名的應(yīng)用程序只能在通過配置文件注冊(cè)的機(jī)器上運(yùn)行,這是在提交到 Mac App Store 之前測(cè)試簽名的應(yīng)用程序的唯一方法。
要對(duì)將提交到 Mac App Store 的應(yīng)用程序進(jìn)行簽名,您必須使用“Apple Distribution”證書對(duì)其進(jìn)行簽名。 請(qǐng)注意,使用此證書簽名的應(yīng)用程序?qū)o法在任何地方運(yùn)行,除非它是從 Mac App Store 下載的。
electron-osx-sign YourApp.app --identity='Apple Distribution'
如果您不打算將應(yīng)用程序提交到 Mac App Store,您可以簽署“開發(fā)者 ID 申請(qǐng)”證書。 這樣對(duì) App Sandbox 沒有要求,如果你不使用 App Sandbox,你應(yīng)該使用 Electron 的普通 darwin 構(gòu)建。
electron-osx-sign YourApp.app --identity='Developer ID Application' --no-gatekeeper-assess
通過傳遞 --no-gatekeeper-assess
,@electron/osx-sign
將跳過 macOS GateKeeper 檢查,因?yàn)槟膽?yīng)用程序通常尚未經(jīng)過此步驟的公證。
本指南不涉及App Notarization,但您可能希望這樣做,否則Apple 可能會(huì)阻止用戶在Mac App Store 之外使用您的應(yīng)用程序。
使用“Apple Distribution”證書簽署應(yīng)用程序后,您可以繼續(xù)將其提交到 Mac App Store。
但是,本指南并不能確保您的應(yīng)用會(huì)獲得 Apple 的批準(zhǔn); 您仍然需要閱讀 Apple 的提交您的應(yīng)用程序指南,了解如何滿足 Mac App Store 的要求。
應(yīng)該使用Apple Transporter將已簽名的應(yīng)用程序上傳到App Store Connect進(jìn)行處理,并確保上傳之前已經(jīng)創(chuàng)建記錄。
如果您看到類似私有 API 使用的錯(cuò)誤,您應(yīng)該檢查應(yīng)用程序是否使用了 Electron 的 MAS 構(gòu)建。
在上傳后,您應(yīng)提交您的應(yīng)用以待審核
為了讓你的應(yīng)用滿足沙箱的所有條件,在 MAS 構(gòu)建的時(shí)候,下面的模塊已被禁用:
crashReporter
?autoUpdater
?并且下面的行為也改變了:
此外,由于應(yīng)用沙盒的使用,應(yīng)用程序可以訪問的資源受到嚴(yán)格限制;您可以閱讀 應(yīng)用沙盒 ,了解更多信息。
根據(jù)您的應(yīng)用使用的 Electron API,您可能需要在應(yīng)用的權(quán)限文件中添加額外的權(quán)限。 否則,App Sandbox 可能會(huì)阻止您使用它們。
啟用傳出的網(wǎng)絡(luò)連接,允許你的應(yīng)用程序連接到服務(wù)器:
<key>com.apple.security.network.client</key>
<true/>
啟用傳入的網(wǎng)絡(luò)連接,讓你的應(yīng)用程序打開網(wǎng)絡(luò) socket 監(jiān)聽:
<key>com.apple.security.network.server</key>
<true/>
有關(guān)更多 詳細(xì)信息,請(qǐng)參閱啟用網(wǎng)絡(luò)訪問文檔。
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
有關(guān)更多詳細(xì)信息,請(qǐng)參閱"啟用訪問用戶選擇的文件"文檔。
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
有關(guān)更多詳細(xì)信息,請(qǐng)參閱"啟用訪問用戶選擇的文件"文檔。
根據(jù)你發(fā)布應(yīng)用所在的國家或地區(qū),你可能需要提供您軟件使用的加密算法的信息。 更多信息,請(qǐng)參閱 加密導(dǎo)出合規(guī)性文檔 。
Electron 使用下列加密算法:
更多建議: