Mac App Store 应用程序提交指南
Note: Submitting an app to Mac App Store requires enrolling in the Apple Developer Program, which costs money.
下面步骤介绍了一个简单的提交应用到商店方法。 然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 关于如何满足 Mac App Store 要求的向导。
为了提交应用到商店,首先需要从 Apple 获得一个证书 可以参照 现有的指南。
获得 Team ID
在软件签名之前,你需要知道开发者账户的 Team ID 查看 Team ID,登录 Apple Developer Center 并点击侧边栏的 Membership。 你可以在团队名称下面的 Membership Information 部分查看到 Team ID。
获得证书之后,你可以使用 打包你的应用,之后进行提交。
First, you have to add a key to your app's Info.plist
, which has your Team ID as its value:
之后,你需要准备2个授权文件。
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>
<array>
</dict>
</plist>
请注意上述 TEAM_ID
对应开发者账户的 Team ID,your.bundle.id
对应软件打包时使用的 Bundle ID。
然后使用下面的脚本签名你的应用:
#!/bin/bash
# 你的应用名称
APP="YourApp"
# 要签名的应用路径
APP_PATH="/path/to/YourApp.app"
# 生成安装包路径
RESULT_PATH="~/Desktop/$APP.pkg"
# 开发者应用签名证书
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
# 授权文件路径
CHILD_PLIST="/path/to/child.plist"
PARENT_PLIST="/path/to/parent.plist"
LOGINHELPER_PLIST="/path/to/loginhelper.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 "$LOGINHELPER_PLIST" "$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.app/Contents/MacOS/$APP Login Helper"
codesign -s "$APP_KEY" -f --entitlements "$LOGINHELPER_PLIST" "$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.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 的 Enabling App Sandbox 了解一些基础,然后在授权文件内添加你的应用需要的许可。
除了手动签名你的应用,你也可以选择使用 模块来做这项工作。
原生模块签名
应用程序中的原生模块也需要签署。如果使用 electron-osx-sign,确保已生成二进制文件的路径包含在 参数列表:
还要注意,原生模块可能产生的中间文件 不包括在内(因为它们也需要签署)。 如果你使用 8.1.0 之前的版本,在构建步骤中添加 —ignore=.+.o$
以忽略这些文件。 Versions 8.1.0 and later ignore those files by default.
上传你的应用
在签名应用之后,你可以使用 Application Loader 上传软件到 iTunes Connect 进行处理。请确保在上传之前你已经 。
最后, 你可以 检查并提交你的应用。
为了让你的应用满足沙箱的所有条件,在 MAS 构建的时候,下面的模块已被禁用:
crashReporter
一些视频采集功能无效。
- 某些辅助功能无法访问。
- 应用无法检测 DNS 变化。也由于应用沙箱的使用方法,应用可以访问的资源被严格限制了;阅读更多信息。
附加授权
根据应用使用的 Electron API,你可能需要添加附加授权 在 parent.plist
文件,在 Mac App Store 发布应用程序的时候能够使用这些API。
网络访问
启用传出的网络连接,允许你的应用程序连接到服务器:
启用传入的网络连接,让你的应用程序打开网络 socket 监听:
<key>com.apple.security.network.server</key>
<true/>
详情查看 Enabling Network Access documentation.
dialog.showOpenDialog
<true/>
详情查看 Enabling User-Selected File Access documentation.
dialog.showSaveDialog
详情查看 Enabling User-Selected File Access documentation.
Depending on the countries in which you are releasing your app, you may be required to provide information on the cryptographic algorithms used in your software. See the for more information.
Electron 使用下列加密算法:
- AES - NIST SP 800-38A, , RFC 3394
- HMAC -
- ECDSA - ANS X9.62–2005
- ECDH - ANS X9.63–2001
- HKDF - NIST SP 800-56C
- PBKDF2 -
- RSA - RFC 3447
- SHA -
- Blowfish - https://www.schneier.com/cryptography/blowfish/
- CAST - , RFC 2612
- DES -
- DH - RFC 2631
- DSA -
- EC - SEC 1
- IDEA - "On the Design and Security of Block Ciphers" book by X. Lai
- MD2 -
- MD4 - RFC 6150
- MD5 -
- MDC2 - ISO/IEC 10118-2)
- RC2 -
- RC4 - RFC 4345
- RC5 -
- RIPEMD - ISO/IEC 10118-3