Electron

Mac App Store提交指南 | Mac App Store Submission Guide

Mac App Store Submission Guide

自v0.34.0以来,Electron允许将打包的应用程序提交给Mac App Store(MAS)。本指南提供以下信息:如何提交您的应用程序以及MAS构建的限制。

注意:将应用程序提交给Mac App Store需要注册需要花费的Apple开发人员计划。

如何提交您的应用程序

以下步骤介绍了一种将您的应用程序提交到Mac App Store的简单方法。但是,这些步骤不能确保您的应用程序将获得Apple的批准; 您仍然需要阅读Apple的“ 提交您的应用程序指南”,了解如何满足Mac App Store的要求。

获得证书

要将您的应用提交到Mac App Store,您首先必须从Apple获得证书。您可以在网上按照这些现有指南

获取团队ID

在签署您的应用程序之前,您需要知道您的帐户的团队ID。要找到您的团队ID,请登录Apple开发人员中心,然后单击边栏中的成员身份。您的团队ID出现在团队名称下的“成员信息”部分。

签署你的应用

完成准备工作后,您可以按照应用程序分发对应用程序进行打包,然后继续对应用程序进行签名。

首先,您必须为ElectronTeamID您的应用程序添加一个密钥,该密钥的值为您的Info.plist团队ID:

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

然后,您需要准备两个权利文件。

child.plist*

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

parent.plist*

<?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> <string>TEAM_ID.your.bundle.id</string> </dict> </plist>

您必须替换TEAM_ID您的团队ID,然后替换your.bundle.id为您的应用的Bundle ID。

然后使用以下脚本签署您的应用程序:

#!/bin/bash # Name of your app. APP="YourApp" # The path of your app to sign. APP_PATH="/path/to/YourApp.app" # The path to the location you want to put the signed package. RESULT_PATH="~/Desktop/$APP.pkg" # The name of certificates you requested. APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)" INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)" # The path of your plist files. CHILD_PLIST="/path/to/child.plist" PARENT_PLIST="/path/to/parent.plist" FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/" codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$APP_PATH/Contents/MacOS/$APP" codesign -s "$APP_KEY" -f --entitlements "$PARENT_PLIST" "$APP_PATH" productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"

如果您刚接触macOS下的应用程序沙盒,则还应该阅读Apple的启用应用程序沙盒以获得基本想法,然后为您的应用程序所需的权限添加密钥到授权文件。

除了手动签名您的应用,您还可以选择使用electron-osx-sign模块来完成这项工作。

签署原生模块

你的应用中使用的原生模块也需要签名。如果使用electron-osx-sign,请确保在参数列表中包含构建的二进制文件的路径:

electron-osx-sign YourApp.app YourApp.app/Contents/Resources/app/node_modules/nativemodule/build/release/nativemodule

另请注意,本地模块可能会生成不应包含的中间文件(因为它们也需要进行签名)。如果您在版本8.1.0之前使用electron-packager,请添加--ignore=.+\.o$到构建步骤以忽略这些文件。版本8.1.0和更高版本默认忽略这些文件。

上传您的应用

签名应用程序后,您可以使用Application Loader将其上传到iTunes Connect进行处理,确保您在上传之前创建了一条记录

提交您的应用程序进行审查

完成这些步骤后,您可以提交您的应用进行审核

MAS构建的限制

为了满足应用程序沙箱的所有要求,以下模块已在MAS构建中被禁用:

  • crashReporter

  • autoUpdater

并且以下行为已被更改:

  • 视频采集可能无法用于某些机器。

  • 某些辅助功能可能无法使用。

  • 应用程序不会知道DNS更改。

此外,由于应用沙盒的使用,应用可以访问的资源受到严格限制,你可以阅读应用程序沙箱了解更多信息。

其他权利

根据您的应用使用哪种电子API,您可能需要为parent.plist文件添加额外的权利,以便能够从您的应用的Mac App Store构建中使用这些API。

网络访问

启用传出网络连接以允许您的应用连接到服务器:

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

启用传入网络连接以允许您的应用打开网络监听套接字:

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

有关更多详细信息,请参阅启用用户所选文件访问文档

已知的问题

shell.openItem(filePath)

当应用程序签署在Mac App Store中分发时,这将失败。订阅#9005获取更新。

解决方法

shell.openExternal('file://' + filePath) 只要扩展程序与已安装的应用程序相关联,就会在默认应用程序中打开该文件。

Electron密码算法

根据您所在的国家和地区,Mac App Store可能需要记录您的应用中使用的加密算法,甚至要求您提交美国加密注册(ERN)批准副本。

Electron使用以下密码算法:

  • ECDSA-ANS X9.62-2005

  • ECDH-ANS X9.63-2001

  • IDEA - X. Lai的“关于分组密码的设计和安全性”一书

关于如何获得ERN批准,您可以参考文章:如何在使用加密(或如何获得ERN)时合法地向Apple的App Store提交应用程序