iOS 仅使用 LLDB() 启动时应用程序崩溃(该应用程序在模拟器中运行)
iOS App Crash On Launch With Only LLDB() (The App Works In Simulator)
刚刚将代码库更新到 Swift 4。它在模拟器中运行良好。当我构建到设备时,我立即崩溃,没有错误消息:
在模拟器中运行良好。
上面有一些线程:
App crashes only with (lldb)?
iOS app crashes with no error, just (lldb)
dyld`__abort_with_payload: With no error message
根据我的了解,问题可能是 linked 二进制文件,但我已经深入研究了我的 linked 二进制文件,我相信一切都是 linked 正确。
关于从哪里开始调试这个问题或可能是什么问题的任何想法?
Update1: 我的一个 xcodeproj 有一个内部框架,所以我尝试删除它并将其安装为 pod,但错误仍然存在。
Update2 添加完整堆栈跟踪:
Update3 通过启动应用程序而不是从 Xcode 而是从 phone 本身启动应用程序并跟踪错误日志来强制崩溃的错误跟踪:
Termination Description: DYLD, Library not loaded: @rpath/PromiseKit.framework/PromiseKit | Referenced from: /var/containers/Bundle/Application/C50A937F-2A6F-4E5C-89C7-2D
Update4 删除 promisekit 框架后,应用程序的 shell 版本确实在设备上编译,这让我得出结论(就像其他人一样)神秘问题)是框架link错误。但是,在常见线程中尝试所有解决方案,例如:
iOS app with framework crashed on device, dyld: Library not loaded, Xcode 6 Beta
没有成功。嵌入和 linking 或其他任何方法均无效。
所以它是一个框架 link 某种类型的错误,但 link 和嵌入似乎无法解决问题。
阻碍模拟器开发的其中一件事是它对 Macintosh 资源的访问。该项目可能已意外链接到框架或库的 Macintosh 版本。它存在于模拟器上,但不存在于 iPhone 设备上。
我过去遇到过 Xcode 在 iOS 和 Mac 的目标名称相同时选择了错误的框架版本的问题。如果您有此类框架,请尝试暂时更改一个或两个目标名称和产品名称。然后查看 Xcode 是否选择了您想要的那个。
总而言之,当我将框架嵌入到主应用程序中时,它导致了一些其他不明显的错误。当我从构建阶段删除 运行 脚本时,它允许嵌入实际工作并解决了问题。
因此,通过删除下面在构建阶段中看到的 运行 脚本阶段:
我能够嵌入框架,应用程序开始在设备上编译。
因此,如果您以后遇到此类错误,解决方案仍然是嵌入它,但就我而言,还有另一个问题阻止了嵌入工作。
我解决了另一个问题后:
我修改了一些设置,这些设置搞乱了我的构建设置。因此,我在这里遇到了与提问者相同的问题。
我通过 'git reset --hard' 解决了这个问题,然后回到了干净的状态。因为我不再有这个问题了,感谢上帝。
它可能也适合你。
刚刚将代码库更新到 Swift 4。它在模拟器中运行良好。当我构建到设备时,我立即崩溃,没有错误消息:
在模拟器中运行良好。
上面有一些线程:
App crashes only with (lldb)?
iOS app crashes with no error, just (lldb)
dyld`__abort_with_payload: With no error message
根据我的了解,问题可能是 linked 二进制文件,但我已经深入研究了我的 linked 二进制文件,我相信一切都是 linked 正确。
关于从哪里开始调试这个问题或可能是什么问题的任何想法?
Update1: 我的一个 xcodeproj 有一个内部框架,所以我尝试删除它并将其安装为 pod,但错误仍然存在。
Update2 添加完整堆栈跟踪:
Update3 通过启动应用程序而不是从 Xcode 而是从 phone 本身启动应用程序并跟踪错误日志来强制崩溃的错误跟踪:
Termination Description: DYLD, Library not loaded: @rpath/PromiseKit.framework/PromiseKit | Referenced from: /var/containers/Bundle/Application/C50A937F-2A6F-4E5C-89C7-2D
Update4 删除 promisekit 框架后,应用程序的 shell 版本确实在设备上编译,这让我得出结论(就像其他人一样)神秘问题)是框架link错误。但是,在常见线程中尝试所有解决方案,例如:
iOS app with framework crashed on device, dyld: Library not loaded, Xcode 6 Beta
没有成功。嵌入和 linking 或其他任何方法均无效。
所以它是一个框架 link 某种类型的错误,但 link 和嵌入似乎无法解决问题。
阻碍模拟器开发的其中一件事是它对 Macintosh 资源的访问。该项目可能已意外链接到框架或库的 Macintosh 版本。它存在于模拟器上,但不存在于 iPhone 设备上。
我过去遇到过 Xcode 在 iOS 和 Mac 的目标名称相同时选择了错误的框架版本的问题。如果您有此类框架,请尝试暂时更改一个或两个目标名称和产品名称。然后查看 Xcode 是否选择了您想要的那个。
总而言之,当我将框架嵌入到主应用程序中时,它导致了一些其他不明显的错误。当我从构建阶段删除 运行 脚本时,它允许嵌入实际工作并解决了问题。
因此,通过删除下面在构建阶段中看到的 运行 脚本阶段:
我能够嵌入框架,应用程序开始在设备上编译。
因此,如果您以后遇到此类错误,解决方案仍然是嵌入它,但就我而言,还有另一个问题阻止了嵌入工作。
我解决了另一个问题后:
我通过 'git reset --hard' 解决了这个问题,然后回到了干净的状态。因为我不再有这个问题了,感谢上帝。 它可能也适合你。