首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mac App Store提交指南 | 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:

代码语言:javascript
复制
<plist version="1.0">
<dict>
  ...
  <key>ElectronTeamID</key>
  <string>TEAM_ID</string>
</dict>
</plist>

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

child.plist*

代码语言:javascript
复制
<?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*

代码语言:javascript
复制
<?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。

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

代码语言:javascript
复制
#!/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,请确保在参数列表中包含构建的二进制文件的路径:

代码语言:javascript
复制
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。

网络访问

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

代码语言:javascript
复制
<key>com.apple.security.network.client</key>
<true/>

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

代码语言:javascript
复制
<key>com.apple.security.network.server</key>
<true/>

有关更多详细信息,请参阅启用网络访问文档

dialog.showOpenDialog

代码语言:javascript
复制
<key>com.apple.security.files.user-selected.read-only</key>
<true/>

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

dialog.showSaveDialog

代码语言:javascript
复制
<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的“关于分组密码的设计和安全性”一书

扫码关注腾讯云开发者

领取腾讯云代金券