【问题标题】:xcodebuild says does not contain schemexcodebuild 说不包含方案
【发布时间】:2012-12-31 09:26:32
【问题描述】:

我有一个古玩问题。

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

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

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

【问题讨论】:

  • 刚刚注意到,当我在 xcode 中打开项目时,会创建一个 .xcscheme 文件,但在 xcuserdata/username.xcuserdatad 文件夹中......但我不明白为什么该方案在下方“生成”用户文件夹..我将如何在竹子中处理它

标签: xcode xcodebuild bamboo


【解决方案1】:

对于任何使用 Xcode 11.4 试图在方案上找到“共享”按钮的人,它现在已移至单独的方案中。

  1. 选择您想要的方案
  2. 按“编辑”
  3. 选中“共享”框

【讨论】:

    【解决方案2】:

    我想为与此线程相关的案例添加解决方案。这个是为克隆现有项目的你准备的,你需要的所有方案都已经被共享:

    fastlane lanes 正确显示您的所有车道,包括您的所有方案:

    ,但fastlane gym 只显示主要方案(不是开发和测试方案):

    解决方案是取消选中fastlane gym 未列出的方案的共享选项,然后再次检查。它将为方案生成 .xcscheme:

    现在,如果您与fastlane gym 核对,将列出所有方案:

    然后您应该将这些 .xcshemes 文件提交到存储库,以便克隆该项目的其他开发人员将获得这些文件。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,即使这里的一些答案实际上提供了解决方案,我也没有发现它很清楚。所以我只会再添加一个。简而言之,如何从 excode 共享模式。

      导航到Product > Scheme > Manage Schemes

      然后您将看到一个方案列表,每个方案都表示为是否共享。只需检查您要共享的那些(对于开发和产品构建可能会有所不同)

      图片取自本文https://developer.nevercode.io/docs/sharing-ios-project-schemes

      【讨论】:

        【解决方案4】:

        我在实施 CI 时遇到了这个错误。上面的问题与我的问题相同,只是我使用的是 Gitlab 自己的 CI 工具。您可以检查 Bamboo 中是否有任何此类文件。
        我通过对gitlab-ci.yml 文件进行一些更改来解决它。
        在您通过分享使您的scheme 可用之后。在 Xcode 中转到 Products>Scheme>Manage Scheme 并检查 share to share。

        更改

        在任何地方设置绝对路径。
        例如xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
        在这里,您需要将/path/to/your/project/ 更改为您的路径,将testDemo 更改为您的项目名称。

        【讨论】:

          【解决方案5】:

          遇到了同样的问题,但是在使用 xcode 作为主项目的子项目进行构建期间。在 xcode 中独立构建子项目 - 之后此错误消失。

          【讨论】:

            【解决方案6】:

            缺少该方案的一个常见原因是忘记将提交推送到源。如果您收到缺少方案消息,您应该首先验证方案是共享的,然后验证您已提交更改并将它们推送到源服务器。

            【讨论】:

              【解决方案7】:

              大多数答案会建议您使用 Xcode 共享您的方案,然后将更改提交到 repo。当然,这可行,但前提是您有权访问源代码并有权提交更改,以及其他一些假设。

              但有许多“假设”需要考虑

              • 如果由于某种原因无法修改 Xcode 项目怎么办?
              • 如果您在 CI 服务器上自动创建新方案会怎样?
                这实际上经常发生。如果您使用测试自动化框架(如 Calabash),通常最终会复制现有目标,这也会自动复制方案,并且不会共享新方案,即使原始方案是。

              Ruby & xcodeproj gem

              我会推荐使用xcodeproj Ruby gem。 这是一个非常酷的开源工具,可以帮助您自动执行大量与 Xcode 相关的任务。

              顺便说一句,这是 CocoaPods 用来处理您的 Xcode 项目和工作区的 gem。

              所以安装它

              sudo gem install xcodeproj
              

              然后编写一个简单的 Ruby 脚本来重新共享所有方案,gem 具有用于此目的的 recreate_user_schemes 方法

              #!/usr/bin/env ruby
              require 'xcodeproj'
              xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
              xcproj.recreate_user_schemes
              xcproj.save
              

              它不仅将用户文件夹中的方案文件复制到 xcshareddata/xcschemes,它还首先通过解析 pbxproj 文件来创建这些文件。

              【讨论】:

              • 如果其他人偶然发现这一点,recreate_user_schemes 似乎没有正确处理测试目标。我已经提交了a bug report about it
              • 我在博客上写过它。 nsbogan.com/xcode/2014/05/29/share-xcode-schemes。不幸的是,单元测试的问题仍未解决。
              • 好吧,我试过这个解决方案。但是当我运行 xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity" 时,我得到了 'Scheme <0x7fc9ea5e5fd0:><0x7fc9eb47c6c0:>
              【解决方案8】:

              像这样调试问题:

              xcodebuild -list
              

              或者如果您使用的是工作区(例如使用 pod)

              xcodebuild -workspace MyProject.xcworkspace -list
              

              如果您的方案未列出,请按以下方式修复:

              【讨论】:

              • 共享方案允许它们显示在xcodebuild -list...谢谢!
              【解决方案9】:

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

              对于后代,或者至少是从搜索中获得这里的任何人,这里有两个版本的东西 - “我很忙,所以请提供事实”版本和更多涉及的讨论和理由。这两个版本都假定您正在尝试从 Workspace 文件构建;如果您不是,那么我很抱歉,因为这主要适用于基于工作空间的项目。

              精简版“Fix-it”

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

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

              更深入的讨论和理由

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

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

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

              xcodebuild 去寻找文件 .xcscheme 存在于 /xcshareddata/xcschemes。

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

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

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

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

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

              【讨论】:

              • 这实际上为我修复了一个随机 xcodebuild 错误,它返回 NO 错误但退出代码 65。结果发现容器被设置为项目而不是工作区本身,更改了它,瞧,问题解决了.谢谢。
              • 谢谢!这正是我一直在寻找的解决方案。
              • 我的测试和存档选项被禁用是因为这个。我检查了我的方案是共享的。仍然无法通过机器人构建。我可以在本地构建,但正如我提到的,我无法存档它。你认为它与这个问题有关吗
              • 谢谢!将方案容器设置为我的工作区解决了我在构建 TeamCity 时遇到的问题。
              • 如何从该消息中定位架构。我收到的正是这条消息。[ xcodebuild:错误:名为“jamesAppV2”的工作区不包含名为“”的方案。 “-list”选项可用于在工作区中查找方案的名称。]
              【解决方案10】:

              好的,我知道 2 分钟后,但我发现另一个堆栈溢出,说该方案必须设置为共享...Where does Xcode 4 store Scheme Data?

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-12-31
                • 1970-01-01
                • 1970-01-01
                • 2023-03-13
                • 2011-07-30
                • 2011-12-01
                • 1970-01-01
                • 2023-03-07
                相关资源
                最近更新 更多