dyld`__abort_with_payload: 没有错误信息

114

当我使用Xcode启动我的应用程序时,它崩溃了,但没有显示任何错误信息。

应用程序停止在这个线程上:

图片描述

我该如何获取更多关于这个问题的信息?

32个回答

117

如果您正在使用自定义框架,您需要将其放置在 Xcode 项目下的 Target / General 标签中的“嵌入式二进制文件”部分。


1
我有一个自定义框架,它在Xcode项目的Target > General下的“嵌入式二进制文件”中列出。但是当我尝试运行单元测试时,仍然遇到了这个问题。最近,我将代码中的Swift部分从2升级到了Swift 3。如果这有帮助的话... - Mario A Guzman
@MarioAGuzman 你是怎么解决这个问题的?我也在Swift 3迁移后面临着同样的问题。 - iOS
@iOS 很遗憾,我没有真正的解决方法。这个问题在刚刚发布的 Xcode 8.3 中得到了解决。 - Mario A Guzman
为什么这需要在“嵌入式二进制文件”部分?我正在尝试使用ObjectiveDropboxOfficial.framework。我一直得到这个错误,将它放在Embedded中然后它就被“修复”了。但是,我又将它拿出来了,它仍然保持“修复”。其他已经配置相同的目标好像会失败。Dropbox安装文档没有说要放在Embedded Frameworks中。 - Jim Leask
那很有帮助。同时确保在“链接的框架和库”中没有重复项。当您将其添加到嵌入式部分时,它会自动添加到链接部分。 - milesmeow

67

对我来说,简单的 清理重建 就解决了问题。


109
清理,清理生成文件夹,删除派生数据文件夹中的内容,如果适用则执行 Pod 安装,重新启动 Xcode,重新启动计算机;最后为确保万无一失,在门上涂抹一些羊血。 - johnnyclem
删除目录和从git获取最后一次提交并没有帮助,但是清理并重新构建确实有所帮助 - えるまる
13
在我的情况下,我不得不在我的门框上系上辣椒和柠檬。 - Naresh
这对我没有解决问题,但至少给了我一个更好的错误信息去谷歌。 - Max
在哪里?在Xcode中吗?是哪个菜单? - Peter Mortensen
@PeterMortensen 在Xcode中,点击“Product” -> “Clean build folder”,等待清理完成后再点击“Product” -> “Build”。希望这能帮到你 :-) - FlixMa

32

在升级到macOS 10.15.2 beta(Catalina)之后,出现了这个问题。禁用“线程检测器”解决了这个问题(Xcode 11.2)。现在我不能使用线程检测器,必须等待下一个操作系统更新。

Enter image description here


6
此帖回答了关于在升级到Mac 10.15.2后,在Xcode 11.3模拟器中出现问题时的原始问题。看起来是苹果的错误,请查看https://forums.developer.apple.com/thread/126891。 - Vadim Motorine
[Xcode 13.1 on macOS 12.0.1] 当 "Thread Sanitizer" 打开时仍会导致 Abort,但是运行 iOS 15 的模拟器似乎即使选项打开也没问题。 - WPK

20

将这个框架加入嵌入式二进制资产列表中解决了这个问题。以下是外部框架在Xcode GUI中设置为嵌入式框架的最终形式(我个人更喜欢视觉面包屑):

Enter image description here

苹果是否有意让运行时崩溃以某种方式告诉开发人员不能将非苹果框架作为iOS开发中的简单链接框架使用?我认为更好的方法是提出构建错误并附带一个按钮,上面写着“移动它!”

使用嵌入式二进制文件可使最终用户不必独立添加框架(或者让您通过安装程序完成)。对于iPhone(iOS),这是不可能的,但在macOS上,它是可能的,但速度会很快变慢。

对于最终用户而言,仅需将应用程序拖放到macOS上即可安装,这就是嵌入的好处。嵌入还避免了管理外部版本框架的经典“DLL冲突”问题。(磁盘空间很便宜,但我的客户的时间很珍贵。)


小更新。现在,Xcode 10.1允许您将自定义框架从“Link Binary With Libraries”部分拖到默认位置到“Copy Bundle Resources”部分需要的位置... 它不再只复制引用,而是同时移动它。截图在这里:https://dev59.com/1F8f5IYBdhLWcg3wJPtl#55196527 - Cerniuk

19
回答原问题“我该如何获取有关问题的更多信息?”,这个苹果论坛帖子提供了一个非常简单的提示:只需在Xcode之外运行崩溃的应用程序(即,从Xcode停止它,然后手动在您的设备上运行它)。

这将生成一个包含更多详细信息的崩溃日志。然后,您可以从Xcode窗口菜单→设备和模拟器查看设备日志中查看此日志。


7
这就是为什么你会忽略掉置顶的回答。查看设备日志让我朝着正确的方向前进。感谢你的回答! - Mike Richards

15

我刚刚修复了我的项目中的错误!

如果您在Objective-C项目中使用Swift框架,我建议您更改构建设置。

Always Set Embed the Swift Standard Libraries 选项设置为 Yes。像这样:

输入图像描述 aquí


这对我有效,即使我的项目中(表面上)没有Swift代码。 - Jim75
XCode将值更改回“否”,我已经忘记了。谢谢 :) - SeikoTheWiz
在 iOS 15 中不需要这个,但是在使用带有一些 Swift 代码的 xcFramwork 的应用程序在 Xcode 13.4 中使用模拟器进行测试时,需要在 iOS 11.4 中使用。如果你声称支持旧版 iOS,请始终测试它们! - ScottyB

15

问题终于解决了!

将这个框架从“必需的”改为“可选的”,这对我有用。


超人,我和这个问题斗争了1.5天。甚至找到了这个不错的矩阵 https://twitter.com/isupportmatrix 把它改成所需的解决方案,在我的一侧也解决了。 - swift2geek
同时,它仅在文件->项目设置->旧版构建系统中的设置下工作。 - swift2geek

11

1
这一步是强制性的,因为您正在尝试将自定义框架嵌入到您的应用程序中。 - Akash Bhardwaj

7
取消诊断中的“Guard Malloc”选项对我很有帮助。 请参考此图片

2
“Guard Malloc”,正确的。有人知道为什么它可以修复崩溃吗? - Mojo66
1
您也可以尝试清理项目,然后再次运行或重新启动Xcode。这种错误非常令人恼火,有点像Xcode中的bug。 - Karanveer Singh

6
  1. 继续执行以查看调试器是否显示任何消息,例如“未找到MyFramework.framework”。如果是这种情况,请参考此问题:OS X Framework Library not loaded: 'Image not found'。对我来说,Amos Joshua的答案有效。

  2. 确保已通过“嵌入式二进制文件”部分添加了二进制文件。

  3. 确保在构建阶段中启用了框架签名。

  4. 确保嵌入式框架不是符号链接。

  5. 您可以在“链接二进制文件”阶段将链接的框架设置为可选项。这将告诉iOS在启动期间不要查找这些框架。但是,无论如何,您都需要修复错误才能使用这些框架!

  6. 检查所有info.plist条目是否正确。在我的情况下,我正在为iOS使用Mac info.plist文件。它正在寻找一些在iOS项目中不存在的xib文件。

  7. 在进行此类更改后,请执行清理和构建。这是必需的,因为如果这些文件已经存在,Xcode不会复制/更改这些文件。

  8. 从iPad中删除该应用程序,然后安装。原因同7。


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