Xamarin iOS SIGABRT Cra sh при запуске - PullRequest
1 голос
/ 26 марта 2020

Я создал кроссплатформенное приложение, используя Xamarin. Версия Android прекрасно работает, но версия IOS дает сбой примерно половине пользователей при запуске приложения. Я использую AppCenter для сообщений об ошибках, но он дает crypti c отчеты. Как я могу расшифровать это сообщение и выяснить, почему мое приложение рушится без видимой причины? Я не могу заставить его взломать sh на симуляторе, и у меня нет доступа к телефонам, на которых он падает.

Thread 0 Crashed:
0   libsystem_kernel.dylib               0x000000018d3c6930 __abort_with_payload + 8
1   libsystem_kernel.dylib               0x000000018d3caec0 abort_with_reason + 24
2   libobjc.A.dylib                      0x000000018d314244 _objc_fatalv(unsigned long long, unsigned long long, char const*, char*) + 100
3   libobjc.A.dylib                      0x000000018d3141dc _objc_fatal(char const*, ...) + 24
4   libobjc.A.dylib                      0x000000018d3114a8 void AutoreleasePoolPage::busted<void (*)(char const*, ...)>(void (*)(char const*, ...)) const + 144
5   libobjc.A.dylib                      0x000000018d314a6c AutoreleasePoolPage::busted_die() const + 8
6   libobjc.A.dylib                      0x000000018d313520 objc_autoreleasePoolPop + 52
7   CoreFoundation                       0x000000018d5dcd40 _CFAutoreleasePoolPop + 24
8   UIKitCore                            0x000000019164f4dc _prepareForCAFlush + 116
9   UIKitCore                            0x000000019167f770 _afterCACommitHandler + 116
10  CoreFoundation                       0x000000018d54de68 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 28
11  CoreFoundation                       0x000000018d548d54 __CFRunLoopDoObservers + 412
12  CoreFoundation                       0x000000018d549320 __CFRunLoopRun + 1304
13  CoreFoundation                       0x000000018d548adc CFRunLoopRunSpecific + 460
14  GraphicsServices                     0x00000001974e9328 GSEventRunModal + 100
15  UIKitCore                            0x000000019165663c UIApplicationMain + 1932
16  MyApp.iOS                            0x00000001018c5330 0x100a04000 + 15471408
17  MyApp.iOS                            0x000000010182376c 0x100a04000 + 14808940
18  MyApp.iOS                            0x00000001018236f4 0x100a04000 + 14808820
19  MyApp.iOS                            0x0000000100a8dc24 0x100a04000 + 564260
20  MyApp.iOS                            0x0000000100de3404 0x100a04000 + 4060164
21  MyApp.iOS                            0x0000000101ff1d08 0x100a04000 + 22994184
22  MyApp.iOS                            0x00000001020afa00 0x100a04000 + 23771648
23  MyApp.iOS                            0x00000001020b5cbc 0x100a04000 + 23796924
24  MyApp.iOS                            0x0000000101fcfc9c 0x100a04000 + 22854812
25  MyApp.iOS                            0x0000000102191f2c 0x100a04000 + 24698668
26  MyApp.iOS                            0x0000000100a8db7c 0x100a04000 + 564092
27  libdyld.dylib                        0x000000018d3d2360 start + 0

AppDelegate.cs

[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        AppCenter.Start("my-secret", typeof(Analytics), typeof(Crashes));

        App.screenWidth = (int)UIScreen.MainScreen.Bounds.Width;
        App.screenHeight = (int)UIScreen.MainScreen.Bounds.Height;

        CrossMediaManager.Current.Init();

        HtmlLabelRenderer.Initialize();
        Forms.SetFlags("CarouselView_Experimental");

        global::Xamarin.Forms.Forms.Init();

        LoadApplication(new App());
        return base.FinishedLaunching(app, options);
    }
}

Main.cs

static void Main(string[] args) {
    try {
        UIApplication.Main(args, null, "AppDelegate");
    }
    catch (Exception e) {
        Globals.ReportError(e, "Main.cs", "Main", "Crash");
    }
}

(Globals.ReportError - просто помощник для отчетов AppCenter.)

1 Ответ

2 голосов
/ 26 марта 2020

Предоставленной вами информации недостаточно, чтобы понять, что не так. У меня есть предложение о том, как выяснить проблему. Это не ответ, но это было бы слишком долго, чтобы разместить в комментарии. Поместите это после запуска вашего AppCenter:

if (Crashes.HasCrashedInLastSessionAsync().Result)
{
    ErrorReport crashReport = Crashes.GetLastSessionCrashReportAsync().Result;
    if (crashReport.Exception == null)
        Analytics.TrackEvent("AppCrashedInLastLaunch: Crash Report Exception is Null");
    else
    {
        Crashes.TrackError(crashReport.Exception);
        var dict = new Dictionary<string, string>();
        dict.Add("CrashId", crashReport.Id);
        dict.Add("StackTrace", crashReport.Exception.StackTrace);
        Analytics.TrackEvent(string.Format("AppCrashedInLastLaunch: " + crashReport.Exception.Message), dict);
    }
}

Кроме того, вы можете поделиться ссылкой Testflight publi c, и я могу помочь вам проверить!

...