在iOS 8.0的SDK中,产品类型为Unit Test Bundle的代码签名是必须的。

129

问题描述:

在iOS 8.0 SDK中,产品类型为'Unit Test Bundle'的代码签名是必需的。我的应用目标已经进行了代码签名,但我的测试目标却没有。我购买了一台新电脑,从电脑上创建了一个新的开发证书,相应地更新了配置文件,安装了两者,但无法解决此代码签名错误。

请问有什么方法可以清除本地的所有证书/配置文件,以便我可以重新安装?这可能是某种错误。


我曾经遇到过类似的错误 - 我的解决方法是进入构建设置,手动选择配置文件,而不是让它自动选择。 - scb998
11个回答

129
问题在于该项目位于源代码控制之下,每次我拉取时 .xcodeproj 都会被更新。由于我的配置文件与源代码控制中的不同,因此单元测试目标自动切换为“不编码签名”。因此,每次 git pull 之后,我只需在那里设置配置文件即可。
显然,如果要部署到设备上,并且存在单元测试目标,则必须对其进行代码签名。
步骤:
1) 将目标更改为您的测试目标 (AppnameTests)
2) 确保“代码签名身份”不是“不编码签名”。选择要签名的配置文件
这就是我需要更改的全部内容,以使其正常工作。

我遇到了与上面问题相同的问题,但是无法找出如何解决它,并且我已经发布了一个相关的问题。https://stackoverflow.com/questions/27312745/getting-error-on-building-a-app-on-xcode-6-1 - Neal
请问您能否逐步告诉我如何完成它的过程。 - Neal
在Xcode 8中遇到了问题。解决方案与您的不完全相同,但很接近。感谢您指引我方向! - user3259235
此外,除了设置“代码签名标识”之外,您可能还需要设置“开发团队”。 - bitsand

100

我通过进入“编辑方案”,然后在构建部分中,将我的单元测试目标从“运行”中移除来解决了这个问题(暂时地)。


1
好的发现!你为什么说“暂时”?在我看来,这似乎是一个合理的解决方案。你把应用提交到商店了吗? - mokagio
将应用提交到App Store没有问题。我之所以说“暂时”,是因为我认为通过调整代码签名可能有更持久的解决方案,但这是一个快速无麻烦的解决方法。 - Z S
2
很酷,谢谢。对我来说看起来是个好的解决方案,单元测试目标不应该运行。+1 - mokagio
你能详细解释一下吗?你的意思是我需要“构建”吗?而且我不明白“从运行中移除我的单元测试”的含义。 - LKM

66

这里其他的建议对我没有帮助,但是我通过进入 Product > Scheme > Edit Scheme 来解决了这个错误。然后在左侧单击 Build 并取消选中任何与 AppNameTests 相关的复选框。我正在使用 XCode 6.3。

输入图片描述


@Almo 不要取消选择“测试”下面的任何复选框,而是取消在标有APPNAMEtests的行中的所有内容(您可以取消选择的部分)。我会在我的回答中附上一张截图以帮助澄清。 - Olivia Stork
1
我尝试了这个方法,除了测试之外,我把所有选项都取消了。结果发现我需要删除一个.plist文件才能停止尝试对测试进行代码签名。我的项目构建了一个静态库,因此不需要对其进行代码签名。 - Almo
1
啊,好的。看起来这个问题有很多可能的原因,也有很多解决方法。如果没有其他人提到你的解决方案,你可以考虑将其发布为另一个可能的答案。 - Olivia Stork
3
欢迎来到iOS编程! - Olivia Stork
如果您取消选择此选项,则无法运行应用程序的测试用例。 - Sazzad Hissain Khan
1
@OliviaStork,你帮了我一个大忙。非常感谢你挽救了我的工作。 - Anurag Shrivastava

29

我通过在测试目标的构建设置中手动选择一个配置文件解决了这个问题。

测试目标设置 -> 构建设置 -> 代码签名 -> 代码签名标识。之前,它被设置为“不进行代码签名”。


选择显式地配置文件对我有用,谢谢。 - Mike Weller
请确保在顶部选择了“全部”筛选器,而不是“基本”。 - Marty

13
此外,如果您设置了构建目标设备,则在测试和调试时问题将消失。只有在尝试将应用部署到实际物理设备时才需要签署代码。 我将我的构建目标设备从“我的iPhone”更改为模拟器iPhone 6 Plus,在开发应用程序时解决了这个问题。fig

2
但是如果您想将应用部署到物理设备上呢? - Marwen Trabelsi

8
在我的情况下,我遇到的问题是:

CodeSign错误:在iOS 8.4 SDK中,“Unit Test Bundle”产品类型需要代码签名

幸运的是,目标没有实现任何东西,因此一个快速的解决方案是将其移除。

输入图像描述


4

如果以上解决方案都无效,请按照以下步骤操作:

从目标中选择appnameTests 在“信息”下面

进行如下更改:

Bundle Identifier: com.ProjectName.$(PRODUCT_NAME:rfc1034identifier)

修改为:com.ProjectName.appname

Bundle name: $(PRODUCT_NAME)

修改为:appname

编译并执行


2

在我的工作CI上,当我从命令行运行xcodebuild进行集成测试时,遇到了这个错误。通过将项目级别的设置为codesign,我成功地解决了这个问题。由于某种原因,目标设置被忽略并恢复为项目的设置。


1

我通过将同一部分(“代码签名”)中的“Provisioning Profile”从“自动”更改为“MyProvisioningProfile名称”来解决问题。


0
有时候,当你从Github或其他第三方教程网站下载项目时,会出现这种情况。这些应用程序通常使用不同的身份或公司/名称进行签名。当发生这种情况时,如果你无法解决问题,只需创建一个新的Xcode项目,并将所有头文件和实现文件复制到新项目中。还要记得依赖文件,如框架文件。这对我很有效。

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