Главная » iPhone » Начало работы с приложениями iPhone

0

Если вы новичок в мире Маc, то будете удивлены тем фактом, что приложения не являются ехе-файлами. Потрясающая архитектура аппаратного обеспечения и графики, которой славится Apple, распространяется и на архитектуру программного обеспечения, и на то, каким способом организованы приложения в файловой системе. Стратегия, используемая в настольных системах Apple, перенесена и на iPhone.

Apple практикует создание модульных независимых приложений с собственными внутренними файловыми ресурсами. В итоге процесс установки большинства приложений сводится всего лишь к простому перетаскиванию их в вашу папку приложений; а удаление их осуществляется путем перетаскивания их в корзину. В этой главе будет объяснена структура приложений iPhone. Кроме того, вы познакомитесь с набором бесплатных инструментов с открытым кодом, используемых для создания исполняемых файлов, а также узнаете, как устанавливать приложения на ваш iPhone. Наконец, вы познакомитесь с языком Objective-C, с его спецификой, достаточной для того, чтобы без труда перейти на него с С или С++.

Анатомия приложения

Apple использует элегантный способ содержать приложения в их операционных системах. Поскольку OS X является платформой на базе UNIX, то Apple хотелось, чтобы она придерживалась основных файловых соглашений UNIX, поэтому использование ветвей ресурсов стало недостаточным (перестало быть эффективным в этих условиях). Суть задачи была в том, чтобы спроектировать структуру, которая бы позволила приложению оставаться независимым, сохраняя работоспособность в файловой системе. В результате приложение стали рассматривать как пакет (bundle) внутри каталога (directors) и использовать стандартные API для получения доступа к ресурсам, выполнению бинарных файлов и чтению информации о приложении.

Если вы взглянете внутрь любого приложения Мае, то обнаружите, что расширение арр указывает не на файл, а на каталог. Это программный каталог (program directory). Внутри он является организованной структурой, содержащей ресурсы, которые необходимы приложению для выполнения, информацию о приложении и исполняемые бинарные файлы приложения. Такую структуру программного каталога компилятор не генерирует, а создает только исполняемые бинарные файлы. Поэтому, чтобы построить цельное приложение, разработчик сам создает скелет структуры, которая, в конечном счете, будет содержать бинарный файл и все его ресурсы.

Программный каталог для приложения iPhone гораздо менее структурирован, нежели настольные приложения Мае. На самом деле все файлы, используемые приложением, находятся в корне программной папки .арр:

drwxr-xr-x root admin Terminal.арр/

-rw-r—г— root admin Default.png -rw-r—r— root admin Info.plist ‘-rwxr-xr-x root admin Terminal -rw-r—r— root admin icon.png -rw-r—r— root admin pie.png

Приведенный выше пример отражает самое основное приложение iPhone под названием MobileTerminal. MobileTerminal— это терминальный клиент с открытым кодом для iPhone, позволяющий пользователю улучшить командный процессор и работать в окружении UNIX (которое тоже должно быть установлено как программное обеспечение сторонних фирм). MobileTerminal иллюстрирует все основные компоненты приложения iPhone:

?         MobileTerminal.арр— каталог, в котором находятся все ресурсы приложения;

?        Default.png— изображение в формате PNG (Portable Network Graphics). Когда пользователь запускает приложение, iPhone анимирует его, чтобы показать, как оно переходит на передний план экрана. Это делается с помощью загрузки файла Default.png и масштабирования его до размера всего экрана. Это изображение размером 320×480 пикселов перемещается на передний план и остается на экране до тех пор, пока приложение не закончит свою загрузку, после чего оно становится фоновым рисунком для любых элементов пользовательского интерфейса, отображаемых на экране. Как правило, для фонового рисунка приложения используют сплошной черный или белый цвета;

?        Info.plist — список свойств, содержащий информацию о приложении. Он содержит название исполняемого бинарного файла и идентификатор пакета, используемый приложением SpringBoard для его загрузки. Позднее в этом разделе будет приведен пример списка свойств:

?        Terminal — фактически исполняемый бинарный файл, вызываемый при запуске приложения. Это то. что выдает ваш компилятор при построении приложения. При создании конечной производственной версии ваш сборочный файл проекта (таке-файл) может копировать ваш бинарный файл в папку приложения. В этой главе будет представлен пример такого процесса;

?        icon.png— изображение, создающее значок приложения в SpringBoard (приложение рабочего стола iPhone). SpringBoard не волнует размер файла, и оно будет пытаться отобразить изображение за пределами области значка, если то достаточно велико. Большинство значков, как правило, имеет размер 60×60 пикселов;

?        pie.png— изображение, используемое приложением MobileTerminal. Окружение iPhone предоставляет множество методов для выбора ресурсов, большинство из них принимают только имя файла и не принимают путь к файлу. Поэтому файл, передаваемый в эти методы, должен храниться непосредственно в программном каталоге. Такой подход соответствует попыткам Apple делать приложения независимыми.

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

Первое, что вы должны сделать прежде, чем приступить к созданию приложения, — это составить скелет каталога .арр, который будет его содержать.’

Скелет будет предоставлять всю информацию, необходимую iPhone для подтверждения существования вашего приложения, что позволит запускать его из SpringBoard.

В этой книге представлено множество полнофункциональных примеров кода. Для корректного запуска их вы должны построить пример скелета под названием MyExample.app. Создать каталог достаточно просто:

$ mkdir MyExample.app

Далее, напишите список свойств, чтобы описать само приложение и то, как его запустить. Файл Info.plist отображает список свойств в формате XML. Он должен выглядеть следующим образом:

<?xml version="l.О" encoding=HUTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"

"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="l.0"> <dict>

<key>CFBundleDevelopmentRegion</key>

<string>English</string>

<key>CFBundleExecutable</key>

<string>MyExample</string>

<key>CFBundleIdentifier</key>

<string>com.oreilly.www.iphone.examples</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>l.0</string> </dict> </plist>

В приведенном примере большинство наиболее важных параметров выделено полужирным шрифтом. Это значения свойств CFBundleExecutable и CFBundleIdentifier. СВОЙСТВО CFBundleExecutable задает ИМЯ исполняемого бинарного файла в пределах папки. Это именно тот файл, который начинает исполняться при запуске вашего приложения, т. е. то, что выдает ваш компилятор. В данном примере имя файла совпадает с именем приложения, но это совершенно необязательно.

Свойство CFBundleidentifier определяет уникальный идентификатор, под которым будет находиться ваше приложение. Уровень приложения iPhone больше заботится об адресации вашего приложения целиком, нежели самого бинарного файла. Всякий раз, когда SpringBoard (или другое приложение) запускает приложение MyExample, ссылаться на него нужно будет с использованием этого идентификатора. Его имя должно быть уникальным среди всех других приложений на iPhone. Наиболее распространенным способом, гарантирующим уникальность идентификатора, является включение в его имя URL вашего Web-узла.

Файлы приложения icom.png и Default.png тоже должны быть скопированы. Если это будет упущено, то iPhone использует вместо них по умолчанию совершенно неприглядные изображения. Чтобы показать, что имеется в виду, мы не будем включать эти файлы в наш пример. Но чтобы ваше приложение выглядело вполне профессионально, убедитесь, что при публикации своего приложения вы создали изображения и включили файлы этих изображений с такими именами.

Теперь наш скелет вполне подходит для выполнения примера. В следующем разделе вы установите пакет инструментов на ваш рабочий стол, после чего сможете компилировать примеры приложений. В последующих главах вы создадите множество примеров. После того как каждый из них будет построен, исполняемый бинарный файл MyExample нужно будет скопировать в вашу программную папку. Законченное ваше приложение будет выглядеть следующим образом:

:rwxr-xr-x root admin MyExample.арр/ -rw-r—г— root admin info.plist -rwxr-xr-x root admin MyExample

Примеры, приводимые в этой книге, как правило, не требуют никаких до- юлнительных ресурсов, поэтому изображения и звуки будут необходимы только при вызове их из примеров. Однако в этих случаях вы скопируете ребуемые файлы в каталог MyExample.app. Большинство примеров старает- ~ я использовать существующие на iPhone файлы, чтобы не переполнять эту шгу большим количеством бинарного кода.

Создание бесплатного пакета инструментов

Как мы уже говорили в главе 1, iPhone зарождался как закрытая платформа. Изначально это означало, что никакой инструментарий разработчика для создания приложений для iPhone не будет общедоступен. Было много разговоров о том, что Apple втайне надеялась на то, что сообщество взломает телефон, подтверждая тем самым свой статус среди помешанных на этом сообществ. В течение первых нескольких месяцев жизни iPhone именно это и происходило. Сообщество открытого кода успешно взломало телефон и начало написание пакета инструментов для создания приложений. С тех пор оно уже выпущено как бесплатное программное обеспечение. Пакет инструментов состоит из кросс-компилятора, компоновщика, транслятора, блока С в компоновщике под названием Csu и заголовков классов для платформы ОЬ- jective-C, генерируемых инструментом под названием class-dump.

К сегодняшнему дню данный пакет инструментов претерпел множество изменений и усовершенствований, сделанных Джеем Фриманом, также известным как saurik, и доступен в двух видах. Настольная версия пакета инструментов использует кросс-компилятор, выполняющийся на одной машине (а именно на вашей настольной), но создает исполняемые файлы, которые могут исполняться на другой машине (в iPhone это процессор ARM). Родной компилятор также может быть установлен напрямую на iPhone, позволяя тем самым вам создавать приложения без необходимости установки на ваш рабочий стол какого-либо специализированного программного обеспечения.

Приводя в этой книге команды и пути к файлам, мы исходим из того, что для создания и/или установки данного пакета инструментов вы использовали процедуры из этой главы. Обновление пакета инструментов происходит периодически в виде выпуска новых версий, поэтому процесс его установки может иногда меняться. Самые последние инструкции по созданию пакета инструментов на рабочем столе можно найги на Web-узле Джея Фримана по адресу: http://www.saurik.com.

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

Внимание!

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

Что вам потребуется

Если вы ищете способ установки пакета инструментов напрямую в iPhone. то единственное, что вам потребуется, — это взломанный iPhone с запущенным на нем установщиком Cydia. Чтобы установить пакет инструментов, просто запустите Cydia, а затем в списке Sections выберите раздел Development. Найдите и выделите в списке iPhone 2.0 Toolchain, затем коснитесь кнопки Install. На ваш iPhone будет установлен пакет инструментов, и вы сможете вызывать его с помощью стандартной команды дсс. Теперь вы можете пропустить оставшуюся часть данного раздела.

Создание пакета на рабочем столе— это более сложный и запутанный процесс. Хотя в Интернете существует несколько неофициальных бинарных дистрибутивов пакета инструментов, вы создадите его из источников, приводимых в этом разделе.

Поддерживаемые настольные платформы

Первое, что вам потребуется, — это поддерживаемая настольная платформа. На текущий момент пакетом инструментов поддерживаются следующие платформы:

?         Mac OS X Ю.4 Intel или РРС;

?         Mac OS X 10.5 Intel; Ubuntu Feisty Fawn, Intel;

1 Ubuntu Gutsy Gibbon, Intel; 1 Fedora Core, Intel; "J Gentoo Linux 2007.0, ,v86_64; 1 Debian 2.6.18; 1 CentOS 4.

Другие платформы следуют тем же основным шагам, что и приведенные выше. Официальные инструкции пакета инструментов можно найти на Web- узле http://www.saurik.com.

Высокоскоростное подключение к Интернету

Пакет инструментов имеет достаточно большой объем, даже в виде исходных файлов. Если только вы не хотите провести в ожидании несколько дней, то вы, скорее всего, загрузите исходные файлы по высокоскоростному каналу Интернета. Если у вас нет такого канала, то лучше произвести установку из библиотеки или в местном интернет-кафе.

Инструменты с открытым кодом

Следующее, что вам потребуется, — это набор обязательных инструментов с открытым кодом, установленных на вашем рабочем столе:

?         bison (версия 1.28 или позднее);

?         flex (версия 2.5.4 или позднее);

?        gcc (компилятор GNU, который обрабатывает команды С, С++ и Objective-C);

?         git (утилита контроля исходного кода).

Если у вас нет каких-либо из этих инструментов, то прежде чем продолжить, загрузите и установите их. На Мае все эти инструменты, кроме git, входят в состав набора инструментов Xcode, но прежде чем продолжить, лучше установить или обновить Xcode на самую последнюю версию. Большинство других операционных систем предлагает эти инструменты в своих дистрибутивах как необязательные компоненты.

Примечание

Инструменты Xcode могут быть загружены с Web-узла Apple по адресу: http://developer/apple.com/tools/xcode

Файловая система iPhone

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

Внимание!

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

После установки SSH на iPhone (см. главу 1) для загрузки в папку /toolchain/sys необходимых вам файлов воспользуйтесь следующими командами:

$ sudo -s

# mkdir -р /toolchain/sys/

# cd /toolchain/sys/

#mkdir -p ./System/Library ./usr

#scp -r root@iphone:/System/Library/Frameworks/ ./System/Library #scp -r root@iphone:/System/Library/PrivateFrameworks/ ./System/Library

# scp -r root@iphone:/usr/lib ./usr

Компиляция пакета инструментов

Прежде чем вы начнете, вы должны задать несколько переменных окружения, чтобы определить, куда устанавливается пакет инструментов. Чтобы установить в /toolchain, используйте приведенные далее пути. Конечно, вы можете изменить их согласно своим предпочтениям. Убедитесь в том, что вы поместили загруженные библиотеки и оболочки туда, куда указано в ${sysroot}:

*  export target=arm-apple-darwin9 = export prefix=/toolchain/pre

*  export sysroot=/toolchain/sys

= export PATH="${prefix}/bin":$PATH

•  export cctools=/toolchain/src/cctools s -xport gcc=/toolchain/src/gcc

*  export csu=/toolchain/src/csu « -xport build=/toolchain/bld

Как только все переменные будут экспортированы, вы готовы к созданию пакета.

Шаг 1. Установка Csu

Csu предоставляет С-вход (С hooks) в точку входа "start" сборки и задает стек, чтобы могла быть вызвана функция main() вашей программы. Это, по сути, связующий код:

#  mkdir -р ${csu}

#  cd "${csu)"

#  svn со http://iphone-dev.googlecode.-com/svn/trunk/csu .

#  cp -R *.o "${sysroot}"/usr/lib

#  cd "${sysroot}"/usr/lib

#  chmod 64 4 *.o

#  cp -Rf crtl.o crtl.l0.5.o

#  cp -Rf dylibl.o dylibl.l0.5.o

«

Шаг 2. Построение и установка инструментов кросс-компилятора

Приведенные далее команды создают и устанавливают компоненты кросскомпилятора пакета инструментов.1 Это весьма специфично для Mac OS X, поэтому если вы используете другую платформу, то обратитесь к ее официальной документации:

#  rm -rf "${cctools}"

#  svn со http://iphone-dev.googlecode.com/svn/branches/odcctools-9.2-ld "${cctools}"

#  mkdir -p "${build}"

#  cd "${build}"

#  mkdir cctools-iphone

#  cd cctools-iphone

#  CFLAGS=-m32 LDFLAGS=-m32 "${cctools}"/configure

—target="${target}" Ь

—prefix="${prefix}" —disable-ld64

#  make

#  make install

Шаг 3. Установка системных заголовков

Системные заголовки, имеющиеся в вашем Xcode SDK, являются общими для вашего рабочего стола и платформы iPhone, однако некоторые макросы прекомпилятора сильно привязаны к архитектуре. Поскольку архитектура iPhone отличается от архитектуры рабочего стола, то для того чтобы эти заголовки работали для iPhone, их необходимо установить. Чтобы установить специфичный для iPhone набор заголовков в ваш недавно созданный пакет инструментов, выполните приведенные далее команды. Все это основано на заголовках Xcode:

#  cd "${build}"

#  svn со http://iphone-dev.googlecode.com/svn/branches/include-l.2-sdk include

#  cd include

#  ./configure —prefix="${sysroot}"/usr

#  bash install-headers.sh

Шаг 4. Построение и установка LLVM

После установки заголовков последним шагом является создание компилятора LLVM. Оболочка LLVM (Low Level Virtual Machine) обеспечивает стандартную инфраструктуру для создания компиляторов. Она предоставляет необходимые входы и API для создания стандартизованного компилятора без необходимости переписывать все основные компоненты компилятора. Чтобы скомпилировать и установить версию компилятора LLVM, выполните следующие команды:

#  rm -rf "${gcc}"

= git clone git://git.saurik.com/llvm-gcc-4.2 "${gcc}" = mkdir -p "${build}" = cd "${build}" = mkdir gcc-4.2-iphone

#  cd gcc-4.2-iphone

#  ".$ {gcc} " /configure

—target="${ target}" –prefix="${prefix}" Чо —with-sysroot="${sysroot}" —enable-languages=c,С++,objc,obj-c++ —with-as="${prefix}"/bin/"${target}"-as Ь –with-ld="${prefix}"/bin/"${target}"-Id —enable-wchar_t=no

—with-gxx-include-dir=/usr/include/c++/4.0.0

#  make -j2

#  make install

#  mkdir -p "${sysroot}"/"$(dirname "${prefix}")"

#  In -s "${prefix}" "${sysroot}"/"$(dirname "${prefix}")"

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии