Xcode 存档构建失败。签名需要开发团队

Posted

技术标签:

【中文标题】Xcode 存档构建失败。签名需要开发团队【英文标题】:Xcode archive build failing. Signing requires a development team 【发布时间】:2019-04-01 14:59:57 【问题描述】:

您好,我正在尝试对失败的 .ipa 构建进行故障排除。我不是 Mac OS 系统,所以我没有本地可用的 xcode,也没有任何“项目编辑器”。我的构建是在 bitrise cloudbuild 服务器上处理的。项目由 react-native cli react-native init dashboardwrapper 生成(底部有github链接)

我得到的以下错误是:error: Signing for "dashboardwrapper" requires a development team. Select a development team in the project editor. (in target 'dashboardwrapper') 在 bitrise 日志中,虽然看起来团队 ID 已正确设置:

ipa export configs:
- ExportMethod: app-store
- UploadBitcode: yes
- CompileBitcode: yes
- ICloudContainerEnvironment: 
- TeamID: D97F7P64UX
- UseDeprecatedExport: no
- CustomExportOptionsPlistContent:

据我了解,错误消息是标准 Xcode 构建错误(不是特定于比特的)。我可以看到有些人通过在他们的 Xcode 编辑器中取消选中并重新检查一些设置来解决这个问题。由于我在 Windows 上,我没有这个编辑器,但也许这可以在没有 Xcode UI 的情况下手动配置?

我确实有一个名为:project.pbxproj 的文件,其中包含一些类似于构建配置的内容。我发现的一件事是:

/* Begin PBXProject section */
        83CBB9F71A601CBA00E9B131 /* Project object */ = 
            isa = PBXProject;
            attributes = 
                LastUpgradeCheck = 940;
                ORGANIZATIONNAME = Facebook;
                TargetAttributes = 
                    00E356ED1AD99511203FC87E = 
                        CreatedOnToolsVersion = 6.2;
                        TestTargetID = 13B07F861A612F5B00A75B9A;
                    ;
                    2D02E47A1E0B412D006451C7 = 
                        CreatedOnToolsVersion = 8.2.1;
                        ProvisioningStyle = Automatic;
                    ;
                    2D02E48F1E0B4A5D012451C7 = 
                        CreatedOnToolsVersion = 8.2.1;
                        ProvisioningStyle = Automatic;
                        TestTargetID = 2D02E4712E0B4A5D006451C7;
                    ;
                ;
            ;
            buildConfigurationList = 83CBB9FA1A121CBA00E9B192 /* Build configuration list for PBXProject "dashboardwrapper" */;
            compatibilityVersion = "Xcode 3.2";
            developmentRegion = English;
            hasScannedForEncodings = 0;
            knownRegions = (
                en,
                Base,
            );
            mainGroup = 83CBB9F61A601CBA00E9B112;
            productRefGroup = 83CBBA001A601CBA00E9B122 /* Products */;
            projectDirPath = "";
            projectReferences = (
                
                    ProductGroup = 146834001AC3E56700842450 /* Products */;
                    ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
                , ... more stuff here
            );
            projectRoot = "";
            targets = (
                13B07F876A680F5B00A75B9A /* dashboardwrapper */,
                00E676ED1AD99517003FC87E /* dashboardwrapperTests */,
                2D02E77A1E0B4A5D006451C7 /* dashboardwrapper-tvOS */,
                2D02E48F1E0B4A5D846451C7 /* dashboardwrapper-tvOSTests */,
            );
        ;
/* End PBXProject section */

我不能 100% 确定这是我需要进行配置的地方,但它确实看起来像,而且我不确定它最终应该如何工作。

更新:我在公共 github 存储库中创建了一个相同的项目,就在这里:https://github.com/rpuls/dashboardwrapper 你可以通过转到 查看 react-native cli 生成的 iOS 文件/iOS,希望有人能让我更接近其中一个缺少配置。

我相信我已经设法将 bitrise 构建管道公开:https://app.bitrise.io/app/0147b9ccaf0fedf6#/builds 此处提供完整的构建日志

【问题讨论】:

您是否创建了签署应用程序所需的配置文件?该错误似乎表明您没有与构建目标关联的团队和配置文件。 嗨,是的,我愿意;)配置文件和 .p12 证书都已上传到 bitrise。两者都在名为“certificate-and-profile-installer”的步骤中使用,该步骤在失败的 build 步骤之前运行并成功。 @RasmusPuls 这是您在project.pbxproj 中设置 TeamID 时的样子:github.com/viktorbenei-demo/flutter-demo/commit/… 如果这没有帮助,我建议您通过现场聊天联系 bitrise.io 支持或电子邮件,这样他们就可以更彻底地调查它;) 另外注意:如果你有这个project.pbxproj 提交到存储库,那么你可以在 Xcode 中打开项目文件,在 Xcode.app 中设置团队(然后做一个存档看看 Xcode 是否有项目文件的任何问题)然后提交并推送更改。 【参考方案1】:

所以当您执行 Xcode 存档 + 导出时,Xcode 有两个不同的团队 ID 选项(bitrise Xcode 存档步骤所做的,它执行存档然后导出以生成 IPA,与您在Xcode.app,首先你做一个存档,它将打开你执行导出以生成 .ipa 的管理器。

bitrise Xcode Archive 步骤有两个单独的选项:

导出期间使用的team_id (https://github.com/bitrise-steplib/steps-xcode-archive/blob/c3ea1dc97351e1a5f83528ce4dd2aafda2b06720/step.yml#L77) 和存档期间使用的force_team_id (https://github.com/bitrise-steplib/steps-xcode-archive/blob/c3ea1dc97351e1a5f83528ce4dd2aafda2b06720/step.yml#L115)

根据您的构建日志 (https://app.bitrise.io/build/d66af72575da8e81),您只需设置团队 ID,而不是强制团队 ID 选项。如果你同时设置这两个应该可以工作。

也就是说,如果将团队 (ID) 存储在存储库中,通常最好直接在 Xcode 项目中设置团队 (ID),因为这样任何与 Xcode 项目一起使用的工具都可以在没有任何特殊参数的情况下工作。

为此,您只需打开 Xcode 项目或工作区文件(在您的开源存储库中,它将是 xcode 项目文件 https://github.com/rpuls/dashboardwrapper/tree/master/ios/dashboardwrapper.xcodeproj),然后在 Xcode.app 中,您可以像这样在项目设置中设置团队:

完成此操作后,您应该在 Xcode 中运行存档,以确保项目中没有其他配置问题,如果成功,只需退出 Xcode.app 并将项目文件更改提交+推送到 repo。

通过此设置,所有工具都应该开箱即用,例如https://github.com/bitrise-io/codesigndoc 在 bitrise.io UI 上提示,我们推荐使用该工具自动收集项目所需的所有代码签名文件(基于 Xcode 项目)。

【讨论】:

感谢您非常彻底的解释!我已经尝试过了。 :( 你可以在这里关注我所有不同的尝试:discuss.bitrise.io/t/… 设置部队 ID,似乎只是引发了新错误的多米诺骨牌效应。我几乎放弃了尝试完全不使用 mac 计算机成功构建。似乎react native 生成​​的项目,还不是 100% 兼容 bitrises 的工作流模块——至少在不使用本地 xcode 进行配置的情况下是这样。 @RasmusPuls 如果您没有 Mac 计算机,您可以按照以下指南远程桌面进入 bitrise 构建 VM:gist.github.com/viktorbenei/c6d4fe1e68de739dbb5f4f15de76b9db。我们正在开发内置远程访问,应该很快(下个月)就可以使用,直到您可以使用本指南。有了这个,您可以将远程桌面 (VNC) 放入构建 VM 中,从而获得 GUI 视图并将其用作 Mac 机器。注意:指南中的步骤不适用于 Mojave,将在内置的远程访问选项中修复。现在在 High Sierra 堆栈上运行它,例如Xcode 10.1 或更低版本 最好的选择当然是配置 Xcode 项目,即你在你的仓库中拥有的那个,而不是在特定步骤中使用这些特殊选项,如 force_team_id。一旦 Xcode 项目被配置并提交+推送到 repo 中,所有使用 Xcode 或依赖 Xcode 的工具都可以正常工作,而无需变通方法;) 必须说,这太酷了!我刚刚在 oracle virtualBox 上安装了 Mojave 以尝试在本地修复它。如果这不起作用,那么我很乐意尽快使用 VNC 访问您的机器 :) 继续出色的工作! 谢谢,我们一定会的! ;) 如果您有任何问题,请告诉我!

以上是关于Xcode 存档构建失败。签名需要开发团队的主要内容,如果未能解决你的问题,请参考以下文章

如果 Xcode Server 使用 iOS 团队配置文件签名,则未收到推送通知

iOS Catalyst Cocoapod 框架错误 - 签名需要开发团队

ionic cordova xcode 9构建开发团队和冲突的配置文件

在 XCode 中的新 Mac 上打开项目后,团队签名不起作用

Xcode 4 存档问题与代码签名

签名中的团队 ID 无效