2016-05-17 12 views
1

iOSアプリのクラッシュに関する多くの記事をApple Review Teamでレビューしたところ、解決策が見つからず、クラッシュログ情報で見つかった。Xamarin iOSクラッシュ - Appleのレビュー時のみ

これはXamarin.Formsプロジェクトです。私はドロイドとiOSプロジェクトのPCLを持っています。私のドロイドプロジェクトは素晴らしい作品です。私はそこに問題はない。私のiOSプロジェクトは私が問題を抱えているところです。何の問題もなくこれをデバッグできます。私は、XCodeと複数の実際のデバイスを介して、さまざまなシミュレータでこれをテストしました。私はいつも、Appleが特定のアクションを実行したときにアプリケーションがクラッシュすると言って、私のアプリケーションを却下します。私はクラッシュを複製するために何度も試みましたが、できません。

私はアップルのクラッシュログを象徴しています。それはthis linkで見ることができます。クラッシュログにコードが表示されていて、何が間違っていたのか分かりません。私はと思う。それは私と非同期/待っていることと関係があるが、これを確認することはできない。

私が役に立ったら、Xamarinのバージョン2.2.0.31を使用しています。

アップルのクラッシュログは初めてのもので、解読が非常に難しいと感じています。誰かが私が間違っていることを理解するのを助けることができますか?

UPDATE含ま

は、要求されたコードです。

のiOSプロジェクト - Main.cs

public class Application 
    { 
     // This is the main entry point of the application. 
     static void Main(string[] args) 
     { 
      // if you want to use a different Application Delegate class from "AppDelegate" 
      // you can specify it here. 
      UIApplication.Main(args, null, "AppDelegate"); 
     } 
    } 

のiOSプロジェクト - AppDelegate.cs

public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
     { 
      global::Xamarin.Forms.Forms.Init(); 

      App.ScreenWidth = (int)UIScreen.MainScreen.Bounds.Width; 
      App.ScreenHeight = (int)UIScreen.MainScreen.Bounds.Height; 

      UINavigationBar.Appearance.TintColor = UIColor.FromRGB(40, 51, 65); 

      FormsMaps.Init(); 
      AdvancedTimerImplementation.Init(); 
      CachedImageRenderer.Init(); 

      LoadApplication(new App()); 

      return base.FinishedLaunching(app, options); 
     } 

共有プロジェクト - App.cs

public App() 
      { 
       //do the initial setup 
       var nav = new NavigationService(); 
       if (!SimpleIoc.Default.IsRegistered<INavigationServiceEx>()) 
        SimpleIoc.Default.Register<INavigationServiceEx>(() => nav); 

       var apiMgr = new ApiManager(); 
       if (!SimpleIoc.Default.IsRegistered<ApiManager>()) 
        SimpleIoc.Default.Register<ApiManager>(() => apiMgr); 

       var storageMgr = new StorageManager(); 
       if (!SimpleIoc.Default.IsRegistered<StorageManager>()) 
        SimpleIoc.Default.Register<StorageManager>(() => storageMgr); 

       var externalMaps = DependencyService.Get<IExternalMaps>(); 
       if (!SimpleIoc.Default.IsRegistered<IExternalMaps>()) 
        SimpleIoc.Default.Register<IExternalMaps>(() => externalMaps); 

       var mediaService = DependencyService.Get<IMedia>(); 
       mediaService.Initialize(); 
       if (!SimpleIoc.Default.IsRegistered<IMedia>()) 
        SimpleIoc.Default.Register<IMedia>(() => mediaService); 

       var geolocationService = DependencyService.Get<IGeolocator>(); 
       if (!SimpleIoc.Default.IsRegistered<IGeolocator>()) 
        SimpleIoc.Default.Register<IGeolocator>(() => geolocationService); 

       nav.Configure(ViewModelLocator.StartupPage, typeof(StartupView)); 
       nav.Configure(ViewModelLocator.LoginPage, typeof(LoginView)); 
       nav.Configure(ViewModelLocator.RegisterPage, typeof(RegisterView)); 
       nav.Configure(ViewModelLocator.QouponsPage, typeof(QouponsView)); 
       nav.Configure(ViewModelLocator.UserProfilePage, typeof(UserProfileView)); 
       nav.Configure(ViewModelLocator.EditUserProfilePage, typeof(EditUserProfileView)); 
       nav.Configure(ViewModelLocator.CompanyPage, typeof(CompanyView)); 


    nav.Configure(ViewModelLocator.RedeemPage, typeof(RedeemView)); 
      nav.Configure(ViewModelLocator.SettingsPage, typeof(SettingsView)); 
      nav.Configure(ViewModelLocator.HelpPage, typeof(HelpView)); 

      var startupView = new StartupView(); 
      var startupPage = new NavigationPage(startupView); 
      startupPage.BarBackgroundColor = Color.FromHex("#FF8A07"); 

      nav.Initialize(startupPage); 
      startupView.Start(); 

      MainPage = startupPage; 
     } 
+0

Xamarin.iOS Appクラスの 'Main'と、Xamarin.Formsアプリケーションクラスのコンストラクタを投稿するのに役立つかもしれません。 –

+0

@ MarkLarter私はいくつかのコードを含む – Travyguy9

+0

http:// stackoverflow。com/questions/15683624/exc-bad-access-sigabrt-ios-crash-log。それが役立つなら、これを通って行ってください。 –

答えて

2

あなたの非同期で何かコードで例外がスローされ、その例外の例外ハンドラが存在しないように見えます(exceptなしの例外処理ハンドラがプロセスをクラッシュさせます)。

これは、それがメインスレッドで例外をスロー非同期実行時のロジックを示し、あなたのメインスレッドからです:

13 QneoiOS 0x000000010023039c System_Runtime_ExceptionServices_ExceptionDispatchInfo_Throw + 44 
14 QneoiOS 0x000000010022eea0 System_Runtime_CompilerServices_AsyncMethodBuilderCore__ThrowAsyncm__0_object + 80 
15 QneoiOS 0x0000000100b3b798 UIKit_UIKitSynchronizationContext__Postc__AnonStorey0__m__0 (UIKitSynchronizationContext.cs:24) 
16 QneoiOS 0x0000000100b55fd4 Foundation_NSAsyncActionDispatcher_Apply (NSAction.cs:163) 

あなたは、この例外の詳細を必要とする、クラッシュレポートをするのに十分な情報が含まれていませんさらに診断する。

クラッシュレポートソリューション(Xamarin Insightsなど)を追加して再送信し、Appleのレビュー中にクラッシュが発生したときにXamarin Insightsで例外に関する情報を取得することをお勧めします。

+0

私はそれをして問題を発見しました。誰かが答えを知ることはほとんど不可能なので(私が言ったように)、私はあなたを答えとして受け入れます。問題は、私が使用していたライブラリ(IAdvancedTimer - https://github.com/ufuf/AdvancedTimer)がリリースモードでは常にnullだったという事実でした。私はそれが他人にも起こったと思います。コードをローカルに実装しましたが、現在は動作しています。 – Travyguy9

0

私は同様の問題がありました。 Microsoft StudioのXamarinに移動しました。デバッガの&シミュレータで動作し、リリースモードではシミュレータ上で動作しましたが、testflightとレビューでクラッシュしました。私の解決策は2つありました。リンカー設定をLink AllではなくLink SDKに変更しました。私はリリース証明書で取り消し、新しい配布プロビジョニングプロファイルで再作成しました。これは私の問題を解決しました。他の人に役立つことを願っています。

関連する問題