尝试在现有 Xamarin.iOS 应用程序上使用新的 AppCenter,我遇到了 AppCenter.Crashes API 的一些问题。
我按照入门部分并在我的 AppDelegate.cs 中添加以下代码:
using Microsoft.AppCenter;
using Microsoft.AppCenter.Analytics;
using Microsoft.AppCenter.Crashes;
// ...
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
//...
// App Center
AppCenter.Start("xxxxxxx-xxxx-xxxx-xxxx", typeof(Analytics), typeof(Crashes));
return true;
}
我还安装了相应的 NuGet 包(这是我的 packages.config 中的相应行)
<package id="Microsoft.AppCenter" version="1.5.0" targetFramework="xamarinios10" />
<package id="Microsoft.AppCenter.Analytics" version="1.5.0" targetFramework="xamarinios10" />
<package id="Microsoft.AppCenter.Crashes" version="1.5.0" targetFramework="xamarinios10" />
请注意,如果我禁用 AppCenter.Crashes 模块:
AppCenter.Start("xxxxxxx-xxxx-xxxx-xxxx", typeof(Analytics));
一切都很好(我可以在应用中心后端看到分析)
但是启用 AppCenter.Crashes 模块后,我的应用程序崩溃并在控制台中显示以下消息:
11:24:53.521334 +0100 MyApp.iOS [AppCenter] VERBOSE: +[MSAppDelegateForwarder addTraceBlock:]_block_invoke_2/101 Start buffering traces.
11:24:53.521381 +0100 MyApp.iOS [AppCenter] DEBUG: +[MSAppDelegateForwarder load]_block_invoke/48 Application delegate forwarder is enabled. It may use swizzling.
11:24:53.521587 +0100 MyApp.iOS [AppCenter] VERBOSE: +[MSAppDelegateForwarder flushTraceBuffer]/398 Stop buffering traces, flushed.
11:24:53.524550 +0100 MyApp.iOS [AppCenterXamarin] DEBUG: +[MSWrapperLogger MSWrapperLog:tag:level:]/7 No named identifier found in appSecret; using as-is
11:24:53.528625 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes fileURLWithName:]/1075 Didn't create crash buffer file as one already existed at file:///var/mobile/Containers/Data/Application/76272998-91E2-469F-9A0F-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/0.mscrasheslogbuffer.
11:24:53.529190 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes fileURLWithName:]/1075 Didn't create crash buffer file as one already existed at file:///var/mobile/Containers/Data/Application/76272998-91E2-469F-9A0F-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/1.mscrasheslogbuffer.
11:24:53.529652 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes fileURLWithName:]/1075 Didn't create crash buffer file as one already existed at file:///var/mobile/Containers/Data/Application/76272998-91E2-469F-9A0F-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/2.mscrasheslogbuffer.
11:24:53.529787 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes fileURLWithName:]/1075 Didn't create crash buffer file as one already existed at file:///var/mobile/Containers/Data/Application/76272998-91E2-469F-9A0F-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/3.mscrasheslogbuffer.
11:24:53.547125 +0100 MyApp.iOS [AppCenter] INFO: -[MSHttpSender networkStateChanged]/346 Internet connection is up.
11:24:53.549737 +0100 MyApp.iOS [AppCenter] DEBUG: +[MSSessionContext sharedInstance]_block_invoke/31 5 session(s) in the history.
11:24:53.551565 +0100 MyApp.iOS [AppCenter] VERBOSE: -[MSSessionContext setSessionId:]/70 Stored new session with id:(null) and timestamp: 2018-03-14 10:24:53 +0000.
11:24:53.551644 +0100 MyApp.iOS [AppCenter] INFO: -[MSAppCenter configure:]/222 App Center SDK configured successfully.
11:24:53.551699 +0100 MyApp.iOS [AppCenter] VERBOSE: -[MSAppCenter start:withServices:]/234 Prepare to start services: MSAnalytics, MSCrashes
11:24:53.551865 +0100 MyApp.iOS [AppCenter] VERBOSE: -[MSAppCenter start:withServices:]/236 Start services MSCrashes, MSAnalytics
11:24:53.552616 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes configureCrashReporterWithUncaughtExceptionHandlerEnabled:]/588 EnableUncaughtExceptionHandler is set to YES
11:24:53.557629 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes configureCrashReporterWithUncaughtExceptionHandlerEnabled:]/639 Exception handler successfully initialized.
11:24:53.574825 +0100 MyApp.iOS [AppCenterCrashes] INFO: -[MSCrashes applyEnabledState:]/357 Crashes service has been enabled.
11:24:53.578904 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes startWithChannelGroup:appSecret:]/401 Started crash service.
11:24:53.579845 +0100 MyApp.iOS [AppCenter] VERBOSE: -[MSSessionContext setSessionId:]/70 Stored new session with id:36C20159-XXXX-XXXX-XXXX-1E137546055A and timestamp: 2018-03-14 10:24:53 +0000.
11:24:53.579893 +0100 MyApp.iOS [AppCenterAnalytics] INFO: -[MSSessionTracker renewSessionId]/50 New session ID: 36C20159-XXXX-XXXX-XXXX-1E137546055A
11:24:53.579940 +0100 MyApp.iOS CCMonitor created
11:24:53.584290 +0100 MyApp.iOS [AppCenterAnalytics] INFO: -[MSAnalytics applyEnabledState:]/108 Analytics service has been enabled.
11:24:53.585392 +0100 MyApp.iOS [AppCenterAnalytics] VERBOSE: -[MSAnalytics startWithChannelGroup:appSecret:]/73 Started Analytics service.
11:24:53.586034 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes onEnqueuingLog:withInternalId:]/448 Storing a log to Crashes Buffer: (sid: 36C20159-XXXX-XXXX-XXXX-1E137546055A, type: startSession)
11:24:53.586103 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes onEnqueuingLog:withInternalId:]/459 Found an empty buffer position.
11:24:53.586193 +0100 MyApp.iOS [AppCenter] DEBUG: -[MSChannelUnitDefault enqueueItem:]_block_invoke/114 Saving log, type: startSession.
11:24:53.589925 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes deleteBufferedLog:withInternalId:]/520 Deleting a log from buffer with id ED4281FF-XXXX-XXXX-BB26-4DF6975F55EC
11:24:53.590438 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes onEnqueuingLog:withInternalId:]/448 Storing a log to Crashes Buffer: (sid: (null), type: startService)
11:24:53.590495 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes onEnqueuingLog:withInternalId:]/459 Found an empty buffer position.
11:24:53.590541 +0100 MyApp.iOS [AppCenter] DEBUG: -[MSChannelUnitDefault enqueueItem:]_block_invoke/114 Saving log, type: startService.
11:24:53.592715 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes deleteBufferedLog:withInternalId:]/520 Deleting a log from buffer with id 5B6ECE02-XXXX-XXXX-86F8-10C663A6C411
11:24:53.603916 +0100 MyApp.iOS [MyApp.iOS][DEBUG] iPhone format detected
11:24:54.674171 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes startCrashProcessing]/695 Start delayed CrashManager processing
11:24:54.757002 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes processCrashReports]/755 Crash reports found
11:24:54.770674 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes processCrashReports]/767 shouldProcessErrorReport is not implemented or returned YES, processing the crash report: <MSPLCrashReport: 0x1c00a6240>
11:24:54.770755 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes processCrashReports]/755 Crash reports found
11:24:54.779793 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes processCrashReports]/767 shouldProcessErrorReport is not implemented or returned YES, processing the crash report: <MSPLCrashReport: 0x1d42bd0a0>
11:24:54.779905 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes processCrashReports]/755 Crash reports found
11:24:54.787919 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes processCrashReports]/767 shouldProcessErrorReport is not implemented or returned YES, processing the crash report: <MSPLCrashReport: 0x1d44a2e80>
11:24:54.787956 +0100 MyApp.iOS [AppCenterCrashes] VERBOSE: -[MSCrashes processCrashReports]/755 Crash reports found
11:24:54.794906 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: -[MSCrashes processCrashReports]/767 shouldProcessErrorReport is not implemented or returned YES, processing the crash report: <MSPLCrashReport: 0x1d44a8820>
17:55:19.480297 +0100 MyApp.iOS [MyApp.iOS][DEBUG] api Sync success, need to write now .... <- My app debug message, all is OK here
17:55:19.482483 +0100 MyApp.iOS [MyApp.iOS][DEBUG] 0 total objects received .... <- My app debug message, all is OK here
17:38:55.495458 +0100 MyApp.iOS dynamic_cast error 2: One or more of the following type_info's has hidden visibility. They should all have public visibility. N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE.
17:38:55.495535 +0100 MyApp.iOS dynamic_cast error 2: One or more of the following type_info's has hidden visibility. They should all have public visibility. N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE.
17:38:55.495594 +0100 MyApp.iOS dynamic_cast error 2: One or more of the following type_info's has hidden visibility. They should all have public visibility. N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE.
11:25:01.376121 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: void ms_save_log_buffer_callback(siginfo_t *, ucontext_t *, void *)/102 Closed a buffer file: /var/mobile/Containers/Data/Application/76272998-XXXX-XXXX-XXXX-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/0.mscrasheslogbuffer
11:25:01.376170 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: void ms_save_log_buffer_callback(siginfo_t *, ucontext_t *, void *)/102 Closed a buffer file: /var/mobile/Containers/Data/Application/76272998-XXXX-XXXX-XXXX-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/1.mscrasheslogbuffer
11:25:01.376292 +0100 MyApp.iOS [AppCenterCrashes] DEBUG: void ms_save_log_buffer_callback(siginfo_t *, ucontext_t *, void *)/102 Closed a buffer file: /var/mobile/Containers/Data/Application/76272998-XXXX-XXXX-XXXX-9B0C7A9899E1/Library/Caches/com.microsoft.appcenter/crasheslogbuffer/2.mscrasheslogbuffer
1.mscrasheslogbuffer
最后的日志从到重复59.mscrasheslogbuffer
请注意,我的应用程序加载遵循以下步骤:
- 使用图像加载第一个 viewController,一个活动指示器调用一些 Rest API
- 在 API 调用后,使用 NavBar 对另一个 ViewController 执行 segue
应用程序似乎在两步之间崩溃:我可以看到第一个屏幕和日志表明 http/api 的东西是好的。
请注意,我在模拟器和真实设备上具有相同的行为。
有任何想法吗 ?
编辑1:添加更多日志AppCenter.LogLevel = LogLevel.Verbose;