简体   繁体   中英

Xamarin.Forms iOS Project Crashes On Startup With Linking Enabled And Auth0.OidcClient And SfListViewRenderer Enabled

I have been trying to track down a crash in my AppDelegate.cs that seems to be caused by the Auth0.OidcClient.ActivityMediator and Syncfusion.ListView.XForms.iOS.SfListViewRenderer . The crash occurs on startup only in Release mode with linking enabled (crash occurs with either Link Framework SDKs Only or Link All). I have also found that if I remove one of the following lines:

SfListViewRenderer.Init(); //Problem line 1.

or:

ActivityMediator.Instance.Send(url.AbsoluteString); //Problem line 2.

Then the crash goes away. Only with these two lines enabled and linking enabled does the crash occur. Here is my AppDelegate.cs:

 using Auth0.OidcClient;
 using Foundation;
 using PanCardView.iOS;
 using Syncfusion.ListView.XForms.iOS;
 using Syncfusion.SfAutoComplete.XForms.iOS;
 using Syncfusion.SfBusyIndicator.XForms.iOS;
 using Syncfusion.SfCalendar.XForms.iOS;
 using Syncfusion.SfCarousel.XForms.iOS;
 using Syncfusion.SfKanban.XForms.iOS;
 using Syncfusion.SfNumericTextBox.XForms.iOS;
 using Syncfusion.SfPullToRefresh.XForms.iOS;
 using Syncfusion.SfRangeSlider.XForms.iOS;
 using Syncfusion.SfRotator.XForms.iOS;
 using Rg.Plugins.Popup;
 using Syncfusion.XForms.iOS.Buttons;
 using Syncfusion.XForms.iOS.Cards;
 using Syncfusion.XForms.iOS.EffectsView;
 using Syncfusion.XForms.iOS.PopupLayout;
 using Syncfusion.XForms.iOS.TextInputLayout;
 using Syncfusion.XForms.iOS.ComboBox;
 using Syncfusion.XForms.iOS.ProgressBar;
 using Syncfusion.XForms.Pickers.iOS;
 using Xamarin.Forms.Platform.iOS;
 using Syncfusion.XForms.iOS.Border;
 using Syncfusion.SfGauge.XForms.iOS;
 using Syncfusion.SfChart.XForms.iOS.Renderers;
 using Xamarin.Forms;
 using Sharpnado.Shades.iOS;
 using UIKit;
 using Xamarin;
    
 namespace VulcanApp.iOS
 {
     // The UIApplicationDelegate for the application. This class is responsible for launching the 
     // User Interface of the application, as well as listening (and optionally responding) to 
     // application events from iOS.
     [Register("AppDelegate")]
     public partial class AppDelegate : FormsApplicationDelegate
     {
         //
         // This method is invoked when the application has loaded and is ready to run. In this 
         // method you should instantiate the window, load the UI into it and then make the window
         // visible.
         //
         // You have 17 seconds to return from this method, or iOS will terminate your application.
         //
         public override bool FinishedLaunching(UIApplication app, NSDictionary options)
         {
             Forms.SetFlags("UseLegacyRenderers");
             Forms.Init();
    
             IQKeyboardManager.SharedManager.Enable = true;
    
             iOSShadowsRenderer.Initialize();
    
             new SfRangeSliderRenderer();
             new SfRotatorRenderer();
             new SfNumericTextBoxRenderer();
             new SfBusyIndicatorRenderer();
             new SfAutoCompleteRenderer();
    
             CardsViewRenderer.Preserve();
    
             Popup.Init();
    
             SfListViewRenderer.Init(); //Problem line 1.
             SfEffectsViewRenderer.Init();
             SfCardLayoutRenderer.Init();
             SfCarouselRenderer.Init();
             SfKanbanRenderer.Init();
             SfGaugeRenderer.Init();
             SfComboBoxRenderer.Init();
             SfPopupLayoutRenderer.Init();
             SfChartRenderer.Init();
             SfLinearProgressBarRenderer.Init();
             SfTextInputLayoutRenderer.Init();
             SfBorderRenderer.Init();
             SfButtonRenderer.Init();
             SfSegmentedControlRenderer.Init();
             SfChipRenderer.Init();
             SfChipGroupRenderer.Init();
             SfCheckBoxRenderer.Init();
             SfTimePickerRenderer.Init();
             SfSwitchRenderer.Init();
             SfPullToRefreshRenderer.Init();
             SfCalendarRenderer.Init();
    
             UIApplication.SharedApplication.StatusBarHidden = true;
    
             LoadApplication(new App());
    
             return base.FinishedLaunching(app, options);
         }
    
         //This method is required for using the OidcClient on iOS.
         public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
         {
             ActivityMediator.Instance.Send(url.AbsoluteString); //Problem line 2.
    
             return true;
         }
     }
 }

I have tried removing and restoring packages. Emptying the bin/ and obj/ folders and rearranging the order in which the various Syncfusion elements are initialized. I have gotten the crash on an iOS 14.8 iPad and an iOS 15.1 iPad.

Does anyone have an idea of what could be happening here? Does anyone have any recommendations for troubleshooting?

I was able to find a solution. From my understanding the dynamic registrar was being removed causing this exception: ObjCRuntime.RuntimeException: Can't register the class Plugin.BLE.BleCentralManagerDelegate when the dynamic registrar has been linked away . I am not sure why this was happening, but adding the following flag in Additional mtouch arguments fixed the crash: --optimize=-remove-dynamic-registrar

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM