1

我正在处理的一个项目在使用发布配置构建时崩溃。

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

知道这怎么可能发生吗?

最后,是否可以向苹果发送带有一些优化的调试版本的应用程序?

谢谢。

4

4 回答 4

1

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

于 2010-03-30T13:33:46.617 回答
1

根据我的经验,在 iPhone 或其他任何设备的非调试与调试版本中,10 次中有 9 次令人讨厌且难以追踪的崩溃是由内存管理错误引起的。我会为您的问题投入资金,这些问题是由于发布或保留信息放置不当或缺少信息而引起的。如果您还没有尝试过,请在调试构建配置中打开静态分析器(我的 XCode 正在更新,但我相信如果您在构建属性中搜索“analyzer”或“clang”,您应该会找到合适的设置),看看它是否指向任何说明。如果没有,您可以使用 Instruments 来帮助您检查问题,并尝试在调试器中隔离问题区域。

通过修改调试配置或复制它以使用与发布版本中发生的情况更接近的不同编译器标志集,它可能会帮助您在非实际发布版本中重现问题(我不不记得我脑海中的差异是什么,但我认为在编译器标志中添加“-O2”会让你大部分时间到达那里)。

于 2010-03-30T13:47:29.123 回答
0

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

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

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

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

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

于 2010-03-30T13:35:29.690 回答
0

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

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

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

于 2010-03-30T13:36:49.547 回答