iOS 应用程序在发布但未调试时崩溃

Posted

技术标签:

【中文标题】iOS 应用程序在发布但未调试时崩溃【英文标题】:iOS App Crashing On Release But Not Debug 【发布时间】:2014-12-30 14:31:47 【问题描述】:

有一个小问题。我的应用程序在调试模式下工作正常,但如果我更改它并将方案设置为发布而不是调试我的应用程序崩溃。有谁知道这可能是什么原因造成的?我已经搜索了一上午,但未能找到解决方案...日志包含在下面。

12 月 30 日 14:26:46 Curtis-iPhone 内核[0] : xpcproxy[14458] 容器: /private/var/mobile/Containers/Data/Application/75DF32AD-00B2-423A-B00E-5DC3B2063311 (沙盒)12 月 30 日 14:26:46 Curtis-iPhone uDropOff2N[14458] : 断言失败:12B440:libxpc.dylib + 71820 [A4F17798-F3DE-3FBC-85E3-F569762F0EB9]:0x7d 12 月 30 日 14:26:46 柯蒂斯-iPhone 未知 [14458]:12 月 30 日 14:26:46 柯蒂斯-iPhone uDropOff2N[14458]:接口中的未知类 GMSMapView 生成器文件。 12 月 30 日 14:26:46 柯蒂斯-iPhone uDropOff2N[14458]: -[UIView setMapType:]:无法识别的选择器发送到实例 0x170186ce0 Dec 30 14:26:46 Curtis-iPhone uDropOff2N[14458]: * 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'-[UIView setMapType:]: 无法识别的选择器发送到实例 0x170186ce0' * 第一次抛出 调用堆栈:(0x18281659c 0x192f6c0e4 0x18281d664 0x18281a418 0x18271eb6c 0x100095004 0x186fc8aa0 0x18707dfb4 0x18707deb0 0x18707d34c 0x18707cff8 0x18707cd18 0x18707cc98 0x186fc5648 0x18691d994 0x186918564 0x186918408 0x186917c08 0x18691798c 0x187252dbc 0x187253c68 0x187251dec 0x18aa8562c 0x1827cea28 0x1827cdb30 0x1827cbd30 0x1826f90a4 0x1870333c8 0x18702e3c0 0x100094d20 0x1935daa08) 12 月 30 日 14:26:46 柯蒂斯-iPhone ReportCrash[14459] : task_set_exception_ports(B07, 400, D03, 0, 0)因错误而失败(4:(os/kern)无效参数)12月30日14:26:46 Curtis-iPhone ReportCrash[14459] : ReportCrash 反对 PID 14458 Dec 30 14:26:46 Curtis-iPhone 定位 [10937] : 客户端“udropoffbundleindent”开始重大位置更改 12 月 30 日 14:26:46 Curtis-iPhone ReportCrash[14459]:制定 进程 uDropOff2N[14458] 的崩溃报告 12 月 30 日 14:26:46 Curtis-iPhone SpringBoard[53] : BSXPCMessage 收到错误 消息:连接无效 12 月 30 日 14:26:46 Curtis-iPhone 定位 [10937]:手势 EnabledForTopCLient:0, EnabledInDaemonSettings:0 Dec 30 14:26:46 Curtis-iPhone com.apple.xpc.launchd[1] (UIKitApplication:udropoffbundleindent[0xe822][14458]): Service exited due to signal: Abort trap: 6 Dec 30 14:26:46 Curtis-iPhone ReportCrash[14459] :将报告保存到 /var/mobile/Library/Logs/CrashReporter/uDropOff2N_2014-12-30-142646_Curtis-iPhone.ips 12 月 30 日 14:26:46 Curtis-iPhone SpringBoard[53] : 应用 'UIKitApplication:udropoffbundleindent[0xe822]' 崩溃了。

谢谢,

柯蒂斯

【问题讨论】:

这是什么方法setMapType()setMapType: 不是 UIView class 的方法。您是否将此方法添加到 UIView 类别? 似乎您在 xib 或情节提要中为 UIView 设置了自定义类 GMSMapView。 GMSMapView 是如何包含在项目中的?作为源文件? 当您尝试从 Xcode 启动时?在这种情况下,如果您尝试在发布模式下进行调试,应用程序崩溃是正常的。 【参考方案1】:

可能的问题是指向已释放对象的悬空指针。这可能会出现在发布版本中,因为 Xcode 的优化设置最大(在默认项目中)。

您得到“[UIView setMapType:]: unrecognized selector”的原因是接受 setMapType: 消息的原始对象已被释放。在同一个 RAM 位置,创建了一个 UIView。当悬空指针用于发送setMapType消息时,UIView收到了,但不知道如何处理。

要查找问题,请从方案列表中选择“编辑方案”。 (或菜单产品 -> 方案 -> 编辑方案)。在“诊断”选项卡中,打开“启用涂鸦”和“启用僵尸对象”。这些将有助于找到问题的根源。 (您可以通过搜索 *** 和互联网找到有关这些方面的出色信息。)

为“objc_exception_throw”添加一个符号断点也很有帮助。 (在 Xcode 的帮助菜单中键入“符号”以获取更多信息。)这将导致在抛出断点之前停止执行,因此您可以看到它来自哪里。

【讨论】:

使用 arc 时僵尸对象是否仍能正常工作?我有一段时间无法成功使用它们,但我可能只是做错了。 是的。我目前的项目是 ARC,我已经使用过它们。 你说的我已经试过了,但我的位置还是基本一样... 应用返回如下日志,删掉一部分但和上次一样除了顶部... uDropOff2N(910,0x104a82300) malloc:启用涂鸦以检测模块以释放块 2014-12-31 01:15:23.058 uDropOff2N[910:16395] Interface Builder 文件中的未知类 GMSMapView。 2014-12-31 01:15:23.076 uDropOff2N[910:16395]-[UIView 设置]:无法识别的选择器发送到实例 0x7fb91143c130 它从 '-[UIView setMapType:]: unrecognized selector' 更改为 '[UIView settings]: unrecognized selector'?如果启动了僵尸,则应该有一条关于已释放实例的僵尸消息。 我已经重现了我的错误,这要归功于:“这可能会出现在发布版本中,因为 Xcode 的优化设置最大(在默认项目中)。”

以上是关于iOS 应用程序在发布但未调试时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用程序在发布时崩溃但未在开发中,Swift 符号未解决

应用程序在 Apple 崩溃但未在测试中

ios 应用程序在调试模式下完美运行,但在发布时崩溃

iOS 应用程序在使用 XCode 调试器启动时崩溃,在没有调试器的情况下运行良好

React Native iOS 8.1 应用程序在访问新视图时崩溃 - 仅在不使用调试器时

应用程序在启动时崩溃