Итак, состоялся долгожданный выпуск MonoTouch версии 1.2, о чём Мигель де Икаса и объявил вчера. Почему долгожданный? Потому что наконец-то появилась поддержка отладки! Новый отладчик поддерживает отладку как на эмуляторе iPhone, так и прямо на самом iPhone/iPod. Отладчик интегрирован напрямую в MonoDevelop/OSX. Работа с ним осуществляется так же, как и с любым другим отладчиком.
Технология отладки
В основе лежит новый движок отладки Mono. Так как Apple не опубликовала информацию, необходимую для реализации на iPhone отладчика наподобие GDB или MDB (отладчик Mono), разработчики Mono не стали взламывать протокол, а придумали новый способ отладки приложений Mono. Mono для iPhone использует программный отладчик. Этот отладчик, в отличие от обычных, работает как некоторая управляющая сущность над процессом Mono - другими словами, программный отладчик является обычным отладчиком, встроенным прямо в процесс Mono. MonoDevelop обменивается информацией с этим отладчиком через свой компактный протокол, похожий на тот, что использовался в отладчиках Java. Новая библиотека Mono.Debugger.Soft.dll предоставляет API для работы с этим протоколом и позволяет производить удалённую отладку процесса Mono.
Точки останова
Для реализации точек останова в программном отладчике используются средства операционной системы. Но iPhone не позволяет изменять память без специальных привилегий. Поэтому для реализации точек останова статический компилятор Mono вставляет специальный код в каждом месте последовательности, где проверяются точки останова и одиночные шаги. Генерируемый в итоге таких отладочных сборок код получается больше, но он позволяет осуществить отладку на iPhone без доступа к закрытому API.
MonoDevelop и iPhone
Перед началом отладки MonoDevelop настраивает приложение для соединения с MonoDevelop при запуске и включает отладчик, который прослушивает несколько портов (один для отладочного протокола, другой для перенаправления стандартных потоков вывода и ошибок) и ждёт сигналов от приложения. При соединении отладчик получает сигнал и выполнение продолжается. При использовании симулятора связь осуществляется через локальный сокет, а при использовании самого устройства через TCP/IP по Wi-Fi. Достоинством этого способа является то, что можно распространять бинарные файлы для тестировщиков (используя Ad-Hoc модель) и производить отладку на устройстве пользователя по сети.
Но, вчерашний праздник был бы не полным, если бы всё ограничилось только отладчиком. Помимо этого, есть и другие приятные изменения:
- генератор привязок C# для библиотек Objective-C;
- потоки stdout/stderr теперь перенаправляются с устройства на MonoDevelop;
- добавлены системный таймер и семафоры;
- поддержка sqlite через библиотеку Mono.Data.Sqlite.dll;
- исправленные ошибки и другие мелкие улучшения.
Как видно, MonoTouch становится действительно зрелой платформой для разработки приложений под iPhone. Теперь, с появлением отладчика, MonoTouch может предложить разработчикам весь спектр необходимых инструментов.
Блог Мигеля де Икасы (с картинками)
Перемещено maxcom из Коммерческое ПО