2010-06-03 58 views
4

填满我们的应用程序几次之后,我们继续会收到以下消息:未知和不可再现的崩溃导致的App Store拒绝

感谢您提交我的应用程序的 的App Store。我们审核了您的 应用程序,并确定我们的 无法将此版本的iPad 应用程序发布到应用程序商店,因为我的应用程序在运行iPad的iPad上崩溃 iPhone OS 3.2和Mac OS X 10.6.2。我的 应用程序在启动时崩溃。 不幸的是,崩溃日志没有生成 。

但是,使用AdHoc权利退出相同的构建并将构建加载到设备上不会产生此类崩溃。经过多次尝试之后,应用程序根本不会像审阅者所报告的那样崩溃。此外,审阅者不会提供任何可能由SpringBoard生成的有用日志记录,例如退出状态或事件(如果它已适用于任何其他设备)。没有调用显式地退出或退出代码行中的应用程序,但应用程序在启动时终止。

什么可能导致应用程序以这种方式终止? 在什么条件下测试的应用程序可能无法在开发环境下找到? 这可能是签名问题的结果,提交验证系统根本无法抓住?

在此先感谢。

+0

由于公司政治,我不能提交500次,希望能够解决这个问题。我想我会放弃一些远程日志记录,以便有时候它会发送一个快速的帖子发送到一个小的服务器,所以我可以跟踪他们到底有多远(或者甚至他们进入了代码)。 – 2010-06-04 18:23:13

回答

4

经过几个星期的争斗后,申请终于获得批准。关键:签署腐败。因此,为什么应用程序会启动(或者至少看起来是通过显示启动画面开始的),然后在没有崩溃日志的情况下突然消失。它失败了Springboard的预检叹息检查。

请记住检查签署问题的好工具。它告诉如果应用程序具有有效签名:

codesign -vvvv MyApp.app 

当我构建的应用程序,我将它cp到网络存储设备,用我们的产品经理会拉下来,并提交给苹果公司。如果在NAS上解压缩,代码签名是有效的。但是,如果您将压缩的应用程序放回NAS并验证它,则会失败。

课程:利用新的XCode实用程序来提交应用程序。

0

哎唷!这是一个艰难的。之前我曾经遇到过这种情况,但是当我切换到其他设备(iPhone 3G vs 3G等)时,它似乎是可以重现的。就你而言,这听起来像是你只有iPad,所以这可能没有帮助。我想,3G和Wifi之间有区别,但如果这导致了一个而不是另一个的崩溃,我会非常惊讶。

如果您认为苹果公司没有做好自己的任务,那么您可以尝试的一件事是更改二进制名称并在其他应用程序名称/记录下重新提交。看看你是否得到相同的回应。如果你有相同的评论者,你可能会这样做,但我认为你很有可能会用不同的评论者使用新的应用程序。只需将您的应用发布日期设置在遥远的将来一段时间,并且如果他们批准,它就永远不会显示在应用商店中。如果新应用程序因相同原因而被拒绝,则您有工作要做,但如果他们确实批准了该应用程序,那么我会与他们通电话并指出该差异。

1

我认为你有两种选择:尽量用别人提及的工具重现缺陷,或者在现场捕捉这些崩溃。

PLCrashReporter将陷入未捕获的异常并存储所有相关信息。下次您的应用程序运行时,它可以发送崩溃报告,然后您可以符号化并查看堆栈跟踪。

2

几点建议:

  1. 尽量使用静态分析的泄漏的工具,看看是否有任何内存泄漏,或者你没有看到的问题。

  2. 您的应用程序是否使用Web服务?这一次发生在我身上,因为苹果当天正在审查网络服务停止运行的应用程序。这会导致崩溃。如果这是你想添加一些东西来解决这个问题。

  3. 最后,在Apple发送的日志中,他们是否向您发送了dsym文件?如果他们确实可以从命令行运行atos,它会将地址转换为符号。这会告诉你它正在崩溃的线程和符号。

+0

1.仪器不显示任何问题。 2. UIWevView是主要元素,但所有连接问题都被困住并且处理得当(也会导致日志报告崩溃)。 3. dSym我有但没有崩溃日志来运行它,因为没有生成。 – 2010-06-03 23:51:07

0

我的方法是确保编译在静态分析器(这不是可选的,它会节省您的时间!)和构建本身绝对干净。然后按照CocoaDev' NSZombie page中所述设置所有内容。然后确保你有一个运行3.2(实际的硬件,而不是模拟器)和测试,测试,测试的iPod。使用可用的网络进行操作,无法使用,设备接近完整且全新恢复,您可以想到所有其他变体。在调试器处于活动状态并且发布版本断开连接时运行它。使用Leaks,Instruments和所有其他工具在那里窥视并更好地了解正在发生的事情。如果你耗尽了所有的可能性,你将不得不求助于Apple的更多细节,但我敢打赌你会发现一个问题 - 在调试这样的问题时最重要的事情之一就是尽量忘记你认为自己知道的一切,从一开始就开始。

+0

在真实设备上运行的静态分析仪和仪器都可以干净地报告。 “尽量忘记你认为你知道的所有事情,并从头开始”这是我们在调试时应该记得的一个优秀点。 – 2010-06-04 18:16:06

1

确保您的各种设置进行测试:与WiFi禁用/启用,对3G禁用,飞行模式/关闭,禁止位置服务等

作为最后的手段,假定有一个问题在启动时执行的代码中。删除一半的启动代码,在远期设置发布日期(以防万一获得批准),然后重新提交并查看它们是否有相同的问题。如果不是这个问题是在你删除的一半...这是一个二进制搜索。

+0

不是一个坏主意。它很早就崩溃了,所以我可以在启动过程中删除一些代码块,看看是否有效。 – 2010-06-04 18:20:33