目标成员资格灰显(已禁用)

8

我正在尝试为我的iPhone应用程序创建一个新的单元测试构建目标。 我遇到的问题是我的源代码“组”的目标成员选项变灰了。

我已删除原始的“Classes”文件夹,并创建了一个新的“SourceCode”文件夹,其中包含实际的磁盘结构(感谢xcode)。 我将其导入为一个组,而不是文件夹。 它自动添加到我的标准构建目标的编译源中,但我不能将其添加或拖入我的新目标。

有什么想法吗?

alt text http://img.skitch.com/20100118-mhurmqc33ecaq4xq3y2e5k3hs4.jpg


jpg链接已失效。 - Will Gwo
3个回答

8

我曾经遇到过Xcode 10.2和一个相当老的项目发生了这种情况。对我来说,原因是在目标设置中,"构建阶段"下的目标中缺少了"头文件"项。点击"+",选择"新建头文件阶段"。现在,您可以正确地将头文件添加到目标中。


3
谢谢。我遇到了同样的问题,但是针对本地化文件,我只需要创建一个空的“复制包资源”部分,然后目标成员复选框就会启用,这样我就可以单击它了。 - Daniel
@Daniel,你说的“empty Copy Bundle”是什么意思? - Nicholas Mberev
复制捆绑资源位于构建阶段下。点击“+”以查看选项。 - undefined

1

首先,您的源代码不应该放在单元测试目标中。只有单元测试源代码本身应该放在该目标中。其次,编译源代码的构建阶段不能构建一个组,只能构建单个文件。因此,即使您的组在目标中,我也会怀疑它是否在正确的构建阶段或者它的源代码是否会被编译。

取消选中目标以将组从中移除,然后选择源代码文件并将它们拖到目标上。


1

cdespinosa的回答是正确的方向,但并不完全正确。实际上,源文件确实需要进入单元测试目标,但您只需要包括已经通过测试的文件。

我找到了解决方法,问题实际上是,如果一个组包含任何无法包含的文件(例如头文件),则Info对话框无法智能处理这些文件,而只会将您锁定。即使您想要包括组中的所有内容,也必须手动选择每个.m文件。如果您有一个庞大的项目,我建议制作一个“智能组”(与xcode的普通“愚蠢组”相对),它将允许您仅过滤.m文件。

为什么?为什么xcode在导入一堆文件时能够弄清楚其中一些文件无法包含在构建中,但无法对现有文件做出同样的区分?好问题。在我看来,这是xcode的常规操作。


你上一个问题的技术答案是,拖放是通过迭代完成的,而检查器是基于绑定的,并且只验证所有元素都具有设置的有效键路径的数组。 至于单元测试,你是对的,iPhone应用程序单元测试需要将应用程序源代码添加到目标中。Mac单元测试使用束注入,不需要将应用程序的源代码添加到单元测试目标中。 - cdespinosa
感谢您澄清,我想从功能的角度来看这是有道理的,但在这种情况下,我仍然认为苹果牺牲了可用性以实现技术上的正确性。如果我检查一个文件夹是否包含在目标中,我显然不希望它包含不能包含的东西,并且可以聪明地处理。没有您的观点有问题,只是我对苹果公司的抱怨。再次感谢。 - DougW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接