Два инструмента — лучшие друзья программиста: консольный регистратор и точки останова. Они действительно улучшат вашу жизнь, помогая выявлять и ловить те неприятные маленькие ошибки, которые иногда появляются из ниоткуда.
Вы использовали регистратор на протяжении всей этой книги. В некоторых случаях вы добавляли простое сообщение в журнал, например «прошел этот блок кода». В других случаях вы печатали все переменные в методе. Сообщения журнала могут иметь теги, позволяющие фильтровать их, и атрибуты, которые можно установить для определения различных уровней приоритета. Это может помочь вам легко понять, где что-то пошло не так.
Точки останова переносят вас в момент выполнения определенной инструкции. Вы можете видеть все шаги, которые ведут к этой остановке, и все, что увенчается успехом. Возможно, вы захотите погрузиться глубже и проанализировать более конкретный поток или просто посмотреть значения всех переменных в данный момент.
Поскольку вы уже знакомы с регистратором, теперь вы узнаете, как можно отлаживать общий модуль из Xcode.
Отладка общего модуля
И Android Studio, и Xcode имеют отличные возможности отладки. Собственный код легко отлаживать в обеих IDE. Для этого вам нужно добавить точку останова на строку, содержащую инструкцию, которую вы хотите проанализировать, а затем подключить отладчик к текущему процессу приложения или просто перезапустить его в режиме отладки. Для обоих вариантов приложение останавливается перед выполнением этой инструкции.
В Android Studio отладка пользовательского интерфейса или общего модуля аналогична нативному коду, тогда как в Xcode это немного сложнее. Прежде чем приступить к отладке кода в Xcode, вы увидите, как это делается в Android Studio, и сможете выявить сходство между двумя IDE.
Отладка в Android Studio
Шаги, необходимые для отладки общего модуля, точно такие же, как описано ранее, но вместо того, чтобы добавлять точку останова в приложение Android, вам нужно добавить ее в общий модуль.

Рис. B.1 — Окно отладчика Android Studio
Перед достижением точки останова приложение останавливается. Вы увидите экран, похожий на тот, что на картинке. Вот пошаговое описание того, что вы можете делать в режиме отладки:
- Перезапускает приложение в режиме отладки.
- Прикрепляет отладчик к приложению, не перезапуская его.
- Точка разрыва строки. Определяет, где приложение должно быть приостановлено. Эта инструкция будет выполнена, только если вы продолжите процесс отладки.
- Если вы хотите возобновить работу приложения, вы можете нажать на эту зеленую стрелку. Приложение снова остановится на следующей точке останова.
- Останавливает приложение.
- Показывает список установленных вами точек останова.
- Заглушает точки останова. Пока включено, приложение не будет приостанавливаться ни на одной точке останова.
- Перешагните эту инструкцию. Позволяет перейти к следующей инструкции в той же области.
- Шаг в. Показывает следующий метод, который будет вызван. Она не обязательно должна быть на том же уровне, что и эта строка кода, если следующая инструкция является вызовом другого класса. Это противоречит шагу, при котором происходит переход к следующей инструкции внутри того же метода.
- Принудительный переход к следующей инструкции. Это действие аналогично предыдущему. Разница в том, что если следующий метод, который будет вызываться, будет из сторонней библиотеки. Он переходит к этому конкретному вызову, если у вас есть его исходный код, или показывает сгенерированные заглушки, если у вас их нет. Шаг в, вероятно, пропустит его и остановится только на следующей инструкции.
- Выйдите из текущей инструкции. Остальная часть кода будет выполнена, и отладчик снова остановится, когда будет выполнен приостановленный метод.
- Добавьте новые часы. С помощью этого параметра вы можете проверить любое свойство или запустить любой метод, доступный в текущей рабочей области.
- Список наблюдателей. Когда приложение останавливается, сразу же отображается список переменных, которые вы можете проанализировать. Все наблюдатели, которых вы добавили в предыдущем пункте, также будут отображаться здесь.
Вот и все! С итоговым проектом книги вы можете ознакомиться в материалах этого приложения. Откройте его в 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
Классы Kotlin теперь имеют подсветку синтаксиса, что облегчает чтение кода. Откройте FeedPresenter.kt и определите видимость метода, строки, цикл, допустимость значений NULL и т. д.
Время протестировать отладку. В этом файле добавьте точку останова на вызов fetchFeed
внутри for
цикла fetchAllFeeds
.
Примечание . Чтобы добавить точку останова в Xcode, вам просто нужно щелкнуть номер строки. Здесь он может иметь два разных состояния: отключено, если у него есть прозрачность, и включено, если ее нет. Чтобы удалить точку останова, щелкните ее и перетащите вправо.
Скомпилируйте и запустите приложение.

Рис. B.3 — Xcode останавливается в точке останова
Xcode приостанавливает ваше приложение непосредственно перед выполнением этой инструкции.
Отладка вашего приложения для iOS
Когда состояние приложения приостановлено, Xcode переключается в режим отладки и показывает вам список действий, которые вы можете предпринять. Как видите, они аналогичны тем, которые предлагает Android Studio:

Рис. B.4 — Окно отладчика Xcode
- Это действие компилирует и запускает приложение.
- Как только вы добавите точку останова, в следующий раз, когда эта строка будет выполняться, приложение автоматически остановится. Вам не обязательно перезапускать или подключать отладчик.
- Перетащив это действие вверх, вы можете переместить выполнение приложения на предыдущую строку.
- Это действие позволяет отключить все точки останова.
- Когда приложение достигает точки останова, оно приостанавливается. Код больше не будет выполняться без действий пользователя. Это позволяет приложению возобновить работу и продолжить работу, пока не будет найдена другая точка останова.
- Переступить. Вы можете перейти к следующей инструкции, не добавляя еще одну точку останова.
- С помощью шага в действие вы можете получить доступ к методу, который будет вызываться.
- Выйдите из текущего исполнения. Приложение будет продолжать работать до тех пор, пока этот метод не вернется.
- Щелкнув правой кнопкой мыши в этой области, вы можете выбрать «Добавить выражение…», и инструкция, которую вы хотите отслеживать, будет отображаться в этом списке.
Как видите, Kotlin Native Xcode Support Plugin — отличный инструмент для отладки вашей бизнес-логики из Xcode.
Удаление плагина Kotlin Native Xcode Support
Невозможно удалить плагин непосредственно из Xcode. Лучшее решение — закрыть IDE и сразу перейти в каталог, где они установлены:
~/Library/Developer/Xcode/Plug-ins/
Удалите те, которые больше не нужны. В данном случае это плагин Kotlin.ide .
Куда пойти отсюда?
Отличная работа! Теперь, когда вы увидели, как можно отлаживать общий модуль, почему бы не углубиться в отладку iOS или Android с помощью этих видеокурсов? Или, если вы ищете более продвинутые концепции, попробуйте книгу.
В следующем приложении вы узнаете, как повторно использовать свой пользовательский интерфейс между Android и настольным компьютером. Теперь, когда вы знаете, как поделиться своей бизнес-логикой, посмотрите, как вы также можете поделиться своим пользовательским интерфейсом Compose.