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

Posted

技术标签:

【中文标题】每当我尝试在新的 SceneKit 应用程序中替换库存文件时出现代码签名错误【英文标题】:Code Signing Error Whenever I try replacing stock files in new SceneKit application 【发布时间】:2016-10-16 07:01:14 【问题描述】:

所以 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

问题的结论:

当我所做的只是替换文件时,为什么会出现签名错误?

旁注:我知道如何解决代码签名问题,但这涉及重新启动整个项目(我不介意)。然而,我面临的问题是,每当我更改文件时,都会出现此错误。

P.S:这是一个文件结构,只是为了方便。

【问题讨论】:

见:***.com/questions/39652867/… 【参考方案1】:

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

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

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

3) 运行

xattr -rc .

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

重建您的应用程序!

【讨论】:

救命! 感谢上帝。和你。我没有这个问题更新到 xCode 8,但只有在升级到 Sierra 之后。现在修好了。谢谢 为我解决了这个问题。非常感谢! 不太明白为什么这会奏效,或者我是否每次都必须这样做,但它奏效了——谢谢!!! 正如@JFMG 之前提到的,只做#3 也可以【参考方案2】:

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

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

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

【讨论】:

Man xCode 太模糊了。我希望这样的事情是不言自明的,当错误表明它是代码签名问题时,我花了大约 2 个小时在开发人员站点上处理配置文件和签名证书,这确实是一个图像属性问题! WTF苹果!我们需要更好的调试信息... 值得一提的是,对我来说,我必须清理我的~/Library/Developer/Xcode/DerivedData/ 并使用cmd+k 进行清理。只有这样它才起作用。感谢马克的简单解决方案!【参考方案3】:

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

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

ls -alR@ . > investigate.txt

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

我没有做任何改变!【参考方案5】:

我无法删除查找器信息并且重新启动不起作用。对我来说(我安装了 Sierra beta),这是因为该项目位于与 iCloud 同步的 Documents 文件夹中。一旦我创建了一个不在与 iCloud 同步的文件夹中的项目,它就可以正常工作,因此该错误可能也与 iCloud 相关/而不是与 Xcode 相关

【讨论】:

我的项目未与 iCloud 同步,但仍然出现此错误!【参考方案6】:

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

【讨论】:

【参考方案7】:

这是一项在 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 的 Show Package Contents 命令浏览捆绑包中的文件可能会导致将 Finder 信息添加到这些文件中。否则,请审核您的构建过程以查看添加扩展属性的位置。

【讨论】:

以上是关于每当我尝试在新的 SceneKit 应用程序中替换库存文件时出现代码签名错误的主要内容,如果未能解决你的问题,请参考以下文章

我想在代码部署运行时在新的自动扩展组替换的EC2实例上运行脚本

MySQL 查询在新的 XAMPP 安装中非常慢[关闭]

`npm run storybook` 在新的反应项目中失败

如何在新的谷歌控制台中启用谷歌地图 API v2

Heroku 图像在新的推送中消失了

如何在新的 AppDomain 中运行从加载到引用的程序集的方法