ВВЕДЕНИЕ 4
1. КОНЦЕПЦИЯ РЕШЕНИЯ 6
1.1. Инструмент инспектирования 6
1.2. Редактирование UI объектов 7
2. ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО РЕШЕНИЯ 9
2.1. Инструменты разработки 9
2.2. Шаблон проектирования 10
2.3. Иерархия представления 12
2.4. Обработка касаний 13
3. АНАЛИЗ СРЕДСТВ ИНТРОСПЕКЦИИ 14
3.1. Компилируемые аннотации 14
3.2. Рефлексия Swift 15
3.3. Устройство объектной модели Swift и её совместимость 16
3.4. Objective-C Runtime 17
3.5. Различия Swift и Objective-C 20
4. РЕАЛИЗАЦИЯ 22
4.1. Главный контроллер представления 22
4.2. Перехват и маршрутизация касаний 24
4.3. Работа с координатами
4.4. Обход ограничений в иерархии представлений 26
5. ИСПОЛЬЗОВАНИЕ ПРОГРАММНОЙ БИБЛИОТЕКИ 29
5.1. Меню быстрого доступа 29
5.2. Расширенный редактор 30
5.3. Модификация полей 31
ЗАКЛЮЧЕНИЕ 33
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 34
ПРИЛОЖЕНИЕ 36
Процесс разработки приложений для операционной системы iOS, как и любых других компилируемых платформозависимых продуктов, обладает одним существенным недостатком по сравнению с интерпретируемыми решениями широко применяемыми в веб-разработке. Этим недостатком является потребность пересборки и перезапуска проекта целиком при любом малейшем внесении изменений в коде. Во многих ситуациях, это порождает ощутимые временные затраты на ожидание, например, при отладке внешнего вида графического интерфейса для соответствия дизайну. Ведь нередко даже при наличии так называемого "pixel-perfect" дизайна, что означает "пиксель в пиксель", разработка интерфейсной части мобильного приложения для iOS требует дополнительного времени для подбора параметров.
Временные задержки на перекомпиляцию и перезапуск растут вместе с ростом объемов проекта даже при нормальной работе инкрементальной сборки проекта, то есть, когда только измененные с последней компиляции части кода компилируются и подключаются к остальному, ранее уже скомпилированному.
В качестве решения изложенной выше проблемы в данной дипломной работе предлагается библиотека для модификации свойств графических элементов интерфейса во время выполнения приложения.
Таким образом, целью работы является реализация iOS-библиотеки для инспектирования свойств элементов графического интерфейса, а также модификации этих свойств во время исполнения приложения.
Задачи, выполнение которых необходимо для достижения поставленной цели:
• Определить методы и инструменты для решения поставленной задачи, разработать концепцию программной библиотеки.
• Спроектировать архитектуру для перехвата и самостоятельной маршрутизации событий касания без изменений в работе самого приложения.
• Реализовать iOS-библиотеку для инспектирования свойств элементов пользовательского интерфейса, а также модификации этих свойств во время исполнения приложения.
В результате выполнения данной дипломной работы была достигнута поставленная цель: разработана программная библиотека для отладки пользовательских интерфейсов iOS-приложений. Для успешного достижения данной цели были решены следующие задачи:
• Разработана концепция программного продукта, определены подходы к решению поставленной задачи и инструменты реализации.
• Спроектирована архитектура для перехвата и самостоятельной маршрутизации событий касания без изменений в работе самого приложения.
• Путем обратной разработки были получены имена приватных функций, необходимых для выполнения целей, намеченных на предыдущем этапе.
• Реализована iOS-библиотека для инспектирования свойств элементов пользовательского интерфейса, а также модификации этих свойств во время исполнения приложения.
В текущем виде реализованная библиотека предоставляет функционал интроспекции свойств объектов исключительно через механизмы среды исполнения Objective-C, что отражается в отсутствии доступа к типам данным, добавленным в языке Swift.
В дальнейшем планируется разделение функционала на:
• считывание свойств средствами рефлексии Swift
• модификацию средствами Objective-C Runtime