我正在处理的项目在使用发布配置构建时崩溃。
我们需要将应用程序发送给Apple进行审核,并且在进入应用程序之前它已经崩溃。
知道怎么会发生这种情况?
在最后一次重新调试中,是否可以通过一些优化向Apple发送调试版本的应用程序?
感谢。
答案 0 :(得分:1)
在构建我的第一个iPhone应用程序时发生了同样的事情 - 在从调试切换到发布之后,在项目工作一段时间之后应用程序将崩溃。我做了一个完整的项目清理重建,从测试手机中删除了应用程序并重新安装,应用程序运行。看起来XCode有时候不会清理/重建它所需要的一切。
答案 1 :(得分:1)
根据我的经验,10次烦人的9次,很难追踪任何事情,iPhone或其他任何东西的非调试和调试版本中的崩溃是由内存管理错误引起的。我会在你的问题上投入资金,这是因为发布或保留信息不当,或者缺乏信息。如果您还没有尝试过,请在调试版本配置中打开静态分析器(我的XCode现在正在更新,但我相信如果您在构建属性中搜索“analyzer”或“clang”,您应该找到相应的设置),看看它是否指向任何东西。如果没有,您可以使用Instruments帮助您检查问题,并尝试隔离调试器中的问题区域。
通过修改调试配置或复制它以使用与发布版本中发生的更紧密对齐的不同编译器标志集,可以帮助您在非实际发布版本中重现问题(我不记得有什么不同之处,但我会假设在你的编译器标志中添加一个“-O2”会让你大部分都在这里。)
答案 2 :(得分:0)
如果使用Release配置构建,请确保保留.dSYM文件和应用程序包的副本。
然后当应用程序在设备上崩溃时,将其插入Xcode并下载崩溃报告。
打开Xcode,然后从Xcode中打开管理器。从那里,您可以查看设备的崩溃报告。
如果(且仅当)您保存了.dSYM文件和应用程序包,崩溃报告将被符号化。
然后,您可以使用崩溃报告找出崩溃原因并进行修复。
答案 3 :(得分:0)
您应该查看崩溃日志。打开管理器,选择您的设备,然后选择“崩溃日志”选项卡。向下滚动以查找应用程序的日志。应该是符号化的,因此您可以看到堆栈跟踪。
如果没有实际调试您的应用,很难说更多。你在使用#ifdef DEBUG宏吗?你使用多个线程吗?如果你有一堆NSLog语句会降低调试模式下的执行速度,这会引入可能影响多线程应用程序的细微时序差异。
您是否在调试版上尝试'make clean'?当项目的某些部分重建而其他部分不变时,有时可能会隐藏不明显的错误。