【问题标题】:Cannot replicate Apple iOS app review crash无法复制 Apple iOS 应用审核崩溃
【发布时间】:2014-01-15 00:13:22
【问题描述】:

我最近将我的 iOS 应用提交给 Apple 进行审核。它是使用 Xamarin iOS、Monotouch 和 Monogame 用 C# 编写的。我使用 Xamarin IDE 进行开发。一周后,我收到了拒绝,原因是当审阅者尝试访问 In-App-Purchase 商店时,该应用程序在 iPad 上崩溃,而在 iPhone 5s 上它没有崩溃,但表明它不能到达 Apple 服务器以检索商店项目。我的大部分商店检索代码都来自 Xamarin 的指南,发现 here

问题是我无法复制那些崩溃。这家商店对我来说开得很好,我对其进行了广泛的测试。我在所有模拟器以及调试和发布配置中的许多真实设备(iPhone 4、iPhone 5、iPhone 5s、iPad 第 3 代)上进行了测试。我没有在 ad-hoc 模式下进行测试,因为其中许多设备是从我的朋友那里借来的,而且我不想在 iTunes 中同步,因为这可能会清除设备数据。所以我希望发布版本和临时版本在查找审查团队的错误方面是等效的。

至于 Apple 提供给我的崩溃日志,它们对我没有帮助,因为大多数行在 Xcode 中都没有使用我提交给 Apple 的相同存档正确符号化。日志中有很多“___lldb_unnamed_function”行。我能说的只是在尝试检索商店时发生了崩溃。因此我被卡住了,不知道下一步该怎么做。感谢您的建议。

下面是长崩溃日志的最后一部分。

Incident Identifier: 24777CEA-21FF-434B-A658-BFB4BC89F7B2
CrashReporter Key:   e981dd69858f1d35ba231cd2e288f3d33625919f
Hardware Model:      xxx
Version:             1 (1)
Code Type:           ARM (Native)
Parent Process:      launchd [1]
Date/Time:           2014-01-09 13:30:21.579 -0800
OS Version:          iOS 7.0.4 (11B554a)
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x387e41fc __pthread_kill + 8
1   libsystem_pthread.dylib         0x3884ba4f pthread_kill + 55
2   libsystem_c.dylib               0x38795029 abort + 73
3   MyGame                          0x00d8036d mono_handle_native_sigsegv (mini-exceptions.c:2413)
4   MyBeGame                        0x00d855b7 sigabrt_signal_handler (mini-posix.c:206)
5   libsystem_platform.dylib        0x38846721 _sigtramp + 41
6   libsystem_pthread.dylib         0x3884ba4f pthread_kill + 55
7   libsystem_c.dylib               0x38795029 abort + 73
8   MyBeGame                        0x00e30744 monotouch_unhandled_exception_handler (monotouch-glue.m:1436)
9   MyBeGame                        0x00d8072d mono_invoke_unhandled_exception_hook (mini-exceptions.c:2749)
10  MyBeGame                        0x00d8d7ab mono_thread_abort_dummy (mini.c:2768)
11  MyBeGame                        0x00d7ff35 mono_handle_exception_internal (mini-exceptions.c:1710)
12  MyBeGame                        0x00d7f6b7 mono_handle_exception (mini-exceptions.c:2003)
13  MyBeGame                        0x00d791b5 mono_arm_throw_exception (exceptions-arm.c:161)
14  MyBeGame                        0x0023f7d4 ___lldb_unnamed_function12968$$MyBeGame + 64
15  MyBeGame                        0x002da1d0 ___lldb_unnamed_function20307$$MyBeGame + 92
16  MyBeGame                        0x00293960 ___lldb_unnamed_function17583$$MyBeGame + 196
17  MyBeGame                        0x00212418 ___lldb_unnamed_function12101$$MyBeGame + 168
18  MyBeGame                        0x0029205c ___lldb_unnamed_function17574$$MyBeGame + 92
19  MyBeGame                        0x00295c58 ___lldb_unnamed_function17610$$MyBeGame + 32
20  MyBeGame                        0x00083570 ___lldb_unnamed_function2892$$MyBeGame + 860
21  MyBeGame                        0x000954f4 ___lldb_unnamed_function3194$$MyBeGame + 1516
22  MyBeGame                        0x00093610 ___lldb_unnamed_function3176$$MyBeGame + 40
23  MyBeGame                        0x0006246c MyBeGame.HintStoreController.HintStoreControl/StateRetrieving:<Activate>m__F + 624
24  MyBeGame                        0x0045d39c ___lldb_unnamed_function33945$$MyBeGame + 48
25  MyBeGame                        0x0020c10c ___lldb_unnamed_function11957$$MyBeGame + 196
26  MyBeGame                        0x00d8ce4f mono_jit_runtime_invoke (mini.c:6504)
27  MyBeGame                        0x00dd482b mono_runtime_invoke (object.c:2827)
28  MyBeGame                        0x00d5117b native_to_managed_trampoline_MonoTouch_Foundation_InternalNSNotificationHandler_Post (registrar.m:28)
29  CoreFoundation                  0x2da4fe6f __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 11
30  CoreFoundation                  0x2d9c3aad _CFXNotificationPost + 1717
31  Foundation                      0x2e3a9ec1 -[NSNotificationCenter postNotificationName:object:userInfo:] + 69

【问题讨论】:

  • 您需要使用 Xcode 生成的 dSYM 文件来符号化您的崩溃日志。如果您没有删除它,它应该仍然在您制作存档的计算机上。如果你没有,我先看看由 NSNotification 触发的代码……
  • 我读到档案本身,我上传到 Apple 并且仍在 xCode 档案中,其中包含所有必要的文件,如 dSYM,所以...
  • 你试过符号化它了吗?如果是这样,您尝试了哪些方法,哪些方法无效?
  • @AaronBrager 是的,我打开了 Xcode,转到管理器,然后在设备下,将崩溃日志拖到库部分的设备日志中。 Xcode 自动对其进行符号化,我查看它。

标签: ios xamarin.ios in-app-purchase xamarin monogame


【解决方案1】:

您可以通过比较项目的选项来确定来自两种不同配置(例如 Release 和 Ad-Hoc)的构建是否相同。特别是查看Build/CompilerBuild/iOS Build 页面,确保所有选项都相同。

关于崩溃报告,我们很遗憾在 Xamarin.iOS 7.0.4 中使用 dSYM 生成有一个 bug,因此托管帧将无法正确符号化(这是所有 lldb_unnamed_function 条目的原因)。但是我可以说的是,应用程序正在崩溃,因为存在未处理的托管异常。

如果您自己无法重现该问题,我建议您使用 Xamarin.iOS 7.0.6(目前处于测试版通道)重建您的应用,然后重新提交给 Apple。应用程序可能仍会崩溃,但您应该获得更好的崩溃报告,它至少会告诉您托管异常发生在哪里。

【讨论】:

  • 我在 Xamarin Studio 中转到“检查更新”并切换到 beta 通道,然后下载了 7.0.6。我重建了应用程序然后提交了它。今天我收到了拒绝,我打开了随附的崩溃日志,希望最终能看到堆栈跟踪,但我再次遇到了与“___lldb_unnamed_function”行相同的问题。所以看来7.0.6并没有解决这个问题,还是卡住了。
  • 您在哪个 Xcode 中打开了崩溃报告?我刚刚发现 Xcode 5.0 和 Xcode 5.1 (Beta4) 产生的结果不同(Xcode 5.1 产生了更好的堆栈跟踪)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多