Урок 1.7 Создание, запуск и отладка приложения

Урок 1.7 Создание, запуск и отладка приложения

В то время как плейграунды Xcode являются отличными инструментами для изучения и экспериментов с языком программирования Swift, проекты Xcode ориентированы на создание приложений. 

Когда вы пишете код, вам захочется посмотреть, какое влияние он оказывает на ваше приложение. Для этого Xcode включает в себя Simulator, приложение, которое позволяет вам тестировать свои приложения на различных устройствах и размерах экрана, включая старые устройства, на которых могут отсутствовать последние аппаратные усовершенствования, такие как Touch или Face ID, или кнопка Home, которая была удалена на iPhone X.

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


Чему Вы Научитесь

  • Как использовать симулятор для запуска приложений в среде Xcode
  • Как запустить приложение на физическом устройстве
  • Как выполнить базовую отладку с использованием точек останова

Терминология

Построение и запуск

Ваш первый шаг - создать новый проект в Xcode. Вы увидите тот же шаблон приложения для iOS, что и в предыдущем уроке. При создании проекта убедитесь, что для параметра интерфейс установлено значение Storyboard (Раскадровка). Назовите проект "GettingStarted" и выберите место для его сохранения.

Далее вам будет представлена рабочая область Xcode. Найдите меню Схемы на панели инструментов Xcode, затем выберите устройство, которое вы хотите смоделировать, из списка.

Нажмите кнопку Run (Выполнить) или используйте сочетание клавиш (Command-R), чтобы начать запуск приложения в симуляторе.

После запуска симулятора вы должны увидеть изображение устройства на белом фоне. ​Чтобы повернуть изображение из книжной ориентации в альбомную, используйте сочетания клавиш Command-Стрелка влево и Command-Стрелка вправо.

Изображение симулятора может казаться довольно большим, в зависимости от разрешения экрана вашего компьютера Mac и устройства, которое вы выбрали для имитации. Из приложения симулятора вы можете использовать сочетания клавиш, от Command-1 до Command-3, для увеличения или уменьшения масштаба изображения устройства. Если вы используете более старый Mac, вы можете выбрать более старое устройство с более низким разрешением, например iPhone SE, чтобы уменьшить общее воздействие симулятора на вашу систему.

Чтобы выйти из симулятора, используйте сочетание клавиш Command-Q. Или просто вернитесь к Xcode.

Симулятор работает не для всех частей приложения. Определенные взаимодействия зависят от фактического физического устройства для запуска. Например, если вы попытаетесь использовать симулятор для тестирования взаимодействия с приложением камеры, программа выйдет из строя. Если ваш код зависит от других аппаратных компонентов, которых нет на Mac, — например, акселерометра, гироскопа или датчика приближения, — вам лучше протестировать его на реальном устройстве.

Симулятор также имеет некоторые программные ограничения. Например, push—уведомления могут доставляться только на физические устройства, а платформа MessageUI, которая помогает создавать электронные и текстовые сообщения, несовместима с симулятором. Если вы столкнулись с большим количеством проблем в симуляторе, попробуйте протестировать код на своем iPhone или iPad. Ваши проблемы могут быть решены.

Симулятор работает на компьютерах Mac, многие из которых построены на архитектуре Intel "x86-64", но устройства iOS построены на архитектуре ARM (Advanced RISC Machine). Это означает, что в том, как работает ваше приложение, могут быть скрытые (а иногда и тонкие) различия.

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

Использование персонального устройства

Прелесть мобильных приложений в том, что вы можете использовать их где угодно. Возможно, вы обнаружите, что хотите поделиться своими успехами в программировании с друзьями и коллегами. Но прежде чем вы сможете начать запускать свой код на физическом устройстве, у вас должна быть учетная запись на веб-сайте разработчика Apple. Учетные записи бесплатны, так что не волнуйтесь.

Используя веб-браузер, перейдите к developer.apple.com и нажмите "Учетная запись". Вы можете зарегистрироваться, используя свой существующий Apple ID. Если у вас нет Apple ID, создайте его — это тоже бесплатно. Как только вы введете свой Apple ID, ваша учетная запись разработчика будет в порядке, и вы сможете вернуться к Xcode.

(С бесплатной учетной записью вы можете запускать свои приложения для iOS только на одном физическом устройстве. Чтобы распространять свои приложения на нескольких устройствах или публиковать их в App Store, вам необходимо зарегистрироваться в программе Apple Developer Program.)

Теперь вам нужно сообщить Xcode о вашей новой учетной записи разработчика. Откройте Настройки Xcode с помощью сочетания клавиш Command-Comma (или выберите Xcode > Preferences в строке меню Mac), а затем нажмите кнопку Учетные записи в левом верхнем углу. Нажмите кнопку “+” в левом нижнем углу и выберите в меню пункт Добавить Apple ID. После ввода своих учетных данных вы готовы запускать и отлаживать приложения на физическом устройстве iOS.

Подключите устройство iOS к компьютеру Mac с помощью соответствующего USB-кабеля. Xcode автоматически загрузит необходимую информацию с устройства и отобразит его название в меню Схемы. Выберите имя вашего физического устройства, которое обычно находится в верхней части списка, перед симуляторами устройств.

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

Создайте и запустите еще раз, и вы увидите тот же простой белый экран на вашем устройстве iOS. Чтобы остановить запуск приложения, нажмите кнопку "Остановить" в левом конце панели инструментов Xcode (или используйте сочетание клавиш с командной строкой).

Если запустить приложение не удаётся из-за ошибки:

Ненадёжный разработчик. Настройки управления устройством не позволяют использовать приложения разработчика.

нужно зайти в настройки iPhone: Настройки > Основные > VPN и управление устройством. Нажмите на имя профиля разработчика, чтоб установить доверие с разработчиком. 

Построение и управление по беспроводной сети

Xcode также предоставляет вам возможность развертывания приложения на вашем устройстве по сети. Для этого подключите устройство iOS к компьютеру Mac с помощью соответствующего USB-кабеля и откройте окно "Устройства и симуляторы", выбрав "Устройства и симуляторы" в раскрывающемся списке "Окно".

Убедитесь, что ваше устройство выбрано в списке, расположенном дальше всего слева в окне Устройства и симуляторы. Установите флажок Connect via network box (Подключиться через сеть)  1 

 

Если ваше устройство подключено к той же сети, что и ваш Mac, через несколько мгновений рядом с именем вашего устройства появится глобус. Это означает, что ваше устройство подключено по беспроводной сети.  2  

Теперь вы можете отсоединить USB-кабель, соединяющий ваше устройство с компьютером Mac, и создать и запустить приложение по беспроводной сети.

В большинстве случаев описанных выше шагов достаточно для беспроводного сопряжения. Однако, если это не сработает для вас, возможно, вы находитесь в корпоративной или институциональной сети, где системный администратор установил определенные сетевые ограничения. В этом случае откройте окно "Устройства и симуляторы", удерживайте управление и щелкните свое устройство, затем выберите "Подключиться по IP-адресу" в представленном меню. Затем вам нужно найти IP-адрес вашего устройства в настройках вашего устройства, ввести его в приглашении и нажать кнопку Подключиться. Это должно привести к успешному сопряжению вашего устройства. Если у вас возникнут проблемы с беспроводной отладкой, вы всегда можете выполнить сопряжение по USB-кабелю.

Отладка приложения

Даже лучшие разработчики с трудом пишут идеальный код. Отладка - это процесс выявления и устранения проблем, которые могут возникнуть в вашем приложении. Xcode предоставляет инструменты, которые помогут вам в этом процессе.
Когда вы запускаете приложение, как описано выше, либо на симуляторе, либо на своем устройстве, Xcode подключит приложение к его отладчику. Это позволяет вам наблюдать за выполнением вашего кода в режиме реального времени, останавливать выполнение кода с помощью точек останова, выводить информацию из вашего кода на консоль и многое другое.

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

Предупреждения

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

  • Написание кода, который никогда не выполняется
  • Создание переменной, которая никогда не меняется
  • Использование устаревшего кода (также известного как устаревший код)

Взгляните на предупреждение. Вернувшись в Xcode, выберите ViewController в навигаторе проекта и в области редактора добавьте следующую строку кода чуть ниже строки super.viewDidLoad():

 

let x = 4

 

Этот код присвоил значение 4 константе с именем x. Создайте свое приложение с помощью Command-B. Вы должны увидеть желтый предупреждающий знак с пояснением в строке, которую вы только что добавили.

Xcode сделает все возможное, чтобы объяснить предупреждение простым способом:

 

Инициализация неизменяемого значения ‘x’ никогда не использовалась; подумайте
о замене присваиванием ‘_’ или его удалении.

 

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

Ошибки компилятора

Ошибка указывает на более серьезную проблему — например, недопустимый код (например, опечатка), неправильное объявление переменной или неправильный вызов функции. В отличие от предупреждения, ошибка предотвращает выполнение кода. Симулятор даже не запустится, если в вашем коде есть ошибка.

Вот взгляд на две разные ошибки в процессе создания. В ViewController удалите открывающую и закрывающую скобки в конце super.viewDidLoad(), оставив super.viewDidLoad. Под этой строкой кода напишите navigationController.title = "Debugging".
После создания приложения вы увидите два красных символа ошибки с пояснениями в строках, которые вы только что обновили.

Первая ошибка имеет значок с буквой "X" в центре . Xcode предоставляет сообщение, которое может помочь вам определить проблему. Компилятор ожидал увидеть открывающую и закрывающую круглые скобки в качестве правильного синтаксиса для вызова функции. Добавьте оба символа в конце super.viewDidLoad, чтобы устранить ошибку.

Другой вид ошибок имеет точку в центре. Нажмите на эту ошибку, и Xcode отобразит предложение по исправлению кода. Нажмите кнопку Fix (Исправить), чтобы Xcode реализовал это предложение.  3   В этом случае Xcode предоставляет действительное исправление. Однако вы не можете полагаться на то, что компилятор правильно исправит все ошибки — вы должны иметь возможность устранять ошибки самостоятельно.

 

 

Баги

Третий тип проблем известен как баг (от англ. bug - жук), и это самая сложная проблема для отслеживания. Баг - это ошибка, возникающая при запуске программы, приводящая к сбою или неправильному выводу. Поиск багов может потребовать некоторого времени и настоящей детективной работы.

В ViewController добавьте следующие строки кода ниже super.viewDidLoad():

 

var names = ["Tammy", "Cole"]
names.removeFirst()
names.removeFirst()
names.removeFirst()

 

Возможно, на данный момент вы не знакомы со Swift, и это нормально. Эти строки просты для понимания. names - это список, содержащий два фрагмента текста: “Tammy” и “Cole”. Каждая последующая строка удаляет первый элемент из списка. Поскольку есть три вызова для удаления первого элемента, но в списке только два элемента, что, как вы ожидаете, произойдет?

Создайте свое приложение. Поскольку синтаксис верен, вы получите сообщение “Build Succeeded” (“Сборка выполнена успешно”). Теперь попробуйте запустить приложение. Через несколько мгновений программа завершит работу, и в последней строке кода выше появится следующее сообщение, выделенное красным цветом:

 

Thread 1: Fatal error: Can't remove first element from an empty collection (Поток 1: Фатальная ошибка: не удается удалить первый элемент из пустой коллекции)

 

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

Прежде чем вы начнете искать ошибку, вам нужно будет добавить точку останова в свой код. Точка останова приостанавливает выполнение программы в указанной точке. Создайте точку останова, щелкнув в области желоба слева от строки, где вы хотите приостановить выполнение. В этом случае добавьте точку останова в строку var names = [”Tammy”, “Cole”].   4  

 

 

Создайте и запустите свое приложение.  5   Вы увидите, что программа приостанавливается в точке останова. Это хорошо. В области отладки покажите представление переменных, чтобы проверить текущие значения  6   (кнопка находится в правом нижнем углу  7  ). Поскольку строка с точкой останова еще не была выполнена, names не содержит значений.

 

 

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

  • Continue (Продолжить) — Возобновляет выполнение кода до тех пор, пока не будет достигнута следующая точка останова. Если вы нажмете эту кнопку сейчас, код завершится сбоем, так как перед третьим names.removeFirst() нет других точек останова.
  • Step over (Перешагнуть) — Выполняет выбранную строку и приостанавливает выполнение на следующей строке.
  • Step into (Шаг вовнутрь) — При нажатии на строку с вызовом функции переходит к первой строке функции, затем снова приостанавливает выполнение.
  • Step out (Шаг наружу) — выполняет все оставшиеся строки в вызове функции и приостанавливает выполнение в строке после функции.
    Нажмите кнопку "Step over", чтобы продвинуть выполнение на одну строку. В представлении переменных вы можете видеть, что names присвоены правильные значения. Пока все идет хорошо.

Нажмите кнопку “Step over”, чтобы выполнить первый вызов names.removeFirst(). names больше не включает “Tammy” в свой список, так что всё сработало нормально. Нажмите “Step over” еще раз, чтобы выполнить второй вызов names.removeFirst(), оставив names пустым списком с нулевыми значениями. Всё ещё в порядке. К настоящему времени должно быть ясно, что третий вызов names.removeFirst() ответственен за ошибку.

Удалите третий вызов names.removeFirst() и снова запустите программу, чтобы убедиться, что ошибка исправлена.

Отладка - это важнейший навык для разработчиков. При отладке используйте следующий подход:

  1. Попытайтесь понять проблему
  2. Мозговой штурм потенциального решения
  3. Попробуйте это решение
  4. Убедитесь, что это сработало, повторите по мере необходимости

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

 

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

Целью этой лабораторной работы является поиск и устранение ошибок компилятора, ошибок во время выполнения и предупреждений компилятора.

Шаг 1

Поиск и исправление ошибок компилятора

  • Откройте проект Xcode, “FirstTimeDebugging”.
  • Попробуйте запустить приложение. Обратите внимание, что он не будет запущен из-за нескольких ошибок компилятора. Как вы узнали из этого урока, ошибки компилятора обозначаются красными символами в соответствии с ошибкой — или там, где компилятор предполагает, что ошибка может быть. Все ошибки компилятора также перечислены в навигаторе проблем.
  • Исправьте ошибки компилятора, чтобы вы могли запустить приложение. Вот две из наиболее распространенных ошибок, которые могли вызвать ошибки компилятора этого приложения:
    • Отсутствующие или дополнительные круглые скобки или фигурные скобки (открывающие или закрывающие).
    • Ссылка на функцию или свойство, но с неправильным написанием (компилятор очень буквален и ожидает, что вы будете ссылаться на функцию или свойство точно по имени, которое вы ему дали.)

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

Шаг 2

Поиск и исправление ошибок во время выполнения

  • Удалось ли вам удалить все красные символы ошибок из проекта? Если это так, попробуйте запустить приложение еще раз.
  • На этот раз обратите внимание, что приложение прекращает выполнение сразу после открытия в симуляторе и что на экране есть красная линия поперек одной из строк кода. Тот факт, что линия красная, указывает на то, что что-то пошло не так. Посмотрите на текст в области консоли, чтобы узнать, в чем может быть проблема. Попробуйте устранить эту ошибку во время выполнения. Если это полезно, вы можете добавить точки останова в и перед затронутым кодом, а затем снова запустить приложение.

Шаг 3

Поиск и исправление предупреждений компилятора

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

Поздравляю! Теперь у вас должен быть проект, свободный от ошибок компилятора, ошибок во время выполнения и предупреждений.

 

 


Отрывок из книги
Develop in Swift Fundamentals
Apple Education
https://books.apple.com/ru/book/develop-in-swift-fundamentals/id1581182804

Information

Apple, the Apple logo, Apple Books, Apple TV, Apple Watch, Cocoa, Cocoa Touch, Finder, Handoff, HealthKit, iPad, iPad Pro, iPhone, iPod touch, Keynote, Mac, macOS, Numbers, Objective-C, Pages, Photo Booth, Safari, Siri, Spotlight, Swift, tvOS, watchOS, and Xcode are trademarks of Apple Inc., registered in the U.S. and other countries. App Store and iBooks Store are service marks of Apple Inc., registered in the U.S. and other countries. ​
The Bluetooth® word mark and logos are registered trademarks owned by Bluetooth SIG, Inc. and any use of such marks by Apple is under license. ​
IOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used under license. ​
Other product and company names mentioned herein may be trademarks of their respective companies.