22
Май

Итак, toolchains у нас есть, теперь можно попробовать что-то сделать. Но прежде чем приступать, озаботимся слегка инфраструктурой сборки и развертывания приложений.
Существует одна объективная сложность — поскольку у нас нет эмулятора iPhone (точнее, он есть в официальном SDK, которое только под Mac и beta), а допиливать до нужного состояния что-то вроде QEMU и ему подобного — дело продожительное и не факт, что оправданное — тестирование приложений придется производить боем на аппарате.

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

Получив готовый пример, слегка его модифицируем в сторону оптимизации, как то — вынесем ресурсы в папку приложения, чтобы не копировать каждый раз при сборке. Особо шустрые могут сразу же туда включить и процедуру развертывания путем копирования кода и сопутствующих файлов на телефон посредством утилиты scp.

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

Репозитарий Installer-а имеет внутри достаточно простую структуру — XML-файл описания хранит в себе ссылки на zip-архивы с файлами и описание последовательности установки. Разумеется, нет никаких каскадных проверок зависимостей как в *pkg, но оно и к лучшему — потому как просто и достаточно.

Поэтому в Makefile вставляется простой сценарий, в моем случае написанный на PHP (да, это не Unix-way и, в принципе, можно было обойтись средствами системы с задействованием sed-а), который пристыковывает сборку к дереву репозитария и обновляет описание, соответственно изменяя номер версии, а при помощи установленного web-сервера можно раздавать пакет телефонам в сети, что и было сделано на основе демонстрационного примера от разработчиков Installer-а. После чего, зайдя на телефон и добавив адрес внутреннего репозитария в источники установки, можно смело устанавливать и обновлять пакеты с тестируемым ПО. Что очень удобно.

Готовый пример инфраструктуры можно взять здесь — build_n_test.zip . Версионность на данном этапе определяется через текущий timestamp сборки, если необходимо осуществить привязку к нору версии из системы контроля версий — ставим это для самостоятельной работы. Думаю, с выходом официального SDK появятся более изящные и правильные решения, а современные build-системы сделают более гибкие и удобные механизмы… но это все в будущем. :)

1 ком.
  1. [...] Дебиановского dpkg со всеми вытекающими. Про Installer я уже писал, там все достаточно просто — необходимо засунуть [...]

Максим Крентовский
системный архитектор
E-mail / GTalk: mkrentovskiy@gmail.com
Skype: mkrentovskiy