Zac*_*ley 120 xcode xcodebuild bamboo
我有一个古玩问题.
我有一个项目,我已经工作,并始终从XCode IDE构建,它工作正常.现在我正在设置Bamboo来构建项目,因此我正在从命令行构建它.
问题是,如果我从GIT中检查我的代码,然后使用xcodebuild来构建它,它说无法找到该方案,但如果我打开该项目,它会构建,如果我然后尝试从命令行再次构建它使用相同的命令,它的工作原理.
当我打开项目或者我做了一些愚蠢的事情时,XCode做了什么魔术,可能在我的.gitignore中排除了一个我不应该的文件?
Bry*_*ial 183
你肯定是关于.xcscheme文件的正确轨道 - 我在设置我自己的项目时出现了这个问题!
对于子孙后代,或至少从搜索到这里的人,这里有两个版本的东西 - "我很忙,所以只是请事实"版本和更多参与的讨论和理由.这两个版本都假设您正在尝试从Workspace文件构建; 如果你不是那么我道歉,因为这主要适用于基于工作空间的项目.
简明的"修复它"版本
根本原因是Schemes的默认行为是将方案保持为"私有",直到它们被明确标记为共享.在命令行启动的构建的情况下,Xcode UI永远不会运行,并且xcoderun工具没有自己的Schemes缓存可供使用.目标是生成,共享和提交您希望Bamboo运行的方案:
更深入的讨论和理由
Xcode 4引入了工作空间和方案,以帮助尝试和驯服处理与Xcode项目相关的机制,构建目标和构建配置所固有的一些混乱.工作区本身具有自己的一组配置数据,用于描述它包含的每个较小的"数据盒"数据,并充当附加.xcodeproj文件的框架和一组共享配置数据,这些数据被镜像到每个开发人员机器或CI系统. 这既是工作空间的力量和陷阱 - 有很多方法可以让人们100%正确配置,但放入错误的容器或2)放入正确的容器,但配置不当因此呈现数据系统的其他部分无法访问!
Xcode 4方案的默认行为是在项目添加到Workspace文件时自动生成新方案.那些已经添加了几个.xcodeproj文件的人可能已经注意到你的方案列表很快变得难以驾驭,特别是当项目文件被添加,然后删除,然后被读回到同一个工作区.自动生成或手动创建的所有方案默认为仅对当前用户可见的"私有"方案,即使使用项目的数据和配置提交.xcuserdata文件也是如此.这是从xcodebuild报告的神秘构建错误的根本原因 - 因为Bamboo通过命令行而不是Xcode UI来操作构建,所以它没有机会让Schemes自动生成并且仅依赖于那些在工作区本身中定义.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
Run Code Online (Sandbox Code Playgroud)
xcodebuild寻找文件<'scheme'参数值> .xcscheme存在于<'workspace'参数值>/xcshareddata/xcschemes.
显然,有一些方法可以配置Bamboo和工作区,因此请记住,您的唯一配置可能不会100%映射到此处显示的内容.关键要点:
已经检查了"共享"框...现在是什么?
我在自己的Bamboo实例上遇到了同样的问题; 事实证明,在我的存储库中提交的方案已经过时,并且最新版本的命令行工具没有正常处理它.由于之前存在这种情况,我查看了设置,以确保没有任何关于该方案的明确定制,删除并重新创建该方案,确保我将其标记为"共享",并重新将新的.xcscheme文件重新提交给库.
如果一切看起来都很好并且重建它并不能解决问题,请仔细检查容器设置 - 很容易将该方案附加到层次结构中的错误容器中!
Rob*_*ert 52
像这样调试问题:
xcodebuild -list
Run Code Online (Sandbox Code Playgroud)
或者如果您正在使用工作区(例如使用pod)
xcodebuild -workspace MyProject.xcworkspace -list
Run Code Online (Sandbox Code Playgroud)
如果你没有列出方案,那么修复如下:

i4n*_*iac 34
大多数答案建议您使用Xcode共享您的方案,然后将更改提交到repo.当然,这是有效的,但前提是您有权访问源代码并有权提交更改,以及其他一些假设.
但是需要考虑一些" 假设 "
Ruby&xcodeproj gem
我建议使用xcodeproj Ruby gem.这是一个非常酷的开源工具,可以帮助您自动执行大量与Xcode相关的任务.
顺便说一下,这是CocoaPods使用的宝石,可以搞乱你的Xcode项目和工作区.
所以安装它
sudo gem install xcodeproj
Run Code Online (Sandbox Code Playgroud)
然后编写一个简单的Ruby脚本来重新共享所有方案,gem 为此目的使用了recreate_user_schemes方法
#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save
Run Code Online (Sandbox Code Playgroud)
它不只是将用户文件夹中的方案文件复制到xcshareddata/xcschemes,它还首先通过解析pbxproj文件来创建这些文件.
| 归档时间: |
|
| 查看次数: |
72978 次 |
| 最近记录: |