运行 单元测试后代码签名失败
Code signing is failing after running unit tests
我最近更新到 Xcode 8 并将我的代码转换为 Swift 3。现在我的单元测试失败了,可能是他们应该的,但是当尝试 运行 再次.
我使用了多个 CocoaPods,但它们以前都可以使用。在 UnitTesting 之外一切正常。
到目前为止我找到的唯一修复方法是清除 CMD+ALT+K并重建解决方案。
有人对此有永久性修复吗?
错误
/Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app: replacing existing signature
/Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app: code object is not signed at all
In subcomponent: /Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app/Contents/PlugIns/***Tests.xctest
Command /usr/bin/codesign failed with exit code 1
编辑:当运行宁单元测试都成功时,代码签名在第二个运行.基本上我必须在每次测试前清理构建 运行.
我的解决方案是转到工作区中的 Pods 项目,然后在 pod 目标上打开代码签名。
这要么打开了 Swift 3 迁移中缺少的一些设置,要么这是实际的解决方案。
对我有用的是转到测试目标并打开 "Automatically manage signing." 我的应用程序已经打开了自动签名,所以我认为自动签名时 Xcode 有问题也没有为测试目标打开。
我想在这里分享另一个解决方案,根据我上面的评论,这似乎主要影响具有相同症状的 Mac OS 应用程序项目(不是 iOS):测试目标的代码设计失败,当应用程序目标代码设计良好,并为两者启用自动代码设计时。
None 其他解决方案有效 - 我的问题似乎根本不涉及代码设计配置。以某种方式在非 UI 测试目标中包含 UI 类 并依赖于应用程序目标会触发代码签名失败。
这种情况下的解决方法是:
- 确保所有具有 UI 依赖项(NSViewController 等)的 类 在非 UI 测试中 未 编译目标
- 在测试目标设置 Build Phases->Dependencies 中,从测试目标的依赖项中删除 app 目标。
这两个步骤使我能够再次 运行 非 UI 单元测试 Xcode 11.
中没有代码签名错误
我认为在 .xcodeproj 中保持一致是正确的答案。对于我的项目,这是一个 macOS 项目,在 Xcode 12 上编译 10.15+,当我创建一个新的测试目标时,它检查了 Automatically Manage Signing
,即使我的其他方案没有被检查,我正在处理都是手动的。
所以我取消选中 Automatically Manage Signing
,然后在测试目标的 Build Settings -> Code Signing Identity
下,从下拉列表中选择 select Other
。然后确保删除此 -
虚线。从那里它成功地为我建造了。
我最近更新到 Xcode 8 并将我的代码转换为 Swift 3。现在我的单元测试失败了,可能是他们应该的,但是当尝试 运行 再次.
我使用了多个 CocoaPods,但它们以前都可以使用。在 UnitTesting 之外一切正常。
到目前为止我找到的唯一修复方法是清除 CMD+ALT+K并重建解决方案。
有人对此有永久性修复吗?
错误
/Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app: replacing existing signature
/Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app: code object is not signed at all
In subcomponent: /Users/***/Library/Developer/Xcode/DerivedData/***-bbpdbvqjecpwzvfliyyqcnarjvua/Build/Products/Pro Debug/***.app/Contents/PlugIns/***Tests.xctest
Command /usr/bin/codesign failed with exit code 1
编辑:当运行宁单元测试都成功时,代码签名在第二个运行.基本上我必须在每次测试前清理构建 运行.
我的解决方案是转到工作区中的 Pods 项目,然后在 pod 目标上打开代码签名。
这要么打开了 Swift 3 迁移中缺少的一些设置,要么这是实际的解决方案。
对我有用的是转到测试目标并打开 "Automatically manage signing." 我的应用程序已经打开了自动签名,所以我认为自动签名时 Xcode 有问题也没有为测试目标打开。
我想在这里分享另一个解决方案,根据我上面的评论,这似乎主要影响具有相同症状的 Mac OS 应用程序项目(不是 iOS):测试目标的代码设计失败,当应用程序目标代码设计良好,并为两者启用自动代码设计时。
None 其他解决方案有效 - 我的问题似乎根本不涉及代码设计配置。以某种方式在非 UI 测试目标中包含 UI 类 并依赖于应用程序目标会触发代码签名失败。
这种情况下的解决方法是:
- 确保所有具有 UI 依赖项(NSViewController 等)的 类 在非 UI 测试中 未 编译目标
- 在测试目标设置 Build Phases->Dependencies 中,从测试目标的依赖项中删除 app 目标。
这两个步骤使我能够再次 运行 非 UI 单元测试 Xcode 11.
中没有代码签名错误我认为在 .xcodeproj 中保持一致是正确的答案。对于我的项目,这是一个 macOS 项目,在 Xcode 12 上编译 10.15+,当我创建一个新的测试目标时,它检查了 Automatically Manage Signing
,即使我的其他方案没有被检查,我正在处理都是手动的。
所以我取消选中 Automatically Manage Signing
,然后在测试目标的 Build Settings -> Code Signing Identity
下,从下拉列表中选择 select Other
。然后确保删除此 -
虚线。从那里它成功地为我建造了。