如何使用团队帐户生成“应用程序专用密码”以对应用程序进行公证?

Posted

技术标签:

【中文标题】如何使用团队帐户生成“应用程序专用密码”以对应用程序进行公证?【英文标题】:How to generate an "app-specific password" with Team Account in order to notarize app? 【发布时间】:2021-07-31 08:42:45 【问题描述】:

我正在尝试使用 electron-builder 和 electron-notarize 对 Electron 应用程序进行公证。文档声明需要特定于应用程序的密码并提供此链接:Using app-specific passwords。

问题在于该链接是关于为个人 Apple ID 帐户而不是 Apple Developer 帐户生成“应用专用密码”。而且我是团队的一员,在我的个人 ADC 帐户和团队帐户中我也可以访问的部分(我拥有管理员权限)中没有位置(例如“安全”面板)。

在尝试公证时,我已经尝试了所有我能想到的 APPLEIDAPPLEIDPASS 组合:我的个人 Apple ID 和密码、团队的 Apple ID 和密码、我在我的个人帐户。

不可能这么难。我错过了什么?

【问题讨论】:

【参考方案1】:

我已经能够解决我的公证问题。我不知道这是否是“正确的方法”,但它奏效了,所以这就是我所做的——也许它会为别人节省我所经历的时间和挫折。

背景:我是一名承包商,对我客户的 Apple Developer 帐户拥有“管理员”权限,同时我还拥有一个个人 ADC 帐户。如我的问题所述,Electron Builder 文档声明需要“应用程序特定密码”,并链接到有关如何生成密码的 Apple 文档。但是,该链接正在或似乎是关于生成特定密码以与“Twitter”等第三方应用程序一起使用 - 这样一个人的个人 Apple ID 密码就会受到保护。至少我是这么读的。在我的个人 ADC 帐户或团队帐户中没有可以生成此类密码的地方。所以我在我的个人 ADC 帐户中生成了一个密码。

这篇来自Electron Builder issues 的帖子介绍了一个附加属性以传递给notarize:“ProviderShortname”。如帖子中所述,可以通过以下方式访问:

xcrun altool --list-providers -u <personal APPLE ID> -p <app-specific pw generated within that acct>

这给出了一个成员列表。然后,我在下面的代码中使用 Team ID 作为“ascProvider”的值:

require('dotenv').config();
const  notarize  = require('electron-notarize');

exports.default = async function notarizing(context) 
  const  electronPlatformName, appOutDir  = context;  
  if (electronPlatformName !== 'darwin') 
    return;
  

  const appName = context.packager.appInfo.productFilename;

  return await notarize(
    appBundleId: 'com.xxx.yyy.zzz',
    appPath: `$appOutDir/$appName.app`,
    appleId: process.env.APPLEID,
    appleIdPassword: process.env.APPLEIDPASS,
    ascProvider: process.env.ASCPROVIDER
  );
;

应用程序已成功公证(Apple 会发送一封确认电子邮件),然后继续进行其余的打包工作。在将公证收据“装订”到应用程序后(在我尝试对应用程序进行公证之前没有发生这种情况),我在创建 dmg 时也遇到了一些问题。这些问题与缺少必需的“消息”和“语言”代码(在我的情况下为“en-us”)有关。我通过对“Electron Builder”提供的示例进行添加来解决它,如下所示。

同样,我不知道这是否是处理所有这些问题的“正确方法”——但它奏效了。我想如果一个人是个人开发人员而不是团队的一员,那么样板的 Electron Builder 说明就可以了。


  "languageName": "English",
  "lang": "en-us",
  "agree": "Agree",
  "disagree": "Disagree",
  "print": "Print",
  "save": "Save",
  "description": "",
  "message": "If you agree with the terms of this license, press 'Agree' to install the software.  If you do not agree, press 'Disagree'"

【讨论】:

以上是关于如何使用团队帐户生成“应用程序专用密码”以对应用程序进行公证?的主要内容,如果未能解决你的问题,请参考以下文章

如何从帐户中删除 IOS 团队配置文件?

Apple Developer证书:不正确的团队ID

如何使我的代码生成令牌并将其返回以对用户进行身份验证?

如何在我的设备上调试 iPhone 应用程序? [复制]

审核团队沙盒帐户

如何设置 cedar 以对 ios 应用程序进行 bdd 测试?