未知和不可重现的崩溃会导致App Store拒绝

时间:2010-06-03 21:50:18

标签: iphone ipad app-store

在多次提交申请后,我们会继续收到以下回复:

  

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

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

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

提前致谢。

6 个答案:

答案 0 :(得分:4)

经过几周的斗争,申请终于获得批准。关键:签署腐败。因此,为什么应用程序将启动(或者至少似乎从显示启动屏幕开始)然后突然消失而没有崩溃日志。它失败了Springboard的预检叹息检查。

要记住检查签名问题的好工具。它告诉应用程序是否有有效签名:

codesign -vvvv MyApp.app

当我构建应用程序时,我会将cp发送到网络存储设备,我们的产品经理会将其下载并提交给Apple。如果在NAS上解压缩,则代码签名有效。但是如果你将压缩后的应用程序从NAS上取下并验证它,它就会失败。

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

答案 1 :(得分:2)

一些建议:

  1. 尝试使用静态分析仪的泄漏工具来查看是否有任何内存泄漏或您看不到的问题。

  2. 您的应用是否使用网络服务?这件事发生在我身上一次,因为苹果正在审查网络服务失败的应用程序。这会导致崩溃。如果是这种情况,你会想要添加一些东西来捕获它。

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

答案 2 :(得分:1)

我认为您有两种选择:尝试使用其他人提到的工具更难以重现缺陷,或者在现场捕捉这些崩溃。

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

答案 3 :(得分:1)

请确保使用各种设置进行测试:禁用/禁用Wifi,禁用3G,启用/禁用飞行模式,禁用位置服务等。

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

答案 4 :(得分:0)

哎哟!这是一个艰难的。我以前曾经发生过这种事情,但是当我切换到不同的设备(iPhone 3G与3G等)时,它似乎可以重现。在你的情况下,听起来你只是iPad,所以这可能没有帮助。我想,3G和Wifi之间存在差异,但如果这会导致一个而不是另一个崩溃,我会感到非常惊讶。

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

答案 5 :(得分:0)

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