gpt4 book ai didi

xcodebuild 说不包含方案

转载 作者:行者123 更新时间:2023-12-03 04:35:28 25 4
gpt4 key购买 nike

我有一个古玩问题。

我有一个项目,我一直在使用 XCode IDE 构建它,并且它运行良好。现在我正在设置 Bamboo 来构建项目,因此我正在从命令行构建它。

问题是,如果我从 GIT 中检查我的代码,然后使用 xcodebuild 来构建它,它会说找不到该方案,但是如果我打开该项目,它会构建,然后如果我尝试从命令行再次构建它使用相同的命令,它可以工作。

当我打开项目或者我在做一些愚蠢的事情时,XCode 有什么神奇之处,也许排除了我不应该在我的 .gitignore 中的文件?

最佳答案

关于 .xcscheme 文件,您绝对是在正确的轨道上——我在设置自己的项目时出现了这个问题!

对于后代,或者至少任何通过搜索来到这里的人,这里有两个版本的事情——“我很忙,所以请提供事实”版本和一个更复杂的讨论和基本原理。这两个版本都假设您正在尝试从 Workspace 文件构建;如果您不是,那么我很抱歉,因为这主要适用于基于工作区的项目。

浓缩“修复”版本

根本原因是 Schemes 的默认行为是将方案保持为“私有(private)”,直到它们被明确标记为共享。在命令行启动构建的情况下,Xcode UI 永远不会运行,并且 xcoderun 工具没有自己的 Schemes 缓存来使用。目标是生成、共享和提交您希望 Bamboo 运行的方案:

  • 在代码的干净工作副本上,打开您的项目工作区。
  • 从产品菜单中选择方案 > 管理方案...。
  • 出现为项目定义的方案列表。
  • 找到 Bamboo 正在尝试运行的方案
  • 确保为该方案选中“共享”框,并将“容器”设置设置为工作区而不是项目文件本身。
  • 单击“确定”以关闭“管理方案”表。
  • 已在您的项目中的 WorkspaceName.xcworkspace/xcshareddata/xcschemes 中创建了一个新的 .xcscheme 文件。
  • 将此文件提交到您的存储库并运行 Bamboo 构建。

  • 更深入的讨论和理由

    Xcode 4 引入了工作区和方案,以帮助尝试和驯服一些固有的困惑,这些困惑是处理相关 Xcode 项目、构建目标和构建配置的机制所固有的。工作区本身有自己的一组配置数据,这些数据描述了它包含的每个较小的数据“盒子”,并充当附加 .xcodeproj 文件的框架和一组镜像到每个开发人员机器或 CI 系统的共享配置数据. 这既是 Workspaces 的力量也是陷阱——有 1) 有很多方法可以使事物 100% 正确配置,但放入错误的容器或 2) 放入正确的容器,但配置不正确从而呈现数据系统的其他部分无法访问!

    Xcode 4 方案的默认行为是在将项目添加到工作区文件时自动生成新方案。那些添加了多个 .xcodeproj 文件的人可能已经注意到,您的方案列表很快就会变得不规则,尤其是在添加、删除项目文件,然后将其读入同一个工作区时。所有方案,自动生成或手动创建,默认为仅对当前用户可见的“私有(private)”方案,即使 .xcuserdata 文件与项目的数据和配置一起提交。这是 Bamboo 从 xcodebuild 报告的那个神秘构建错误的根本原因——因为 Bamboo 通过命令行而不是 Xcode UI 操作构建,它没有机会让 Schemes 自动生成并且只依赖于那些在工作区本身中定义。假设您已将 Bamboo 配置为使用如下命令从工作区构建:
    xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

    xcodebuild 去寻找文件 <'scheme' Parameter Value>.xcscheme 存在于 <'workspace' Parameter Value>/xcshareddata/xcschemes。

    显然,可以通过多种方式配置 Bamboo 和工作区,因此请记住,您的独特配置可能无法 100% 映射到此处显示的内容。关键要点:
  • Xcode UI 神奇地处理的某些自动化任务无法通过 Xcodebuild CLI 使用。
  • 您可以将方案和构建配置数据附加到“容器层次结构”中的许多位置——确保您的数据在正确的容器(工作区、项目和/或构建目标)中结束
  • 考虑 xcodebuild 工具可能在容器层次结构中的哪个位置寻找配置数据;它将从哪里开始寻找的一个很好的指标是基于“-workspace”或“-project”参数的使用。

  • “共享”框已经被选中......现在怎么办?

    我在自己的 Bamboo 实例上遇到了同样的问题;事实证明,在我的存储库中提交的方案已经过时,并且最新版本的命令行工具无法正常处理它。由于这之前存在,我查看了设置以确保没有任何关于该方案的明显自定义,删除并重新创建该方案以确保我将其标记为“共享”,并将新的 .xcscheme 文件重新提交到存储库。

    如果一切看起来都不错并且重建它并不能解决问题,请仔细检查该容器设置——很容易将该方案附加到层次结构中的错误容器!

    关于xcodebuild 说不包含方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14368938/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com