代码签名错误每当我尝试在新的 SceneKit 应用程序中替换库存文件时

Code Signing Error Whenever I try replacing stock files in new SceneKit application

所以 Xcode 8 最近发布了,我仍然不确定到底是什么导致了这个问题(可能只是因为它是 Xcode 的测试版,或者也许我不知何故做错了什么)。

手头的问题是我正在尝试创建一个新的 SceneKit 应用程序,而我目前正在处理 .scn 文件。

我在 "hero.scnassets" 中创建了一个 .scn 文件 "hero.scn" 并且还在 hero.scnassets 文件夹中提供了一个名为 "heroTexture.png" 的 .png 文件

通常由Xcode 8.0 beta 1 为该项目在"GameViewController.swift" 文件中提供的代码编辑如下:

原码:

...
let scene = SCNScene(named: "art.scnassets/ship.scn")!
...
let ship = scene.rootNode.childNode(withName: "ship", recursively: true)!
ship.run(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)))

编辑代码:

...
let scene = SCNScene(named: "hero.scnassets/hero.scn")!
...
let hero = scene.rootNode.childNode(withName: "hero", recursively: true)!
hero.run(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)))

收到错误:

.../Xapp.app: resource fork, finder information, or similar detritus not allowed
Command /usr/bin/codesign failed with exit code 1

问题结论:

Why am I getting a signing error when all I've done is simply replaced files?

Sidenote: I know how to get the code signing issue to go away but that involves restarting the entire project (which I don't mind). The problem I face however is whenever I change the files, I get this error.

P.S: 为了方便起见,这里有一个文件结构。

已修复!显然这是新 Xcode 的错误。您应该做的是重新启动 OS X/macOS 并清理项目。它应该在那之后工作!

我在安装开发版 macOS 后遇到 resource fork, finder information, or similar detritus not allowed 错误,在我的情况下,这是由我的某些文件的无效属性引起的。

我通过搜索在我的文件上设置的 com.apple.FinderInfo 属性来修复它

ls -alR@ . > investigate.txt

现在在您最喜欢的文本编辑器中打开 investigate.txt 并搜索 com.apple.FinderInfo 并清除所有设置了此属性的文件的属性。您可以使用

xattr -c <filename> 例如xattr -c iTunesArtwork.png

清除所有文件后,我就可以再次对我的应用程序进行代码签名。

我无法删除取景器信息,重新启动也没有用。对我来说(我安装了 Sierra beta),这是因为该项目位于我的文档文件夹中,该文件夹与 iCloud 同步。一旦我创建了一个不在与 iCloud 同步的文件夹中的项目,它就可以正常工作,所以该错误可能与 iCloud 有关,因为 well/instead 与 Xcode

通过三个简单的步骤消除此构建错误:

1) 删除 DerivedData 中与您的应用相关的最新文件夹 (~/Library/Developer/Xcode/DerivedData)

2) 在终端中,cd 到当前项目目录

3) 运行

xattr -rc .

删除所有扩展属性(通常与以前在 Photoshop 中编辑过的图像文件有关)

重建您的应用程序!

错误来自图像文件中的属性。

这是一个简单的命令,可以找到您所有的 png 文件并删除它们的属性。 运行 在终端的项目根目录中。重建、清理并解决问题。

find . -type f -name '*.png' -exec xattr -c {} \;

这似乎解决了问题。在项目根文件夹之外创建一个 .atlas 文件夹(即 "myImages.atlas")。将图像添加到 .atlas 文件夹。然后从项目 "add files to..." 中的 .atlas 文件夹中,(注意:避免将 .atlas 文件夹放在 art.scnasstes 文件夹中,并确保在重建之前项目在 "cleaned" 中)

这是 iOS 10、macOS Sierra、watchOS 3 和 tvOS 10 引入的安全强化更改。

代码签名不再允许应用程序包中的任何文件具有包含资源分支或 Finder 信息的扩展属性。

要查看导致此错误的文件,运行 在终端中执行此命令:

$ xattr -lr

替换为实际应用程序包的路径。

下面是这个命令的一个例子:

$ xattr -lr Foo.app

/Applications/Foo.app:com.apple.FinderInfo:

00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|

您还可以使用 xattr 命令从应用程序包中删除所有扩展属性:

$ xattr -cr

请注意,使用 Finder 的“显示包内容”命令浏览捆绑包中的文件可能会导致将 Finder 信息添加到这些文件中。否则,审核您的构建过程以查看在何处添加了扩展属性。