KA0716 — Отладка вашего общего кода из Xcode

  • Запись изменена:08.12.2022
  • Post category:Публикации
  • Reading time:7 минут чтения

Два инструмента — лучшие друзья программиста: консольный регистратор и точки останова. Они действительно улучшат вашу жизнь, помогая выявлять и ловить те неприятные маленькие ошибки, которые иногда появляются из ниоткуда.

Вы использовали регистратор на протяжении всей этой книги. В некоторых случаях вы добавляли простое сообщение в журнал, например «прошел этот блок кода». В других случаях вы печатали все переменные в методе. Сообщения журнала могут иметь теги, позволяющие фильтровать их, и атрибуты, которые можно установить для определения различных уровней приоритета. Это может помочь вам легко понять, где что-то пошло не так.

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

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

Отладка общего модуля

И Android Studio, и Xcode имеют отличные возможности отладки. Собственный код легко отлаживать в обеих IDE. Для этого вам нужно добавить точку останова на строку, содержащую инструкцию, которую вы хотите проанализировать, а затем подключить отладчик к текущему процессу приложения или просто перезапустить его в режиме отладки. Для обоих вариантов приложение останавливается перед выполнением этой инструкции.

В Android Studio отладка пользовательского интерфейса или общего модуля аналогична нативному коду, тогда как в Xcode это немного сложнее. Прежде чем приступить к отладке кода в Xcode, вы увидите, как это делается в Android Studio, и сможете выявить сходство между двумя IDE.

Отладка в Android Studio

Шаги, необходимые для отладки общего модуля, точно такие же, как описано ранее, но вместо того, чтобы добавлять точку останова в приложение Android, вам нужно добавить ее в общий модуль.

Рис. B.1 — Окно отладчика Android Studio

Рис. B.1 — Окно отладчика Android Studio

Перед достижением точки останова приложение останавливается. Вы увидите экран, похожий на тот, что на картинке. Вот пошаговое описание того, что вы можете делать в режиме отладки:

  1. Перезапускает приложение в режиме отладки.
  2. Прикрепляет отладчик к приложению, не перезапуская его.
  3. Точка разрыва строки. Определяет, где приложение должно быть приостановлено. Эта инструкция будет выполнена, только если вы продолжите процесс отладки.
  4. Если вы хотите возобновить работу приложения, вы можете нажать на эту зеленую стрелку. Приложение снова остановится на следующей точке останова.
  5. Останавливает приложение.
  6. Показывает список установленных вами точек останова.
  7. Заглушает точки останова. Пока включено, приложение не будет приостанавливаться ни на одной точке останова.
  8. Перешагните эту инструкцию. Позволяет перейти к следующей инструкции в той же области.
  9. Шаг в. Показывает следующий метод, который будет вызван. Она не обязательно должна быть на том же уровне, что и эта строка кода, если следующая инструкция является вызовом другого класса. Это противоречит шагу, при котором происходит переход к следующей инструкции внутри того же метода.
  10. Принудительный переход к следующей инструкции. Это действие аналогично предыдущему. Разница в том, что если следующий метод, который будет вызываться, будет из сторонней библиотеки. Он переходит к этому конкретному вызову, если у вас есть его исходный код, или показывает сгенерированные заглушки, если у вас их нет. Шаг в, вероятно, пропустит его и остановится только на следующей инструкции.
  11. Выйдите из текущей инструкции. Остальная часть кода будет выполнена, и отладчик снова остановится, когда будет выполнен приостановленный метод.
  12. Добавьте новые часы. С помощью этого параметра вы можете проверить любое свойство или запустить любой метод, доступный в текущей рабочей области.
  13. Список наблюдателей. Когда приложение останавливается, сразу же отображается список переменных, которые вы можете проанализировать. Все наблюдатели, которых вы добавили в предыдущем пункте, также будут отображаться здесь.

Вот и все! С итоговым проектом книги вы можете ознакомиться в материалах этого приложения. Откройте его в Android Studio, добавьте точку останова и запустите приложение в режиме отладки. Попробуйте действия, которые у вас есть, отслеживайте сетевой запрос и проверяйте его ответ — и получайте удовольствие. :]

Отладка в Xcode

Как видите, отладка общего модуля из Android Studio проста. Если вы хотите сделать то же самое в Xcode, это более… сложно. :]

Если вы хотите отладить пользовательский интерфейс iOS, он использует процесс, с которым вы уже знакомы. Вам просто нужно установить точку останова, и в следующий раз, когда приложение выполнит эту инструкцию, оно остановится.

Но если вы хотите отладить общий модуль, вам потребуется еще пара шагов. Во-первых, вам нужно установить плагин Kotlin Native Xcode Support. Вы можете найти его в репозитории Touchlab GitHub или в разделе материалов этого приложения.

Примечание . Последняя версия этого плагина выпущена в декабре 2020 года. Хотя Touchlab в настоящее время обеспечивает поддержку новейших версий Xcode, на данный момент нет гарантии, что он будет поддерживать будущие версии. Более того, есть несколько человек, сообщающих о проблемах с Xcode 13.1 — хотя на момент написания этой статьи все работает без проблем в этой конкретной версии.

Установка плагина Kotlin Native Xcode Support

Чтобы установить плагин, вам нужно сначала закрыть Xcode. Затем откройте командную строку и перейдите в корневую папку репозитория. Там введите:

./setup.sh

Вот что вы увидите в консоли:

Creating new Kotlin plugin Creating new Kotlin language spec

Это означает, что вы успешно установили плагин.

Примечание . Согласно документации плагина, если вы используете Xcode 11, вам нужно изменить путь к каталогу xcode11 и вместо этого запустить:

./setup-xcode11.sh

В следующий раз, когда вы откроете Xcode, вы увидите следующее приглашение:

Примечание . Пакет кода «Kotlin.ideplugin» не предоставляется Apple. Загрузка кода, не предоставленного Apple, может отрицательно сказаться на безопасности и стабильности Xcode или связанных инструментов.

Каждый раз, когда вы устанавливаете сторонний плагин, вы будете видеть подобное уведомление. Поскольку Apple не выпускала и не проверяла его, они не могут гарантировать его поведение.

Пока не будет прямой поддержки в IDE, вам нужно использовать этот плагин — поэтому нажмите « Загрузить пакет » . Когда этот процесс закончится, откройте проект из материалов.

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

./gradlew createSwiftPackage

Теперь, когда у вас запущен и запущен проект, на левой боковой панели Xcode под папкой Pods щелкните правой кнопкой мыши пустую область и выберите «Новая группа». Это добавит новую папку в проект. Переименуйте его в Общий .

Вы собираетесь добавить исходный код общего модуля, который использует ваше приложение для iOS. Еще раз щелкните правой кнопкой мыши только что добавленную общую папку и выберите «Добавить файлы…».

Откроется новое окно. Перейдите назад к общему модулю и в этой папке выберите каталоги commonMain и iosMain . Выберите параметр Создать ссылки на папки для любой добавленной папки , чтобы избежать копирования этих файлов в проект.

Ваш экран будет похож на этот:

Рис. B.2 — Иерархия папок Xcode

Рис. B.2 — Иерархия папок Xcode

Классы Kotlin теперь имеют подсветку синтаксиса, что облегчает чтение кода. Откройте FeedPresenter.kt и определите видимость метода, строки, цикл, допустимость значений NULL и т. д.

Время протестировать отладку. В этом файле добавьте точку останова на вызов fetchFeedвнутри forцикла fetchAllFeeds.

Примечание . Чтобы добавить точку останова в Xcode, вам просто нужно щелкнуть номер строки. Здесь он может иметь два разных состояния: отключено, если у него есть прозрачность, и включено, если ее нет. Чтобы удалить точку останова, щелкните ее и перетащите вправо.

Скомпилируйте и запустите приложение.

Рис. B.3 — Xcode останавливается в точке останова

Рис. B.3 — Xcode останавливается в точке останова

Xcode приостанавливает ваше приложение непосредственно перед выполнением этой инструкции.

Отладка вашего приложения для iOS

Когда состояние приложения приостановлено, Xcode переключается в режим отладки и показывает вам список действий, которые вы можете предпринять. Как видите, они аналогичны тем, которые предлагает Android Studio:

Рис. B.4 — Окно отладчика Xcode

Рис. B.4 — Окно отладчика Xcode

  1. Это действие компилирует и запускает приложение.
  2. Как только вы добавите точку останова, в следующий раз, когда эта строка будет выполняться, приложение автоматически остановится. Вам не обязательно перезапускать или подключать отладчик.
  3. Перетащив это действие вверх, вы можете переместить выполнение приложения на предыдущую строку.
  4. Это действие позволяет отключить все точки останова.
  5. Когда приложение достигает точки останова, оно приостанавливается. Код больше не будет выполняться без действий пользователя. Это позволяет приложению возобновить работу и продолжить работу, пока не будет найдена другая точка останова.
  6. Переступить. Вы можете перейти к следующей инструкции, не добавляя еще одну точку останова.
  7. С помощью шага в действие вы можете получить доступ к методу, который будет вызываться.
  8. Выйдите из текущего исполнения. Приложение будет продолжать работать до тех пор, пока этот метод не вернется.
  9. Щелкнув правой кнопкой мыши в этой области, вы можете выбрать «Добавить выражение…», и инструкция, которую вы хотите отслеживать, будет отображаться в этом списке.

Как видите, Kotlin Native Xcode Support Plugin — отличный инструмент для отладки вашей бизнес-логики из Xcode.

Удаление плагина Kotlin Native Xcode Support

Невозможно удалить плагин непосредственно из Xcode. Лучшее решение — закрыть IDE и сразу перейти в каталог, где они установлены:

~/Library/Developer/Xcode/Plug-ins/

Удалите те, которые больше не нужны. В данном случае это плагин Kotlin.ide .

Куда пойти отсюда?

Отличная работа! Теперь, когда вы увидели, как можно отлаживать общий модуль, почему бы не углубиться в отладку iOS или Android с помощью этих видеокурсов? Или, если вы ищете более продвинутые концепции, попробуйте книгу.

В следующем приложении вы узнаете, как повторно использовать свой пользовательский интерфейс между Android и настольным компьютером. Теперь, когда вы знаете, как поделиться своей бизнес-логикой, посмотрите, как вы также можете поделиться своим пользовательским интерфейсом Compose.