2016-06-11 3 views
1

Есть ли какой-либо «стандартный» и автоматический способ получения следов стека из приложения App Store Xamarin.iOS?Удобная обработка исключений в Xamarin.iOS. Приложение Appstore.

Это было давно, когда я писал родные приложения iOS 4.0 в Xcode, возникла огромная проблема, чтобы получить трассировку стека исключений из бинарной версии: приложения отправили несимвольные стеки на мой сервер, я их загрузил, проанализировал dSYM файлы и заменить адреса на реальные методы. Даже написал java помощник для этого. Но это была хрупкая конструкция (несколько архитектур, обновление двоичного формата и т. Д.), И давно я нашел, что она работает некорректно. Это было не нужно, и я просто забыл.

В андроиде и Win/Wp Я получаю управляемые стеки, так как мне нужно знать об ошибках, прежде всего в моем коде на C#.

Но теперь я пишу приложение, используя Monogame и Xamarin.iOS в VisualStudio:

  AppDomain.CurrentDomain.UnhandledException += (sender, args) => 
      {    
       Ut.saveStringToFile("exceptions.log", args.ExceptionObject.ToString()); 
      }; 

Но в Xamarin.iOS приложение я обнаружил, что я не могу иметь стеки только из коробки: даже на симуляторе в выпуске удаляются некоторые строки (хотя я отключил LLVM и оптимизацию в сборке релизов), другие указывают на некоторые адреса.

Как современные программисты получают стеки из приложений Xamarin.iOS? Без скрытого apis (я планирую разместить приложение в Appstore) и testflight (использование сторонних сервисов может быть слишком дорогостоящим в настоящее время для бесплатного владельца приложения).

ответ

1

Удивительно, но вполне достаточно:

 try 
     { 
      AppDomain.CurrentDomain.UnhandledException += (sender, args) => 
      { 
       Exception e = args.ExceptionObject as Exception; 
       String s = (e!=null) ? ("Error Handled: " + e.Message + "\n" + e.StackTrace) : 
        ("Error Handled (not Exception): " + args.ExceptionObject.ToString()); 
       Ut.saveStringToFile("exceptions.log", s); 

      }; 
     } 
     catch (Exception) 
     { 
     } 

И в настройках проекта (по крайней мере, что я сделал для AdHoc сборки): IOS Build-> включить отладку, Build-> Оптимизация кода = выкл, Build- > Дополнительно-> DebugInfo = Полный.

В exceptions.log после аварии я получаю трассировку стека с номерами строк. Я играл с Hockeyapp с этими настройками отладки, но предоставлял dSym. Не знаю, почему я должен использовать приложение для хоккея (даже бесплатно), когда он создает те же самые стеки, что и простой обработчик. Мой самозанятый онлайн-багтрекер проще, чем огромная конструкция msft, но также может хранить/искать/сортировать стеки. Нет чуда. Увы.

Вопрос еще в следующем: как я могу видеть номера строк в стеках выпуска AdHoc/AppStore двоичный? (dSym обрабатывает только собственный код, отладочная информация об управляемом коде находится в pdb)

0

Microsoft HockeyApp хорошо работает с Xamarin и может бесплатно использовать до 2 приложений. Он включает в себя распространение тестов и отчеты о сбоях и аналитику.

+0

Я не занимаюсь сторонними службами, они ненадежны. У меня есть полный стек сетевых сервисов (хранилище данных, аналитика, отслеживание, обмен сообщениями, обратная связь, IAP, безопасность и т. Д.), Созданный самостоятельно для android и win/wp, и только я могу изменить форматы данных или что-то еще, поэтому нет зависимостей. Очень сложно и нервно обращаться со всеми такими зависимостями, как сторонние сервисы, и я использую Xamarin.iOS только потому, что с отдельным dev в xcode общая сложность системы становится слишком большой, чтобы контролировать ее только одним человеком. Третья сторона также увеличивает эту сложность - как внешний фактор. – Tertium

Смежные вопросы