Electron Mac App Store 應用程序提交指南

2023-02-16 17:16 更新

本指南提供以下相關資訊:

  • 如何在 macOS 上為 Electron 應用簽名;
  • 如何在 Mac App Store (MAS) 上提交 Electron 應用;
  • 對于 MAS 構建版本的局限性。

要求?

要為 Electron 應用簽名,則必須首先安裝下列應用:

您還必須注冊一個蘋果開發(fā)者帳戶,并加入 蘋果開發(fā)者計劃。

為 Electron 應用簽名?

Electron應用可以通過 Mac 應用商店或其外部進行發(fā)布。 每種方式都需要不同的簽名和測試方法。 本指南側重于通過 Mac 應用商店進行發(fā)布,也會提及其他方法。

以下步驟描述了如何從 Apple 獲得證書,如何對Electron應用程序進行簽名以及如何測試它們。

獲取證書?

獲得簽名證書的最簡單方法是使用 Xcode:

  1. 打開Xcode并打開“帳戶”首選項;
  2. 使用您的 Apple 帳戶登錄;
  3. 選擇一個團隊并單擊"管理證書";
  4. 在簽名證書表的左下角,單擊添加按鈕 (+),并添加以下證書:
    • "Apple Development"
    • "Apple Distribution"

“Apple Development”證書用于在Apple Developer網站上注冊的計算機上簽署用于開發(fā)和測試的應用程序。 注冊方法會在 準備配置文件 中描述。

帶有"Apple Development"證書簽名的應用無法提交到Mac 應用商店。 為此,應用程序必須使用"Apple Distribution"證書進行簽名。 但請注意,使用"Apple Distribution"證書簽名的應用程序不能直接運行,它們必須由 Apple 重新簽名才能運行,也就是只有從 Mac 應用商店下載后才能運行。

其它證書?

您可以注意到還有其他類型的證書。

"Developer ID Application"證書用于將應用發(fā)布到Mac 應用商店以外的地方之前簽名。

"Deceloper ID Installer"和"Mac Installer Distribution"證書用于簽署 Mac 安裝程序包,而不是應用程序本身。 大多數(shù)Electron應用不使用Mac Installer Package,因此通常不需要它們。

完整的證書類型列表可以在這里找到。

使用 "Apple Development" 和 "Apple Distribution" 證書簽名的應用程序只能在 App Sandbox下運行, 所以他們必須使用Electron 的 MAS 構建。 然而,“Developer ID Application”證書沒有這個限制,因此,用其簽名的應用既可以使用普通構建也可以使用 Electron 的 MAS 構建。

傳統(tǒng)證書名稱

Apple在過去幾年中一直在更改證書的名稱,您可能會在閱讀舊文檔時遇到這些證書,并且一些工具仍然在使用舊名稱。

  • “Apple Distribution”證書也叫做“3rd Party Mac Developer Application”和“Mac App Distribution”。
  • “Apple Development”證書也叫做“Mac Developer”和“Development”。

準備配置配置文件?

如果您想在將應用提交給Mac App Store之前在本地機器上測試您的應用, 您必須使用"Apple Development"證書簽名該應用,并在程序包中嵌入配置文件。

要 創(chuàng)建一個配置文件,您可以按照以下步驟:

  1. Apple Developer 網站上打開"證書、標識符 & 配置文件"頁面。
  2. 在“標識符”頁面為您的應用添加一個新的App ID。
  3. 在"設備"頁面中注冊本地計算機。 您可以在"系統(tǒng)信息"應用的"硬件"頁面中找到機器的"設備 ID"。
  4. 在“Profiles”頁面注冊一個新的配置文件,然后下載到 /path/to/yourapp.provisionfile。

啟用Apple的應用沙箱?

提交到 Mac App Store 的應用程序必須在 Apple App Sandbox下運行, 并且只有Electron的 MAS 構建可以使用App Sandbox 運行。 在 App Sandbox 下運行時,Electron 的標準 darwin 構建將無法啟動。

當使用 @electron/osx-sign 對應用程序進行簽名時,它會自動將必要的權限添加到您的應用程序的權限中,但如果您使用自定義權限,則必須確保添加了應用沙盒能力:

<?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的額外步驟

如果您在不使用 @electron/osx-sign 的情況下簽署應用程序,則必須確保應用程序包的權限至少具有以下密鑰:

<?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 應替換為 Apple 開發(fā)者帳戶的Team ID,your.bundle.id 應替換為應用的App ID。

以下權限必須添加到應用程序包的二進制程序和助手中:

<?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>

應用程序包的 Info.plist 必須包含 ElectronTeamID 鍵,其值為你的 Apple 開發(fā)者團隊ID:

<plist version="1.0">
<dict>
  ...
  <key>ElectronTeamID</key>
  <string>TEAM_ID</string>
</dict>
</plist>

使用 @electron/osx-sign 時,將通過從證書名稱中提取團隊 ID 來自動添加 ElectronTeamID 密鑰。 如果@electron/osx-sign找不到正確的團隊 ID,則可能需要你手動添加此鍵 。

簽署應用程序以進行開發(fā)

要對可以在您的開發(fā)機器上運行的應用程序進行簽名,您必須使用“Apple Development”證書對其進行簽名,并將配置文件傳遞給 @electron/osx-sign。

electron-osx-sign YourApp.app --identity='Apple Development' --provisioning-profile=/path/to/yourapp.provisionprofile

如果您在沒有 @electron/osx-sign 的情況下進行簽名,則必須將配置文件放入 YourApp.app/Contents/embedded.provisionprofile。

簽名的應用程序只能在通過配置文件注冊的機器上運行,這是在提交到 Mac App Store 之前測試簽名的應用程序的唯一方法。

簽署應用程序以提交到 Mac App Store?

要對將提交到 Mac App Store 的應用程序進行簽名,您必須使用“Apple Distribution”證書對其進行簽名。 請注意,使用此證書簽名的應用程序將無法在任何地方運行,除非它是從 Mac App Store 下載的。

electron-osx-sign YourApp.app --identity='Apple Distribution'

為在 Mac App Store 之外分發(fā)的應用程序簽名?

如果您不打算將應用程序提交到 Mac App Store,您可以簽署“開發(fā)者 ID 申請”證書。 這樣對 App Sandbox 沒有要求,如果你不使用 App Sandbox,你應該使用 Electron 的普通 darwin 構建。

electron-osx-sign YourApp.app --identity='Developer ID Application' --no-gatekeeper-assess

通過傳遞 --no-gatekeeper-assess,@electron/osx-sign 將跳過 macOS GateKeeper 檢查,因為您的應用程序通常尚未經過此步驟的公證。

本指南不涉及App Notarization,但您可能希望這樣做,否則Apple 可能會阻止用戶在Mac App Store 之外使用您的應用程序。

將應用程序提交到 Mac App Store?

使用“Apple Distribution”證書簽署應用程序后,您可以繼續(xù)將其提交到 Mac App Store。

但是,本指南并不能確保您的應用會獲得 Apple 的批準; 您仍然需要閱讀 Apple 的提交您的應用程序指南,了解如何滿足 Mac App Store 的要求。

上傳

應該使用Apple Transporter將已簽名的應用程序上傳到App Store Connect進行處理,并確保上傳之前已經創(chuàng)建記錄

如果您看到類似私有 API 使用的錯誤,您應該檢查應用程序是否使用了 Electron 的 MAS 構建。

提交審核?

在上傳后,您應提交您的應用以待審核

MAS 構建限制?

為了讓你的應用滿足沙箱的所有條件,在 MAS 構建的時候,下面的模塊已被禁用:

  • ?crashReporter?
  • ?autoUpdater?

并且下面的行為也改變了:

  • 一些視頻采集功能無效。
  • 某些輔助功能無法訪問。
  • 應用無法檢測 DNS 變化。

此外,由于應用沙盒的使用,應用程序可以訪問的資源受到嚴格限制;您可以閱讀 應用沙盒 ,了解更多信息。

附加授權?

根據(jù)您的應用使用的 Electron API,您可能需要在應用的權限文件中添加額外的權限。 否則,App Sandbox 可能會阻止您使用它們。

網絡訪問?

啟用傳出的網絡連接,允許你的應用程序連接到服務器:

<key>com.apple.security.network.client</key>
<true/>

啟用傳入的網絡連接,讓你的應用程序打開網絡 socket 監(jiān)聽:

<key>com.apple.security.network.server</key>
<true/>

有關更多 詳細信息,請參閱啟用網絡訪問文檔。

dialog.showOpenDialog

<key>com.apple.security.files.user-selected.read-only</key>
<true/>

有關更多詳細信息,請參閱"啟用訪問用戶選擇的文件"文檔

dialog.showSaveDialog

<key>com.apple.security.files.user-selected.read-write</key>
<true/>

有關更多詳細信息,請參閱"啟用訪問用戶選擇的文件"文檔

Electron 使用的加密算法

根據(jù)你發(fā)布應用所在的國家或地區(qū),你可能需要提供您軟件使用的加密算法的信息。 更多信息,請參閱 加密導出合規(guī)性文檔 。

Electron 使用下列加密算法:


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號