Mac App Store 应用提交向导

自从 v0.34.0,Electron 就允许提交应用包到 Mac App Store(MAS)。这个向导提供的信息有: 如何提交应用和 MAS 构建的限制。

注意: 提交应用到 Mac App Store 需要参加 Apple DeveloperProgram,这需要额外花费。

如何提交

下面步骤介绍了一个简单的提交应用到商店方法。然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 Submitting Your App 关于如何满足 Mac App Store 要求的向导。

获得证书

为了提交应用到商店,首先需要从 Apple 获得一个证书。可以遵循 现有向导

软件签名

获得证书之后,你可以使用 应用部署 打包你的应用,之后进行提交。

首先,你需要在软件包内的 Info.plist 中增添一项 ElectronTeamID

  1. <plist version="1.0">
  2. <dict>
  3. ...
  4. <key>ElectronTeamID</key>
  5. <string>TEAM_ID</string>
  6. </dict>
  7. </plist>

之后,你需要准备2个授权文件。

child.plist:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>com.apple.security.app-sandbox</key>
  6. <true/>
  7. <key>com.apple.security.inherit</key>
  8. <true/>
  9. </dict>
  10. </plist>

parent.plist:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>com.apple.security.app-sandbox</key>
  6. <true/>
  7. <key>com.apple.security.application-groups</key>
  8. <string>TEAM_ID.your.bundle.id</string>
  9. </dict>
  10. </plist>

请注意上述 TEAM_ID 对应开发者账户的 Team ID,your.bundle.id 对应软件打包时使用的 Bundle ID。

然后使用下面的脚本签名你的应用:

  1. #!/bin/bash
  2. # 应用名称
  3. APP="YourApp"
  4. # 应用路径
  5. APP_PATH="/path/to/YourApp.app"
  6. # 生成安装包路径
  7. RESULT_PATH="~/Desktop/$APP.pkg"
  8. # 开发者应用签名证书
  9. APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
  10. INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
  11. # 授权文件路径
  12. CHILD_PLIST="/path/to/child.plist"
  13. PARENT_PLIST="/path/to/parent.plist"
  14. FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"
  15. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework"
  16. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib"
  17. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib"
  18. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework"
  19. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper"
  20. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/"
  21. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH"
  22. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/"
  23. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP"
  24. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/"
  25. codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$APP_PATH/Contents/MacOS/$APP"
  26. codesign -s "$APP_KEY" -f --entitlements "$PARENT_PLIST" "$APP_PATH"
  27. productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"

如果你是 macOS 下的应用沙箱使用新手,应当仔细阅读 Apple 的 Enabling App Sandbox 了解一些基础,然后在授权文件 (entitlements files) 内添加你的应用需要的许可。

上传你的应用并检查提交

在签名应用之后,你可以使用 Application Loader 上传软件到 iTunes Connect 进行处理。请确保在上传之前你已经 创建应用记录,再 提交进行审核

MAS 构建限制

为了让你的应用满足沙箱的所有条件,在 MAS 构建的时候,下面的模块已被禁用:

  • crashReporter
  • autoUpdater
    并且下面的行为也改变了:

  • 一些视频采集功能无效。

  • 某些辅助功能无法访问。
  • 应用无法检测 DNS 变化。
    也由于应用沙箱的使用方法,应用可以访问的资源被严格限制了;阅读更多信息 App Sandboxing

Electron 使用的加密算法

取决于你所在地方的国家和地区,Mac App Store 或许需要记录你应用的加密算法,甚至要求你提交一个 U.S. 加密注册 (ERN) 许可的复印件。

Electron 使用下列加密算法: