Jump to content
  • New

    • By Viktor Akselrod in Guides 0
      Здравствуйте.
      В этой статье мы поговорим об отладке приложений на iOS с помощью логирования (часть материала будет актуальна и для Android). 
      Общие сведения.
      Логирование позволяет получать информацию о работе вашего приложении даже когда оно запущено без отладчика, при фатальных падениях приложения и тд. 
      Особенно тема логирования актуальна для мобильных платформ, т.к. здесь, к сожалению, Delphi отладчик не может похвастаться такой же стабильностью и качеством, как отладчик для платформы Win32. Пошаговая отладка выливается в мучительное ожидание переходов, показываемые отладчиком значения могут не соответствовать действительности, либо вообще отсутствовать и тд. 
      Важно! Логирование не заменяет полностью отладчик, а является вспомогательным инструментом. 
      Условно механизм логирования можно разделить на источник логов и на утилиты для сборки и просмотра логов.
      Источники логов.
      Источником логов может быть как библиотека FGX Native, операционная система, так и само приложение (сообщения отправленные непосредственно разработчиком). На первые два варианта разработчик особо не может повлиять, поэтому более подробно остановимся на третьем варианте.
      Отправка сообщения в лог осуществляется с помощью кроссплатформенного класса TfgLog. Все методы TfgLog являются классовыми, а сам класс существует в единственном экземпляре - это означает, что для его использования нет необходимости создавать экземпляр класса. 
      Основным методом класса является метод Log позволяющий отправить строку с указанным уровнем лога.
      /// <summary>Выводит в системный лог сообщение <c>AMessage</c> типа <c>ALogType</c>.</summary> class procedure Log(const ALevel: TfgLogLevel; const AMessage: string); Уровни лога определяют степень важности того или иного события.
      /// <summary>Уровень логирования.</summary> TfgLogLevel = (Trace, Debug, Info, Warning, Error, Fatal); Вы можете определить минимальный уровень лога с помощью свойства MinimumLevel, чтобы уменьшить количество выводимых в лог сообщений
      /// <summary> /// Указывает минимальный уровень лога, начиная с которого сообщение будет выводиться в системный лог. /// Порядок следования уровней: Debug, Info, Warning, Error, Fatal. Debug - самый низкий. /// </summary> /// <remarks> /// Для <c>DEBUG</c> конфигурации выводятся все типы сообщений по умолчанию. Для <c>RELEASE</c> сообщений выше /// <c>Info</c>. Если вы хотите видеть в релизной сборке вашего приложения и отладочные сообщения, то задайте /// значение <c>TfgLogLevel.Debug</c> в это свойство. Данная настройка распространяется только на этот класс. На /// логирование через сервис <c>IFGXLoggerService</c> она не действует. /// </remarks> class property MinimumLevel: TfgLogLevel read FMinimumLogLevel write FMinimumLogLevel; Для удобства у класса TfgLog есть набор одноименных методов, соответствующих каждому уровню лога. Например:
      /// <summary> /// Выводит в системный лог низкоуровневое отладочное сообщение <c>AMessage</c> для выполнения трассировки. /// </summary> class procedure Trace(const AMessage: string); overload; /// <summary>Выводит в системный лог отладочное сообщение <c>AMessage</c>.</summary> class procedure Debug(const AMessage: string); overload; В дополнение, у каждого такого метода существует перегруженная версия, принимающая во втором аргументе список параметров для отправки форматированной строки:
      /// <summary> /// Выводит в системный лог низкоуровневое отладочное сообщение <c>AMessage</c> с поддержкой форматирования <c>System.Format</c>. /// </summary> class procedure Trace(const AFormat: string; const Args: array of const); overload; /// <summary> /// Выводит в системный лог отладочное сообщение <c>AMessage</c> с поддержкой форматирования <c>System.Format</c>. /// </summary> class procedure Debug(const AFormat: string; const Args: array of const); overload;
      Сборка и просмотр логов.
      Для просмотра логов с iOS используется утилита, работающая на компьютере под управлением macOS под названием Console.
      Для просмотра логов с Android используется утилита работающая на компьютере под управлением Windows под названием logcat.
      Частично логирование в контексте Android было затронуто ранее в Уроке 1 «Настройка окружения, Hello World приложение и логирование».
      В данной статье мы сосредоточимся на утилите Console.
      Важно! Подразумевается, что вы имеете настроенную связку: компьютер под управлением macOS к которому подключено устройство с iOS. 
      Исходные данные: на устройстве с iOS установлено приложение под названием TestLogging, которое имеет только две кнопки, при нажатии на которые отправляются сообщения в системный лог.
      Код выглядит следующим образом:
      uses System.SysUtils, FGX.Application, FGX.Dialogs, FGX.Log; procedure TFormMain.fgButton1Tap(Sender: TObject); begin TfgLog.Debug('Hello from TfgLog.Debug'); end; procedure TFormMain.fgButton2Tap(Sender: TObject); begin TfgLog.Info('Hello from TfgLog.Info'); end; Теперь перейдем непосредственно к утилите сбора и просмотра логов.
      Запустите утилиту Console которая находится в Launchpad -> Other.

       
      Главное окно состоит из меню навигации в левой части (1), тулбара с органами управления вверху (2) и списка логов, который занимают остальную клиентскую область окна (3).

       
      Теперь выбираем в меню навигации слева устройство из списка Devices с которого мы хотим получать логи. В нашем случае это устройство с именем IPhone.

       
      Теперь запускаем сбор логов с помощью кнопки тулбара Start или кликнув по ссылке Start streaming находящейся в центре списка логов.

      После старта список логов будет быстро наполняться сообщениями. 
      Список логов представляет собой таблицу с настраиваемыми колонками. Вы можете настроить видимость колонок по своему усмотрению с помощью контекстного меню, вызываемого по клику на заголовки таблицы.

       
      Самая полезная для нас информация находится в колонке Message - это непосредственно текстовое сообщение лога. Более удобно текстовое сообщение просматривать в окне детальной информации, которое можно открыть двойным кликом по строке списка логов, либо с помощью кнопки тулбара Info.

      Теперь запустим наше тестовое приложение и последовательно нажмем обе кнопки.
      Лог содежит тысячи записей, среди которых практически невозможно найти интересующие нас строки.  Для решения этой задачи существуют фильтры, которые располагаются в правой части тулбара. Механизм фильтрация довольно гибкий и позволяет комбинировать несколько фильтров по разным колонкам с учетом выбранного способа сравнения (частичное или полное совпадение включая вариант с отрицанием).
      Важно! Фильтрация осуществляется без учета регистра.
      Есть несколько способов, как можно отобразить только те строки, которые относятся к нашему приложению. Самый простой вариант - отфильтровать по имени процесса. Вводим фразу TestLogging в окно Search и нажимаем клавишу Enter на клавиатуре. По-умолчанию создастся фильтр с типом Any и способом сравнения Containts. Теперь изменим тип фильтра с Any на Process, a Containts на Equal, что означает, что в списке логов останутся только те строки, текст которых в колоноке равен  TestLogging. 

      На скриншоте видно, как строки переданные самой библиотекой FGX Native, так и те, которые были отправлены после нажатия на кнопки (отмечены стрелками). Теперь вы можете изучать собранную информацию просматривая сообщения. При необходимости вы можете сохранить выделенные строки в буфер обмена, либо передать их в другое приложение к помощью кнопки тулбара Share.
       
      Логирование - мощный инструмент, который может пригодиться в самых трудных и запутанных ситуациях при поиске ошибок. 
      Спасибо за внимание и удачной отладки!
       
    • By Yaroslav Brovin in Events 10
      В эту среду совместно с компанией Embarcadero проводим вебинар посвященный разработке мобильного приложения с использованием FGX Native. На вебинаре разберем одну из возможных архитектур мобильного приложения, применим шаблон MVVM для построения экранов. И познакомимся с приемами создания мобильных интерфейсов с FGX Native. 
      Когда: 23 июня 2021 в 12:00 МСК Язык: русский Заголовок: Примеры использования библиотеки FGX Native для создания макетов реальных мобильных приложений. Ссылка на регистрацию: https://lp.embarcadero.com/fgx-native Анонс: 
  1. Clients

    1. 21
      posts
    2. 230
      posts
    3. News   (375 visits to this link)

    4. 302
      posts
    5. Voitng for new features

      Here you can suggest an idea or request the necessary functionality / component. Proposals that will garner a large number of votes could potentially be included in the list of upcoming developments for updates.

      223
      posts
    6. FGX Native projects

      A section for publishing your projects developed with FGX Native.

      107
      posts
    7. Feedbacks

      Customers feedbacks.

      7
      posts
  2. Private forum. For users with active subscription

    1. Animations

      Using animation in your apps.

      17
      posts
    2. Alignment (Flexbox)

      Flexbox work, implementation nuances in FGX Native, and advice on what approaches are best used for your projects.

      33
      posts
    3. 900
      posts
    4. 52
      posts
    5. 50
      posts
    6. 34
      posts
    7. 34
      posts
    8. 3
      posts
    9. 22
      posts
    10. 5
      posts
    11. 160
      posts
    12. 18
      posts
    13. 3
      posts
    14. 7
      posts
    15. 86
      posts
    16. 330
      posts
    17. 3
      posts
    18. 60
      posts
    19. 22
      posts
    20. 5
      posts
    21. 34
      posts
    22. 45
      posts
    23. Additional files

      A set of additional extensions, examples of FGX Native.

      45
      posts
    24. iOS (Alpha testing)

      Discussion about current status of FGX Native for iOS.

      84
      posts
    25. 85
      posts
  3. Bug Reports

    1. Opened

      Section for publishing found bugs.

      64
      posts
    2. 533
      posts
  4. Organization of the work of this forum

    1. 3
      posts
  • Member Statistics

    269
    Total Members
    87
    Most Online
    mihsergni
    Newest Member
    mihsergni
    Joined
  • Who's Online   1 Member, 0 Anonymous, 5 Guests (See full list)

×
×
  • Create New...