iPhone发布版本正在崩溃

iPhone发布版本正在崩溃,iphone,release-mode,Iphone,Release Mode,我正在处理的一个项目在使用版本配置构建时正在崩溃 我们需要将该应用程序发送给苹果进行审查,它甚至在进入应用程序之前就崩溃了 你知道怎么会这样吗 在最后一个ressort中,是否可以向苹果发送一个经过一些优化的应用程序调试版本 谢谢。在构建我的第一个iPhone应用程序时,同样的事情也发生在我身上——在项目上工作了一段时间后,从调试切换到发布时,应用程序会崩溃。我对项目进行了彻底的重建,从测试手机上删除了应用程序并重新安装,应用程序运行了。看起来XCode有时无法清理/重建所需的所有内容。如果使用

我正在处理的一个项目在使用版本配置构建时正在崩溃

我们需要将该应用程序发送给苹果进行审查,它甚至在进入应用程序之前就崩溃了

你知道怎么会这样吗

在最后一个ressort中,是否可以向苹果发送一个经过一些优化的应用程序调试版本


谢谢。

在构建我的第一个iPhone应用程序时,同样的事情也发生在我身上——在项目上工作了一段时间后,从调试切换到发布时,应用程序会崩溃。我对项目进行了彻底的重建,从测试手机上删除了应用程序并重新安装,应用程序运行了。看起来XCode有时无法清理/重建所需的所有内容。

如果使用发行版配置进行构建,请确保保留.dSYM文件和应用程序包的副本

然后,当应用程序在设备上崩溃时,将其插入Xcode并下载崩溃报告

打开Xcode,然后从Xcode中打开管理器。从那里,您可以查看设备的崩溃报告

当且仅当您保存了.dSYM文件和应用程序包时,崩溃报告才会被符号化


然后,您可以使用崩溃报告找出它崩溃的原因,并进行修复。

您应该查看崩溃日志。打开“管理器”,选择设备,然后选择“崩溃日志”选项卡。向下滚动以查找应用程序的日志。应该对堆栈进行符号化,以便可以看到堆栈跟踪

如果不真正调试你的应用程序,真的很难说更多。您正在使用ifdef调试宏吗?您是否使用多个线程?如果在调试模式下有大量NSLog语句会降低执行速度,这可能会引入细微的时序差异,从而影响多线程应用程序


您是否在调试版本上尝试了“清除”?有时,当重建项目的某些部分而其他部分保持不变时,隐藏的错误可能会被隐藏。

根据我的经验,在任何东西(iPhone或其他)的非调试与调试构建中,10个恼人、难以追踪的崩溃中有9个是由内存管理错误引起的。我会把钱放在你的问题上,因为发布或保留信息的位置不正确,或者缺少发布或保留信息。如果您还没有尝试过,请在调试构建配置中打开静态分析器我的XCode正在更新,但我相信如果您在构建属性中搜索analyzer或clang,您应该找到合适的设置,并查看它是否指向任何有意义的内容。如果没有,您可以使用工具来帮助检查问题,并尝试在调试器中隔离问题区域


通过修改调试配置或复制调试配置以使用与发布版本中发生的情况更紧密一致的不同编译器标志集,它可能会帮助您在非实际发布版本中重现问题我想不起来有什么不同之处,但我认为,在编译器标志中添加-O2可以让您在大多数情况下达到目的。

您是否尝试过使用Xcode调试器单步执行应用程序?我无法调试该应用程序的发布版本。有办法吗?我会看看事故记录。我没有在任何地方使用ifdef,是的,我有一个多线程程序,但我已经确保在主线程中进行任何数据修改,并且线程没有直接通信。这将有很大的帮助。在从辅助线程读取数据时要小心。即使您使用的是NSLock,或者只从主线程写入数据,也不要在从辅助线程读取数据时做出假设。例如,在使用之前检查您需要的对象是否确实存在。在次线程访问主线程时,主线程可能已经释放了它。这些类型的定时错误可以避免在较慢的调试代码中被检测到,但在发布代码中却会暴露出它们丑陋的一面。Chris关于使用下面的静态分析的建议也是很好的建议。谢谢你的建议,我也要尝试一下,希望这会像你解释的那样简单。这可能是真的,但是,如果根本原因是内存泄漏或其他与内存/指针相关的问题,并且在清理后内存中的对齐方式略有不同,那么这也可能是一个危险因素。谢谢您的帮助。让它工作起来要困难得多,但现在它正在工作。我做了太多的事情,不知道什么样的解决方案真正有效。但由于我没有更改任何代码行,我将您的解决方案标记为已接受。