如何使用团队帐户生成 "app-specific password" 以公证应用程序?
How to generate an "app-specific password" with Team Account in order to notarize app?
我正在尝试使用 electron-builder
和 electron-notarize. The docs state that an app specific password is needed and provides this link: Using app-specific passwords 对 Electron 应用程序进行公证。
问题是 link 是关于为 个人 Apple ID 帐户生成“应用专用密码”——不是苹果开发者账户。我是团队的一员,在我的个人 ADC 帐户和我也可以访问的团队帐户部分(我有管理员权限)中都没有位置(例如“安全”面板)。
在尝试公证时,我已经为 APPLEID
和 APPLEIDPASS
尝试了所有我能想到的组合:我的个人 Apple ID 和密码,团队的 Apple ID 和密码,“app-specfic密码”我在我的个人帐户中创建。
不可能这么难。我错过了什么?
我已经能够解决我的公证问题。我不知道这是否是“正确的方法”,但它奏效了,所以这就是我所做的——也许它会节省一些人的时间和我经历的挫败感。
上下文: 我是承包商,对我客户的 Apple Developer 帐户拥有“管理员”权限,同时我还有一个个人 ADC 帐户。如我的问题所述,Electron Builder
文档声明需要“应用专用密码”,link 向 Apple 文档提供有关如何生成密码的信息。然而,link 是或似乎是关于生成特定密码以与“Twitter”等第三方应用程序一起使用——这样个人的 Apple ID 密码就会受到保护。至少我是这样读的。在我的个人 ADC 帐户或团队帐户中没有可以生成此类密码的地方。所以我在我的个人 ADC 帐户中生成了一个密码。
来自 Electron Builder issues 的 post 引入了一个额外的 属性 传递给 notarize
:“ProviderShortname”。如 post 中所述,可通过以下方式访问:
xcrun altool --list-providers -u <personal APPLE ID> -p <app-specific pw generated within that acct>
这给出了成员列表。然后我在下面的代码中使用团队 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
的一些问题(这在我尝试对应用程序进行公证之前没有发生)。这些问题与缺少必需的“消息”和“lang”代码(在我的例子中是“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'"
}
我正在尝试使用 electron-builder
和 electron-notarize. The docs state that an app specific password is needed and provides this link: Using app-specific passwords 对 Electron 应用程序进行公证。
问题是 link 是关于为 个人 Apple ID 帐户生成“应用专用密码”——不是苹果开发者账户。我是团队的一员,在我的个人 ADC 帐户和我也可以访问的团队帐户部分(我有管理员权限)中都没有位置(例如“安全”面板)。
在尝试公证时,我已经为 APPLEID
和 APPLEIDPASS
尝试了所有我能想到的组合:我的个人 Apple ID 和密码,团队的 Apple ID 和密码,“app-specfic密码”我在我的个人帐户中创建。
不可能这么难。我错过了什么?
我已经能够解决我的公证问题。我不知道这是否是“正确的方法”,但它奏效了,所以这就是我所做的——也许它会节省一些人的时间和我经历的挫败感。
上下文: 我是承包商,对我客户的 Apple Developer 帐户拥有“管理员”权限,同时我还有一个个人 ADC 帐户。如我的问题所述,Electron Builder
文档声明需要“应用专用密码”,link 向 Apple 文档提供有关如何生成密码的信息。然而,link 是或似乎是关于生成特定密码以与“Twitter”等第三方应用程序一起使用——这样个人的 Apple ID 密码就会受到保护。至少我是这样读的。在我的个人 ADC 帐户或团队帐户中没有可以生成此类密码的地方。所以我在我的个人 ADC 帐户中生成了一个密码。
来自 Electron Builder issues 的 post 引入了一个额外的 属性 传递给 notarize
:“ProviderShortname”。如 post 中所述,可通过以下方式访问:
xcrun altool --list-providers -u <personal APPLE ID> -p <app-specific pw generated within that acct>
这给出了成员列表。然后我在下面的代码中使用团队 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
的一些问题(这在我尝试对应用程序进行公证之前没有发生)。这些问题与缺少必需的“消息”和“lang”代码(在我的例子中是“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'"
}