macOS Monterey、Xcode中的代码签名错误 - 不允许资源叉、Finder信息或类似残留物。

325

已经尝试过:macOS Sierra上的代码签名错误,Xcode 8

请查看显示错误的图片 在此输入图片描述

CodeSign /Users/gururajtallur/Library/Developer/Xcode/DerivedData/Flow-bkqjkvtmvjovpyepfjeyqmjpintj/Build/Products/Debug-iphoneos/Super\ Flow\ Flip.app
    cd "/Volumes/Development/Project/Top Best Games/19. Lets Flow/35/let's FLOW - source/proj.ios_mac"
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

Signing Identity:     "iPhone Distribution: New Free Games (2CHN583K4J)"
Provisioning Profile: "Super Flow Flipp AppStore"
                      (c6c30d2a-1025-4a23-8d12-1863ff684a05)

    /usr/bin/codesign --force --sign E48B98966150110E55EAA9B149F731901A41B37F --entitlements /Users/gururajtallur/Library/Developer/Xcode/DerivedData/Flow-bkqjkvtmvjovpyepfjeyqmjpintj/Build/Intermediates/Flow.build/Debug-iphoneos/Super\ Flow\ Flip.build/Super\ Flow\ Flip.app.xcent --timestamp=none /Users/gururajtallur/Library/Developer/Xcode/DerivedData/Flow-bkqjkvtmvjovpyepfjeyqmjpintj/Build/Products/Debug-iphoneos/Super\ Flow\ Flip.app

/Users/gururajtallur/Library/Developer/Xcode/DerivedData/Flow-bkqjkvtmvjovpyepfjeyqmjpintj/Build/Products/Debug-iphoneos/Super Flow Flip.app: resource fork, Finder information, or similar detritus not allowed
Command /usr/bin/codesign failed with exit code 1

在代码签名部分,它允许我选择配置文件和证书...但仍然出现错误。在这里输入图片描述

enter image description here

如何解决这个问题?

2
你执行了清理和“alt”清理吗? - thorb65
意思是什么?我刚刚从Xcode账户重新创建了证书,重新在网站上生成了配置文件,然后再次尝试...但仍然没有成功。 - iPhoneProcessor
Arnold Roas的下面的回答对我的项目很有帮助。但是你可能还需要在XCode中执行Product > Clean,以便编译成功。 - Fredrik Johansson
加号用于cocos2d-x。 - fnc12
26个回答

707

解决方案1:

苹果开发者网站提供了上述问题的答案,在此处

在终端中执行以下命令:首先进入项目根文件夹。

 xattr -cr <path_to_project_dir>

清理 Xcode 并重新构建。

解决方案二:

只需进入项目根目录并运行此命令 xattr -cr .

xattr -cr .

清理 Xcode 并重新构建。

Solution 3:

你可以通过查找保存有 Finder 信息的文件来解决这个问题。

在终端中,前往项目根目录并执行以下命令:

ls -alR@ . > kundapura.txt

这将在当前目录中创建kundapura.txt。现在搜索com.apple.FinderInfo并清除所有文件的此属性。您可以像这样执行:

xattr -c <filename>

例子:xattr -c guru.png

一旦你清除了所有内容,代码签名就会起作用。清理Xcode并重新构建。干杯!

解决方法4:受Mark McCorkle的回答启发

在终端中,转到项目的根目录并逐个执行以下命令

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

清理 Xcode 并重新构建。


7
这个固定代码签名错误在Xcode 8中。非常好的解决方案。 - iPhoneProcessor
4
我有110个这样的文件。有什么Bash命令可以自动处理它们吗? - Fawkes
1
顺便说一下,xattr -rc 修复方法对于tif图像无效。您必须从项目中删除tif图像。我猜tif图像根据苹果的说法属于“碎片”。 - Jim Merkel
1
非常好的答案,除了我不得不对“*.json”文件做同样的事情 - 其中一个文件隐藏了我的问题。 - Marek Manduch
2
非常好的解释。顺便说一下,第一个命令有点混淆,应该是 xattr -cr <path_to_project_dir> 或者只是 xattr -cr .,而不是 xattr -cr <path_to_app_bundle>。运行得很好! - fbitterlich
显示剩余27条评论

187

错误源于您的图像文件内的属性。这是由于我们的图形设计师在 Photoshop 中保存图片时使用了属性。

这里有一个简单的命令,可以查找所有 png 文件并删除它们的属性。从终端在项目根目录下运行此命令,然后清理和重新构建;问题解决。

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

12
这应该是被采纳的答案。更简单、更快,而且不需要手动操作。根据@NatureFriend的答案,我有80个有问题的文件。 - Roger Oba
3
谢谢!为了寻找这个奇怪错误的答案,我花费了很多时间——简直是巨大的浪费! - lppier
对我来说,一个更快的无终端解决方案就是将所有图像拖到ImageOptimizer中(它还会清除所有无用属性)。 - blackjack75
我从Pixelmator保存了一个新图标,但遇到了同样的问题。谢谢。 - Guy Lowe
这对我有用。我在上面的“xcattr -cr”命令上遇到了权限被拒绝的问题(即使是通过苹果文档https://developer.apple.com/library/archive/qa/qa1940/_index.html进行操作)。在High Sierra 10.13.4上运行Xcode 9.3。 - Randoramma
我搜索了很久,好几天。问题出在这里。我可以将应用程序部署到智能手机上,但无法构建我的应用程序。我只是更改了资源中的一张图片。我使用Xamarin.forms和Visual Studio工作,VS生成的错误似乎与此完全无关。有时会出现“本地链接失败”,然后只是某些随机库不兼容,但最终,这些错误都是胡说八道...问题出在包含元数据的图像上... - innom

111

如果您在对应用程序进行代码签名时出现以下错误:

resource fork,Finder信息或类似的垃圾不允许 命令/usr/bin/codesign执行失败,退出码为1

前往项目根目录并执行以下操作:

find . | xargs -0 xattr -c

这将清除所有文件的属性。

在Sierra中,签名捆绑包中允许的内容规则已经收紧,资源叉不再被允许。虽然AppleScript一直在资源叉中保存信息,但是该信息已经很长时间没有使用了。在Sierra中,当您保存脚本时,此资源叉信息将不再被保存。

这意味着您不能为最后保存于Sierra之前版本的脚本进行代码签名;您必须在Sierra中保存才能在Sierra中进行签名。

可能会受到影响的人是将其他脚本捆绑在其脚本中的人(cordova?)。在所有嵌入式脚本都在Sierra下重新保存之前,他们将无法对容器脚本进行签名。

更新:

看起来这也起作用:

xattr -rc .

如果您遇到任何不足权限的错误,请尝试在命令前添加sudo:sudo xattr -rc .


5
我在终端尝试了一下,显示“参数空间不足”。 - Fawkes
1
这个方法非常有效!我还需要在XCode中进行Product > Clean操作,但是之后我的项目就构建成功了! - Fredrik Johansson
谢谢,太棒了,它起作用了。在我的情况下,问题是我可以在设备上测试而没有问题,但当我尝试在模拟器中时,它不起作用并显示上述问题。您的解决方案解决了我的问题。 - Mahmud Ahsan
我正在使用Corona SDK进行构建,遇到了同样的问题。 xattr -rc 对我有用。 - AbaEesa
“find . | xargs -0 xattr -c” 对我很有效。运行该命令后,我清理了项目并重新构建。 - Fritz Lim

38
处理源文件属性的最简单方法是在Xcode运行codesign之前清除归档文件。操作如下:
  1. 在XCode中选择您的目标。
  2. 选择“Build Phases”选项卡。
  3. 按“+”符号。
  4. 选择“New Run Script Phase”。
  5. 输入以下脚本:

    xattr -cr ~/Library/Developer/Xcode/DerivedData || echo Clear

现在,当你构建你的目标时,它将清除任何可能导致codesign错误的属性。通过在这个阶段清除属性,您不必修改您的源代码/项目目录。
脚本中的"|| echo Clear"部分确保即使xattr出错,项目构建也会继续进行。
如果您在代码库中使用DropBox等程序添加属性,则此方法很好,因为它不会更改您的源项目,只会更改构建的归档文件。
您可能需要更改路径以匹配您的DerivedData目录-此路径将显示在codesign错误旁边。 xattr codesign xcode fix

1
这个问题只在我使用Finder中的⌘-D创建一个与之前完全相同的项目时出现。由于某种原因,没有任何更流行的解决方案适用于我。但是这个解决方案有效。 - clozach
1
谢谢!搜索了两个小时终于解决了这个问题。 - Carter Cobb
1
终于!经过几个小时试图其它解决方案,这个解决了它!!首先尝试这个,但用codesign错误显示的路径进行替换。 - jmf1205
对我而言,问题在源代码中的一张图片上... 所以我添加了一个运行脚本来执行以下操作xattr -cr "$PROJECT_DIR" - Paul Stevenson
xattr -lc,正如另一个答案所建议的那样,确认了问题中的属性确实来自DropBox,因为我的项目文件夹位于DropBox文件夹内。建议在DerivedData文件夹中去除这些属性的方法完美地解决了问题,并保持了我的DropBox文件夹的完整性! - Thunk
显示剩余2条评论

35

我已经使用了以下命令。在终端窗口中执行。导航到你的项目并执行以下命令:

xattr -rc .

1
有时候只清除项目目录中的属性就可以解决问题。苹果真烂,为什么要做出这样的垃圾东西。 - Anton Malyshev
除了得票最高的答案,这也作为一种替代方案起作用。 - Lance Samaria
我还需要在操作之后清理项目文件夹<cmd+K>才能使其工作。 - Lance Samaria
请注意,此命令还将删除文件夹的自定义图标并杀死文件夹中的别名(它们将停止工作)。因此,如果您有任何别名,请先备份它们,然后在运行命令后恢复。您还需要恢复自定义图标。 - Leo Braun

24
这个问题在苹果官方有一个答案,位于Technical Q&A QA1940
这是iOS 10、macOS Sierra、watchOS 3和tvOS 10引入的安全强化更改。代码签名不再允许应用程序包中的任何文件具有包含资源 fork 或 Finder info 的扩展属性。
要查看哪些文件导致了此错误,请在终端中运行以下命令:xattr -lr <path_to_app_bundle> 您也可以使用 xattr 命令从应用程序包中删除所有扩展属性:xattr -cr <path_to_app_bundle> <path_to_app_bundle> 可以替换为 Xcode 项目的目录。例如: ~/Development/MyProject

在尝试了几乎所有其他提出的解决方案后,xattr -lr <path_to_app_bundle> 最终找到了正确的文件。从代理处得到一个带有 Finder 标签的 Localizable.strings 文件,这些标签导致 Codesign 失败。 - JanR
我在这个问题上浪费了两天时间,最终这个解决方案对我起作用了! - bhakti123

17

清理文件很好,但对于多个项目来说有些繁琐。

像旧版本的Photoshop这样的图形应用程序会在外部文件中写入其他信息(我们现在称之为元数据..),或者它们来自旧版的OSX,例如以下文件:

"com.apple.ResourceFork"和"com.apple.FinderInfo",例如解压文件夹时。

Xcode 8拒绝将其添加到构建中(因为您可能已经使用"git --add。"将它们添加到项目中)您可以在终端中递归地查找并删除它们,但可能很繁琐。

我编写了一个小型的免费实用程序来删除它..希望它能有所帮助..

https://itunes.apple.com/us/app/cleandetritus/id1161108431?ls=1&mt=12


这个是唯一一个对我有效的解决方案,尽管应用程序已经崩溃了很多次“可能是由于项目文件数量过多”,但它清理了文件,最终使项目正常工作。谢谢! - XIII
我下载了你的应用程序,它为我清理了所有东西!谢谢! - Bobby
我会在有空闲时间的时候尽快修复大型项目的崩溃问题! - ingconti
是的,我遇到了你提到的崩溃问题。无论如何,你创建一个帮助社区的免费工具非常酷。+1 - Dan Beaulieu
谢谢您;CS4的解决方案。 - slashlos
显示剩余4条评论

13

对于那些(像我一样)只是想开发一个应用程序,而不必在将每个新的Photoshop创建的PNG添加到macOS目标时剥离扩展属性的人,您可以通过添加用户定义的构建设置来暂时禁用代码签名:

CODE_SIGNING_ALLOWED = No 

显然,发布应用程序的人需要最终处理这个问题,但这使得像我这样的情况能够进行开发,其中在Sierra中省略代码签名并不容易(在过去的OS X / Xcode上更容易)。

根据RGriffith的评论,以下是一些截图,供那些不确定如何添加自定义构建设置的人参考。

输入图像描述

输入图像描述


你把这个添加在哪里? - RGriffiths
好的解决方案。节省了我的时间。谢谢。 - Bruce

11

-----如果您由于缺乏bash知识或其他原因而无法应用上述解决方案。

我也曾遇到这个问题,当我在Sierra上启用iCloud Drive时出现了这个问题。而我的项目位于一个与iCloud Drive同步的文件夹中。我想这就是添加了那些额外属性的原因。

临时解决方案:

禁用包含项目的文件夹的iCloud Drive功能。


我从iCloud Drive移动到桌面,现在正常工作。谢谢。 - drasick
这对我来说是解决方案的一部分。我在桌面上有一个项目,它在Sierra下备份到iCloud中。在将项目从桌面移走后,我仍然需要在终端中键入xattr -rc .以删除有问题的文件。其他解决方案都无法解决此步骤。 - Roger Pingleton
这也是我的问题:iCloudDrive会导致非常烦人的错误,我向苹果报告了一个漏洞-> 31740606。 - LukeSideWalker
这基本上也是我的问题,但我不需要禁用iCloud的项目文件夹,或移动项目文件夹,或做任何类似的事情。我只需进入Xcode Prefs->Locations->Advanced并选择Build Location的“Unique”选项。我一直在使用xcode项目文件的子文件夹中的构建位置,该文件夹位于iCloud驱动器上。我认为默认值是Unique,我不知道为什么要更改它,也许是为了更容易地在构建后找到可执行文件。 - daver

11

简单解决方案:-

我的做法 [适用于我]

步骤1:- 从Finder中按选项Go - > Go to Folder进入以下文件夹:

例如:Library/Developer/Xcode/DerivedData/yourprojectname/Build/Products/Debug-iphoneos 现在你会看到一个窗口弹出,里面有可用文件的列表,在那里你会看到你的App.app文件[不要做任何事情,只需等待第2步]

步骤2:- 打开新的终端并键入cd然后将步骤1中的yourApp.app拖到终端中,现在您将获得应用程序的路径,然后按Enter键。

步骤3:- 现在键入此命令 **

xattr -rc .

不要错过 "."(点) 按Enter键。

就这样,返回Xcode项目并清除和再次运行。


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