iOS应用程序崩溃启动时只有LLDB()(该应用程序在模拟器中工作)

时间:2017-10-25 01:04:00

标签: ios xcode lldb swift4 sigabrt

刚刚完成将代码库更新到Swift 4.它在模拟器中运行良好。当我构建到设备时,我立即崩溃,没有错误消息:

enter image description here enter image description here enter image description here

它在模拟器中工作正常。

上面有一些主题:

App crashes only with (lldb)?

iOS app crashes with no error, just (lldb)

dyld`__abort_with_payload: With no error message

从我学到的问题可能是二进制文件,但我已经挖掘了我的链接二进制文件,我相信一切都是正确的。

有关从哪里开始调试此问题或问题可能是什么的任何想法?

Update1:​​我有一个xcodeproj的内部框架,所以我尝试将其删除并安装为pod,但错误仍然存​​在。

Update2 添加完整堆栈跟踪: enter image description here

Update3 通过启动应用程序而不是从Xcode但手机本身然后跟踪错误日志来强制崩溃的错误跟踪: Termination Description: DYLD, Library not loaded: @rpath/PromiseKit.framework/PromiseKit | Referenced from: /var/containers/Bundle/Application/C50A937F-2A6F-4E5C-89C7-2D

Update4 删除promisekit框架后,应用程序的shell版本会在设备上编译,这导致我得出结论(就像其他有这个神秘问题的人一样)是框架链接错误。然而,尝试共同线程中的所有解决方案,如:

iOS app with framework crashed on device, dyld: Library not loaded, Xcode 6 Beta

没有奏效。嵌入和链接或其他任何东西都没有用。

所以这是一个链接某种错误的框架,但链接和嵌入似乎无法解决问题。

3 个答案:

答案 0 :(得分:0)

使用模拟器可以解决开发问题的一个原因是它可以访问Macintosh资源。该项目可能偶然被链接到Macintosh版本的框架或库。它存在于模拟器上,但在iPhone设备上不存在。

过去我遇到过一些问题,当iOS和Mac的目标名称相同时,Xcode会选择错误的框架版本。如果您有此类框架,请尝试临时更改一个或两个目标名称和产品名称。然后看看Xcode是否正在选择你想要的那个。

答案 1 :(得分:0)

它的长短是当我将框架嵌入到主应用程序中时,它引起了一些其他模糊的错误。当我从构建阶段删除了一个脚本时,它允许嵌入实际工作并解决了问题。

因此,在构建阶段删除下面的运行脚本阶段: enter image description here

我能够嵌入框架,应用程序开始在设备上编译。

因此,如果您将来遇到此类错误,解决方案仍然是嵌入它,但在我的情况下,还有另一个问题阻止嵌入工作。

答案 2 :(得分:0)

解决了另一个问题:https://stackoverflow.com/a/48538124/1012775 我修改了一些搞砸了我的构建设置的设置。因此我在这里遇到了与提问者相同的问题。

我通过做一个' git reset --hard'并回到了我干净的状态。因为我不再有这个问题,感谢上帝。 它也可能适合你。