将Electron App提交到Mac App Store:错误“无效签名”

时间:2016-04-04 12:01:28

标签: macos app-store electron mac-app-store

我正在尝试将基于电子的应用程序提交到Mac App Store。 要签署应用我正在使用此脚本(根据https://github.com/atom/electron/blob/master/docs/tutorial/mac-app-store-submission-guide.md):

#!/bin/bash
# Name of your app.
APP="MyApp"
# The path of you app to sign.
APP_PATH="MyApp.app"
# The path to the location you want to put the signed package.
RESULT_PATH="$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: MYCOMPANY (XXX)"
INSTALLER_KEY="3rd Party Mac Developer Installer: MYCOMPANY (XXX)"

FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"

codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper NP.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Framework.framework/Libraries/libnode.dylib"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Framework.framework/Electron Framework"

# Signage of terminal-notifier
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$APP_PATH/Contents/Resources/app/node_modules/node-notifier/vendor/terminal-notifier.app"

if [ -d "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A" ]; then
    # Signing a non-MAS build.
    codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Mantle.framework/Versions/A"
    codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/ReactiveCocoa.framework/Versions/A"
    codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A"
fi
codesign -fs "$APP_KEY" --entitlements parent.plist "$APP_PATH"

productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"

包含两个权利文件: 的 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/>
  </dict>
</plist>

运行脚本后,我使用Application Loader将PKG文件提交给MAS。到目前为止它的工作。但是在提交过程之后,我收到了来自Apple的邮件,其中包含以下错误:

  

无效签名 - 错误地签署应用程序安装程序时会发生此错误。此过程需要两个证书:“第三方Mac开发人员应用程序”证书和“第三方Mac开发人员安装程序”证书。签署包时,您需要确保使用安装程序证书对包进行签名。通过Xcode Organizer提交应用程序或从命令行运行productbuild时,请确保指定此证书。

我使用“第三方Mac开发者安装程序”证书对包裹进行签名。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

通过电子包装工具生成包装后。
你应该编辑包中的info.plist。 将一对(键,值)添加到info.plist。关键是“ElectronTeamId”,价值是您的团队ID 要找到您的团队ID,请登录Apple开发人员中心,然后单击侧栏中的“成员身份”。您的团队ID显示在团队名称下的“成员身份信息”部分中。

答案 1 :(得分:-1)

我建议您查看electron-osx-sign。从签名脚本的摘录中可以看出流程出错的地方有点不确定。因此,使用此模块,您所要做的就是:

$ electron-osx-sign path/to/my.app

可以为您完成设置权利和签署不同版本的包含框架的其余部分。