每当我尝试在新的 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实例上运行脚本