xcodebuild 说不包含方案

2024-04-12

我有一个好奇心问题。

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

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

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


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

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

精简“修复”版本

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

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

更深入的讨论和基本原理

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

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

xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

xcodebuild 查找位于 /xcshareddata/xcschemes 处的文件 .xcscheme。

显然,有多种方法可以配置 Bamboo 和工作区,因此请记住,您的独特配置可能无法 100% 映射到此处提供的内容。关键要点:

  1. Xcode UI 神奇地处理的某些自动化任务无法通过 Xcodebuild CLI 执行。
  2. 您可以将方案和构建配置数据附加到“容器层次结构”中的许多位置 - 确保您的数据最终出现在正确的容器中(工作区、项目和/或构建目标)
  3. 考虑 xcodebuild 工具可能在容器层次结构中的哪个位置寻找配置数据;开始查找位置的一个很好的指标是基于“-workspace”或“-project”参数的使用。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xcodebuild 说不包含方案 的相关文章

随机推荐

  • ASP.NET 如何将文件流式传输给用户

    最初 我试图找出 Response Close 和 Response End 之间的区别 但经过更多谷歌搜索和研究后 很明显我没有看到 Byte 发送回客户端的常见方式 我将在下面留下代码示例 但我想知道执行此操作的行业标准是什么 Byte
  • 通过 qbXML 设置 Employee 的 IsActive

    使用 QbXml 添加或修改员工时出现以下错误 QuickBooks 在解析提供的 XML 文本流时发现错误 我尝试过 true false 这是它返回的值 yes no 和 1 0 这些似乎都不起作用 是否可以为员工设置 IsActive
  • 我怎样才能完成反应日期

    我正在创建消息列表 显示消息发送的时间 这是我的留言集 Messages new Mongo Collection messages Messages attachSchema new SimpleSchema created type D
  • 如果字符串包含列表中的元素,则创建新的条件列[重复]

    这个问题在这里已经有答案了 我正在尝试添加一个新列keywords这将得到价值TRUE如果该单词出现在关键字列表中 该值将是FALSE如果该词没有出现在keywordslist 我的关键字由 100 多个单词组成 因此无法手动添加单词 关键
  • Mongo Java 驱动程序不遵守 limit 方法

    我有这个查询 DBCursor mongoCursor mongoCollection find query sort sort limit 5000 long mongoCursorCount mongoCursor count myLo
  • 如何创建并推送到共享或分布式数组数组?

    我编写了 Julia 代码 其中初始化一个空数组 如下所示 a 稍后在代码中 我简单地推送到该数组 如下所示 推 a b 其中 b c d e 是另一个数组 每个 b 可以具有不同的长度 这在非并行化代码中工作得很好 但是 我想在并行代码中
  • Java 垃圾收集,将引用设置为 null

    public class A A a public static void main String args A b new A new object created obj1 b a new A new object created ob
  • 使用 Werkzeug 和 Jinja2 的上下文处理器

    我的应用程序在 App Engine 上运行并使用Werkzeug http werkzeug pocoo org and Jinja2 http jinja pocoo org 2 我想要一个功能上与 Django 自己的上下文处理器等效
  • 尝试调用未定义的函数 glutInit

    我需要 python 中的一个过剩窗口 我使用 Python 3 5 和 PyOpenGL GLUT 时出现以下异常 Traceback most recent call last File D Test py line 47 in
  • Firestore没有执行操作的权限

    我正在尝试在 Firestore 中设置规则 如果每个人都经过身份验证进入应用程序 则每个人都可以读取彼此的内容 但只有文档所有者才能创建 写入 更新或删除它们 我在 Firestore 中设置了以下规则 rules version 2 s
  • Unity,如何将相机切换到第二个物体的位置?

    我在 Unity 3D 中遇到奇怪的问题 我的想法是找到数组中距离玩家最近和第二近的对象 然后我希望相机移动到最近的物体的位置并看着玩家 但如果玩家和最近的物体之间的距离太小 我希望相机移动到第二个物体的位置 我做了一些编码 但我不知道为什
  • 在 Silverlight 中使用 .NET RIA 服务有哪些陷阱?

    Silverlight可以使用WCF Web服务 基于REST的服务 NET RIA服务 但似乎Silverlight和 NET RIA服务是最受欢迎的 我想知道您在使用 NET RIA 服务实际实施 SL 时是否遇到过任何常见问题 如果继
  • 如何读取 RCFile

    我正在尝试将一个小的 RCFile 约 200 行数据 读入 HashMap 中以进行 Map Side 连接 但是在将文件中的数据变为可用状态时遇到了很多麻烦 这是我到目前为止所拥有的 其中大部分来自这个例子 http sumit1001
  • 如何从列表中选择每个第n个元素[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Haskell 中获取无限列表的每个第 N 个元素 https stackoverflow com questions 2026912 how to get every nth element
  • Java 流惰性 vs 融合 vs 短路

    我试图对 Java 流 API 中惰性求值的应用形成一个简洁而连贯的理解 目前我的理解是这样的 元素仅在需要时才被消耗 即流是惰性的 并且中间操作是惰性的 例如过滤器 仅在需要时进行过滤 中间操作可以融合在一起 如果它们是无状态的 短路操作
  • 具有多个字段的 Angular 模板驱动表单验证

    假设我有一个带有一些字段的简单表单 堆栈闪电战示例 https stackblitz com edit angular ktk7ez Component selector my app template h1 AppComponent h1
  • 使用基本 R 功能舍入 POSIX 日期 (POSIXct)

    我目前正在为我正在构建的包考虑很多日期和时间 绊倒这个post https stackoverflow com questions 8333838 how do you generate a sequence of the last day
  • 电子邮件解析云服务[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 似乎无法使用 Magit 推送到 GitHub

    我正在尝试在 Emacs 24 3 1 上使用 Magit 推送到 GitHub 存储库 请注意 我使用的是 Windows 盒子 我已经暂存并提交了对文件的更改 并且 M x magit status 仅反映驻留在我的存储库克隆中的未跟踪
  • xcodebuild 说不包含方案

    我有一个好奇心问题 我有一个项目 我一直在使用 XCode IDE 构建 并且运行良好 现在我正在设置 Bamboo 来构建项目 因此从命令行构建它 问题是 如果我从 GIT 中检查我的代码 然后使用 xcodebuild 来构建它 它会说