- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个脚本来存档phonegap项目的iOS部分。该脚本将擦除项目所在的目录,然后使用源代码管理中的最新代码重新填充该目录。然后运行$ phonegap local build ios
以构建项目。但是,为了存档项目,我需要定义其方案。我尝试从命令行构建项目,但收到消息** BUILD FAILED **。截至目前,我已经打开了xcode项目(这是我找到的定义方案的唯一方法)的代码,然后在等待xcode发挥其魔力的同时睡眠30秒。我的问题是如何模拟打开xcode或从命令行定义方案。
在此先感谢您的帮助。
最佳答案
这是一个完全公平的问题,因为Xcode方案比完全记录的要少,并且在您看到它们如何成为整个构建过程的整体之前,该方案具有某种神奇的感觉。
根据您要寻找的解决方法,听起来好像您需要将方案提升为“共享”,以便自动化工具(或其他开发人员)不必首先打开您的项目并等待Xcode自动生成默认值方案。这是开发人员试图使其Xcode项目与Continuous Integration系统或作用于Xcode 4或Xcode 5项目的其他命令行工具一起工作的完全正常的“要求”。好消息是,有Xcode本地方法可以配置项目,而不必求助于混乱或容易出错的解决方法。
TL; DR版本:
方案的默认Xcode行为是将它们视为开发人员特定的设置,而不与其他开发人员或工具共享。我们需要将您的项目方案推广为“共享”,并将这些更改提交给您的版本控制系统:
从对项目进行彻底检出开始。
导航Xcode的菜单:产品>方案>管理方案...菜单选项
取消选中方案表左上角的“自动创建方案”,
选中应该对所有开发人员用户和构建系统都可用的方案旁边的“共享”复选框。
最后,将所有项目更改提交回版本控制系统。
这将使使用此项目的所有开发人员都能共享一个Scheme,无论使用OS X用户名如何,并使其通过xcodebuild
或所选的构建工具进行无人值守的构建都可以使用一个方案。
...现在,对于好奇心更长的答案
在我们深入探讨您的直接问题之前,请先了解一些背景知识:
目标:应用程序,静态库,捆绑软件,或更笼统地说是根据源代码,资产,原始文件,构建设置以及项目中包含的其他文件构造的“产品”。通过Xcode的“运行”按钮或命令行工具xcodebuild
调用构建操作时,将生成此“产品”
构建配置:一组命名的构建设置,可以通过人类可读的标签来识别。默认情况下,所有Xcode项目均以“调试”配置开始,该配置生成具有最大透明度的构建目标,以帮助开发人员调试其应用程序;而“发布”配置则剥离该诊断信息的生成结果并优化该构建,以减少它的大小。一些开发人员选择根据其团队的需求来创建其他配置:可能会创建“ Ad-Hoc”,以便可以更改“签名身份”和“供应配置文件”设置,以通过Ad-Hoc供应配置文件对应用进行代码签名。 “ AppStore”或“ Distribution”是其他项目中可能看到的其他常见自定义构建配置。
行动:一组相关的活动,支持产品开发,诊断和测试中涉及的不同阶段。截至撰写本文时,有六个操作:“构建”,“运行”,“测试”,“配置文件”,“分析”和“存档”。作为开发人员,您最常使用的两个选项是“ Build”和“ Run”。
构建方案:Xcode 4发明,用于管理项目构建目标的依赖关系,用于特定构建目标的构建并行化选项。每个方案都允许开发人员为项目生命周期的每个操作(“构建”,“运行”等)精确选择一个构建配置(例如“调试”或“发布”),并定义其他行为或相关选项该特定的操作。例如,通过使用方案中的“配置文件”操作,开发人员可以选择在Instruments.app中对代码进行性能分析时默认情况下将加载哪种诊断工具。
牢记这些定义,让我们回到您的问题:
如何模拟打开xcode或从命令行定义方案?
非常简单:您不需要执行任何操作,有一种Xcode本地机制可以使方案可用,我们只需要进行一些次要的方案重新配置就可以启动并运行,然后将这些更改提交给版本控制(我是在本答案的其余部分中将其称为“ SCM”)。
在持久化项目设置时,您面临的行为是Xcode的默认项目行为。默认情况下,许多东西被认为是特定于开发人员的设置,并且驻留在一组文件中,这些文件映射到打开Xcode项目本身的帐户的特定用户名(稍后对此进行介绍)。可以将管理这些设置的策略简化为以下规则:将Xcode设置视为“开发人员专用,直到明确升级为共享”。尽管在Xcode 4之前的Xcode版本中已经出现了这种情况,但是直到引入Schemes作为调用构建的主要工具之后,这种方法才导致开发团队及其持续集成系统出现问题。
出现了一些方案,并将早期Xcode的大量设置屏幕合并到一个编辑器窗口中,开发人员可以在该窗口中查看应用程序每个不同操作阶段的最高级别设置:
运行“ Build”操作时,可以定义需要构造的目标,或者Xcode是否应该尝试自行识别构建依赖项。
对于“运行”操作,选择应使用的构建配置以及要使用的调试器。
对于“测试”操作,选择应使用哪个构建配置以及应使用哪些测试类和测试数据包来测试应用程序行为。
...等等...还有许多其他高级设置,但我将继续探索它们,作为读者的练习...或一个提出另一个SO问题的机会!
在每种情况下,这些设置都会产生某种级联效应-选择“调试”配置会在应用程序中保留尽可能多的诊断数据,以帮助开发人员跟踪问题的根源,这又将调用特定于“调试”的信息在构建目标本身中配置的构建设置,也可以运行“调试”特定的脚本或启用“调试”特定的设置。
自然,这些选择需要放在某个地方,以便可以在开发会话之间或在Xcode决定崩溃的极少数情况下保留下来。 “开发人员处于私有状态,直到晋升”的行为至高无上,并且这些Scheme设置保留在.xcodeproj文件本身的“ xcuserdata”文件夹中-对于那些驻留在.xcworkspace中的项目,这仍然适用。
您可以在自己的项目中亲自查看。首先,请确保您使用的是干净版本的代码,然后打开Xcode项目或工作区,以确保在浏览项目文件时可以使用默认方案的个人版本:
从Xcode切换到Finder,然后导航到项目的检出目录。
右键单击您项目的.xcodeproj文件,然后选择“显示软件包内容”。如果使用工作区,请仍然选择包含项目文件的.xcodeproj,而不是.xcworkspace本身
导航到“ xcuserdata”。
根据参与该项目的开发人员数量或针对该项目提交的具有不同用户名的不同计算机的数量,显然可以有多个.xcuserdatad文件夹。
选择与您的OS X用户名匹配的文件夹。对我来说,我的OS X用户名是'bmusial',所以我将选择'bmusial.xcuserdatad'文件夹。
导航到“ xcschemes”文件夹。
观察到您有两个文件:“ [TARGET NAME] .xcscheme”和“ xcschemenamagement.plist”,其中包含有关方案顺序以及是否应自动生成方案的信息。
啊哈!方案被视为开发人员专用数据,并在项目首次启动时自动生成!
这种认识开始成为我们需要做的事情的核心-将该方案从开发人员专用的xcuserdata文件夹中迁移到所有开发人员之间共享的内容中,禁用自动方案生成以防止其他人陷入陷阱中将来,并将这些更改提交给您的SCM。切换回Xcode,让我们重新配置一些内容:
导航Xcode的菜单:产品>方案>管理方案...菜单选项
取消选中方案表左上角的“自动创建方案”,
选中应该对所有开发人员用户和构建系统都可用的方案旁边的“共享”复选框。
切换回Finder窗口,并转到两个级别,以返回.xcodeproj文件夹的内容(其中包含一个“ xcuserdata”文件夹)。请注意,您现在有了一个“ xcshareddata”文件夹。此文件夹包含一个“ xcschemes”文件夹,其中包含我们刚刚共享的方案,并且我们自己的xcuserdata文件夹中的.xcscheme现在不存在了。我们刚刚将您的私有计划升级为共享的,公开的计划,所有开发人员和工具都可以使用,即使从未直接启动Xcode项目的开发人员和工具也可以使用。
将我们所做的所有更改(会有一些新的文件夹和文件!)提交回SCM,以便每个人下次下次更新源代码时都收到相同的配置更改!
下次运行phonegap
时,它将按照指示重置结帐,但是由于您已提交方案,因此它将具有可以使用的生成操作。
试试看,让我们知道事情的发展以及您在此过程中是否遇到任何后续问题。
关于bash - 在终端的xcode phonegap项目中定义方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689850/
我应该编写一个函数来打印一组给定的三个数字中两个较大数字的平方和。 我对这种情况的处理相当笨拙。我没有编写返回一组 3 中最大的两个数字的函数,而是编写了函数,以便表达式减少到两个所需的数字。 # S
如果有人可以提供帮助,我将不胜感激。我一直在敲我的头一天试图让这个工作。我已经在互联网上搜索并重新阅读了手册,但我就是不明白。 guile << __EOF__ ( define heading-li
目前我正在处理一个方案问题,其中我们正在使用方案列表表示一个图。我们使用的第一个变体是表示为 的边列表图 '((x y) (y z) (x z)) 我们正在使用的图的第二个变体被称为 x 图,表示为
我正在尝试创建一个函数,该函数将两个函数作为参数并执行它们。 我尝试使用 cond ,但它只执行 action1 . (define seq-action (lambda (action1 act
我提前为我的原始英语道歉;我会尽量避免语法错误等。 两周前,我决定更新我对 Scheme(及其启示)的知识,同时实现我在手上获得的一些数学 Material ,特别是我注册的自动机理论和计算类(cla
Scheme中有没有函数支持分数的“div”操作? 意思是 - 11 格 2.75 = 4。 最佳答案 我认为你的问题的答案是:没有,但你可以定义它: #lang racket (define (di
我在scheme中实现合并排序,我必须通过定义两个辅助方法来实现:merge和split。 Merge 需要两个列表(已经按递增顺序)并将它们合并在一起。我这样做了如下: (define merge
尝试从终端加载方案文件。我创建了一个名为 test.scm 的文件,其中包含以下代码: (define (square x) (* x x)) (define (sum-of-squares x y)
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我有点了解如何将基本函数(例如算术)转换为Scheme中的连续传递样式。 但如果函数涉及递归怎么办?例如, (define funname (lambda (arg0 arg1)
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
这个问题已经有答案了: How do I pass a list as a list of arguments in racket? (2 个回答) 已关闭 8 年前。 我有一个函数,它需要无限数量的
我对这段代码的工作方式感到困惑: (define m (list 1 2 3 '(5 8))) (let ((l (cdr m))) (set! l '(28 88))) ==>(1 2 3 (5 8
我正在为学校做一项计划作业,有一个问题涉及我们定义记录“类型”(作为列表实现)(代表音乐记录)。 我遇到的问题是我被要求创建一个过程来创建这些记录的列表,然后创建一个将记录添加到该列表的函数。这很简单
我有以下代码: (define (howMany list) (if (null? list) 0 (+ 1 (howMany (cdr list))))) 如果我们执行以
我正在尝试附加两个字符串列表 但我不知道如何在两个单词之间添加空格。 (define (string-concat lst1 lst2) (map string-append lst1
如何使用抽象列表函数(foldr、foldl、map 和 filter 编写函数),无需递归,消耗数字列表 (list a1 a2 a3 ...) 并产生交替和 a1 - a2 + a3 ...? 最
我试图找出在 Scheme 中发生的一些有趣的事情: (define last-pair (lambda (x) (if (null? (cdr x))
这个问题在这里已经有了答案: Count occurrence of element in a list in Scheme? (4 个答案) 关闭 8 年前。 我想实现一个函数来计算列表中元素出现
我正在尝试使用下面的代码获取方案中的导数。谁能告诉我哪里出错了?我已经尝试了一段时间了。 (define d3 (λ (e) (cond ((number? e) 0) ((e
我是一名优秀的程序员,十分优秀!