Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом(Надёжин О.А).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
13 Мб
Скачать
☆

Слой Core os

Большая часть функционала, предусмотренного в трех слоях высшего уровня, основана на слое Core OS и его низкоуровневых свойствах. Слой Core OS предоставляет множество сред разработки, которое ваше приложение может использовать напрямую (например, среды Accelerate и Security). Слой Core OS инкапсулирует окружающую среду ядра, а также низкоуровневые UNIX-интерфейсы, к которым у вашего приложения нет доступа по очевидным причинам. Тем не менее, посредством основанной на С библиотеки libSystem, ко многим низкоуровневым свойствам можно осуществлять доступ напрямую (например, к сокетам BSD, потокам POSIX и DNS-сервисам).

1.3 Уровень библиотек

Платформа Ios включает набор C/C++ [2][3] библиотек, используемых различными компонентами ОС. Для разработчиков доступ к функциям этих библиотек реализован через использование Application Framework. Ниже представлены некоторые из них:

1. System Object Model (SOM) - система объектно-ориентированных динамических библиотек, разработанная CILabs (IBM, Apple, OMG, Adobe, Oracle и др.).

2. Audio Interchange File Format (AIFF) - библиотеки, основанные на IFF компании Electronic Arts, предназначенные для поддержки проигрывания и записи популярных аудио- и видео - форматов (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG и т.п.).

3. WebKit - ядро встроенного web-браузера.

4. Surface Manager - менеджер поверхностей управляет доступом к подсистеме отображения 2D- и 3D- графических слоев.

5. SGL (Scalable Graphics Library) - библиотека для работы с 2D-графикой, основанная на библиотеке SDL (Simple DirectMedia Layer).

6. 3D libraries - библиотеки для работы с 3D-графикой, основанные на OpenGL ES 1.0 API.

7. FreeType - библиотека, предназначенная для работы со шрифтами.

8. SQLite - легковесная реляционная система управления базами данных.

1.4 Среды разработки приложения

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

1.4.1 Xcode

При разработке приложений используется набор iOS-разработчика, так называемый SDK, а также Xcode - интегрированную среду разработки Apple (IDE). Xcode предоставляет всё необходимое для разработки замечательных iPhone, iPad и iPod Touch приложений. Среди инструментов есть редактор кода, графический редактор пользовательского интерфейса и многие другие примочки, от настраиваемых сборок до управления репозиториями кода.

Xcode использует единственное окно рабочего пространства - workplace window, которое содержит большую часть необходимых данных.

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

Чтобы начать, потребуется:

1) Бесплатно скачать последнюю версию Xcode. Открыть приложение App Store на Mac, используя поиск, чтобы найти Xcode и кликнуть на кнопку Free, чтобы скачать Xcode. Загружая Xcode, загружаете и SDK iOS. (App Store установлен на Mac OS X версии 10.7 и позже. Если установлена ранняя версия Mac OS X, то нужно будет ее обновить.)

2) Зарегистрироваться как разработчик Apple в Программе Разработчиков iOS. $99 в год. Для того, чтобы создавать и тестировать приложения в Simulator, регистрироваться необязательно. Однако, будет необходимо зарегистрироваться, чтобы тестировать приложения на iOS устройствах и распространять их. Регистрация предоставляет полный доступ к Центру Разработчика iOS и Порталу Настройки iOS.

Инструменты

Xcode предоставляет все инструменты для управления всеми этапами разработки - от создания приложения до его тестирования, оптимизации и отправке приложения в App Store.

Язык

Objective-C - объектно-ориентированный язык для разработки всех iOS приложений. Язык Objective-C является надмножеством языка C, т. е. в своих проектах можно писать код как на C, так и на Objective-C. Несмотря на то, что для разработки можно использовать другие языки, не получится создать iOS приложение без использования Objective-C. (рис 2)

Рис. 2 Objective-C

Objective-C - простой язык с синтаксисом и соглашениями, понятными для изучения, особенно если есть опыт работы с другими объектно-ориентированными языками как Java или C ++. Если вы C-программист, то вы отметите, что приложения намного легче

проектировать и изменять, когда вы знакомы с объектно-ориентированным программированием и Objective-C.

Фреймворки

Приложение состоит из кода и фреймворков, предоставляемых Apple. Во фреймворке находится библиотека методов, которые приложение может

вызывать. Доступ к библиотеке фреймворка могут иметь несколько

приложений одновременно. (рис 3)

Рис. 3 Фреймворк

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

Шаблоны проекта

Шаблон проекта решает проблему разработки стандартного программного обеспечения. Шаблоны - это абстрактные проекты, они не являются кодом. Когда используете шаблон проекта, вы адаптируете этот шаблон в соответствии со своими определенными потребностями. (рис 4)

Рис. 4 Шаблон проекта

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

Проектирование интерфейса пользователя

Просто создать рабочее приложение недостаточно. Пользователи ожидают, что iOS приложения будут интерактивными, увлекательными и интуитивно понятными. Разрабатывая каждую часть своего приложения, от выбранных функций до реакции на жесты, вы должны думать о пользователе. (рис 5)

Рис. 5 Интерфейс пользователя

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

Проект приложения

Прежде, чем начать писать строки кода, нужно принять несколько критических проектных решений. Максимально возможно определите цели и функции своего приложения. Выбрать вид модели данных, которая будет использовать приложение. Определится со стилем пользовательского интерфейса, к примеру, будет ли использоваться иерархия видов или же это будет служебное приложение. Будет ли оно универсальным, то есть, будет ли оно работать на iPad, iPhone и iPod touch? Такие проектные решения помогут создать архитектуру приложения. (рис 6)

Рис. 6 Проект приложения

Но прежде, чем работать над архитектурой приложения, ознакомьтесь с фреймворками Cocoa Touch. Ведь приложение существует не само по себе, оно зависит от создаваемых с помощью фреймворков объектов. Изучите объекты фреймворков, которые реализуют базовую структуру приложения и которые служат стандартными блоками.

Поиск информации

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

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

Оrganizer документов в Xcode содержит различные руководства по программированию, обучающие материалы, иллюстрированные примеры кода, руководства пользователя по инструментам разработчика и ссылки на ссылки подробную информацию о API фреймворках, - все эти материалы можно найти в Библиотеке разработчика iOS. В Organizer можно найти встроенную документацию разработчика Apple, доступную для поиска и просмотра. Кроме того, с Библиотекой разработчика iOS можно ознакомиться и в сети.

1.4.2 Xamarin

Xamarin - это фреймворк для кроссплатформенной разработки мобильных приложений (iOS, Android, Windows Phone) с использованием языка C#.(рис 7)

Рис. 7 фреймворк для кроссплатформенной разработки

Фреймворк состоит из нескольких основных частей:

- Xamarin.IOS - библиотека классов для C#, предоставляющая разработчику доступ к iOS SDK;

- Xamarin.Android - библиотека классов для C#, предоставляющая разработчику доступ к Android SDK;

- Компиляторы для iOS и Android;

- IDE Xamarin Studio;

- Плагин для Visual Studio.

Некоторое время назад достаточно широкую известность получили ряд фреймворков (например PhoneGap), которые предлагают разработку кроссплатформенных мобильных приложений на HTML5 с использованием JavaScript. Идея заключается в том, что приложение разрабатывается как обычный сайт для мобильных устройств с использованием соответствующих

js-библиотек, например, Jquery Mobile. Затем все это упаковывается в некий контейнер, который для пользователя выглядит как нативное приложение. Минусы этих фреймворков:

- Не имеете доступа к нативным элементам UI. То есть даже если вы хотите использовать стандартную кнопку «Назад» для iPhone, вы должны ее нарисовать и сверстать.

- Урезанный и обобщенный API для работы с платформой.

- Такое приложение физически запускается внутри браузера телефона (точнее внутри контрола WebView). (низкая производительность).

Xamarin основан на open-source реализации платформы .NET -Mono. Эта реализация включает в себя собственный компилятор C#, среду выполнения, а так же основные .NET библиотеки. Цель проекта - позволить запускать программы, написанные на C#, на операционных системах, отличных от Windows -Unix-системах, Mac OS и других. Важно, что разработкой Xamarin занимаются те же люди, что и разработкой Mono. (рис 8)

Рис. 8 Xamarin

С точки зрения исполнения приложений между iOS и Android есть одно ключевое различие - способ их предварительной компиляции. Как известно, для выполнения приложений в Android используется виртуальная Java-машина Dalvik. Нативные приложения, которые пишутся на Java, компилируются в некий промежуточный байт-код, который интерпретируется Dalvik`ом в команды процессора в момент исполнения программы (т.е. аналогично тому, как работает CLR в .NET). Это так называемая Just-in-time компиляция (компиляция на лету). В iOS используется другая модель компиляции -Ahead-of-Time (компиляция перед исполнением). Xamarin учитывает это различие, предоставляя отдельные компиляторы для каждой из этих платформ, которые позволяют на выходе получать настоящие, нативные приложения, которые выполняются вне контекста браузера и могут использовать все аппаратные и программные ресурсы платформы.(рис 9)

Рис. 9 Компиляция

Для iOS ситуация простая - никакой виртуальной машины нет и программный код должен быть просто заранее скомпилирован в машинный. Для этой цели используется AOT компилятор Mono.

Для Android интереснее. При компиляции приложения происходит перевод кода на C# в промежуточный байт-код, понятный виртуальной машине Mono и сама эта виртуальная машина также добавляется в упакованное приложение. И Mono и Dalvik написаны на Си и работают поверх ядра Linux. При запуске приложения на Android обе виртуальные машины начинают работать бок о бок и обмениваются данными через специальный механизм wrapper`.

О библиотеках на примере Xamarin.iOS (Monotouch).

Библиотека классов Monotouch.dll предоставляет доступ ко всем возможностям iOS SDK. Для разработчика - это просто набор C#-классов с хорошей аннотацией. Внутри эти классы используют разработанные инженерами Xamarin механизмы биндинга на нативные классы и методы. Важно, что этот же механизм можно использовать для биндинга любых библиотек, написанных на objective-c. Большинство классов и методов называются так же, как в оригинальном iOS SDK, хотя бывают исключения (в этом случае приходится использовать поиск в документации Xamarin по оригинальному названию, т.к. оно фигурирует в атрибутах биндинга). В классах активно используется механизм C# event`ов, что позволяет писать красивый и компактный код обработчиков с использованием лямбда-выражений:

button.TouchUpInside += (s, o) => {

message.Text = "Hello!";

};

Да и в целом код, написанный, на C# выглядит гораздо читабельней и приятней. Посмотрите разницу на примере кода, создающего строку с атрибутами:

Для асинхронной разработки Xamarin предоставляет возможность использовать как классы из пространства имен System.Threading.Thread и System.Threading.ThreadPool, так и полный спектр возможностей, предоставляемых Task Parallel Library.

Ограничения

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

- Не рекомендуется использовать Virtual Generic методы, т.к компилятор не всесилен и может не учесть все возможные варианты использования;

- Нельзя создавать Generic-наследников от класса NSObject, который является базовым в иерархии Objective-C. Достаточно серьезное ограничение, которое может некоторым образом испортить вашу стройную и красивую архитектуру.

Другие ограничения, например, отсутствие поддержки динамической генерации кода.

Разработка UI

Для каждой платформы Xamarin предоставляет возможность использовать нативные средства разработки UI и нативные элементы пользовательского интерфейса. Для Android создание UI может происходить непосредственно в коде или же при помощи декларативного подхода с описанием интерфейса в XML. Для iOS это также либо код, либо использование нативных средств проектирования интерфейса - отдельные xib-файлы или же один большой Storyboard. Редактирование этих файлов происходит в привычной для iOS-разработчика среде XCode.

Переносимость кода

Xamarin, по словам разработчиков, является средством кроссплатформенной разработки, т.е. ожидаемо, что приложение, написанное один раз, может быть запущено на различных мобильных платформах. Но, в этом случае возникает конфликт с предыдущим пунктом.(рис 10)

Рис. 10 Перенос кода

На самом деле ситуация обстоит следующим образом. Для каждой из платформы потребуется реализовать собственный слой UI. Т.е код, который отвечает за внешний вид приложения, придется написать для каждой платформы отдельно. Это цена за возможность использования нативных механизмов работы с UI. Если разбивать приложение на слои, то получается такая схема:

- Data Layer (DL) – Хранилище данных, например, база SqlLite или xml-файлы;

- Data Access Layer (DAL) – Обертка над хранилищем для осуществления CRUD-операций;

- Business Layer (BL) – Слой, содержащий бизнес-логику приложения;

Service Access Layer (SAL) – Слой, отвечающий за взаимодействие с удаленными сервисами (Rest, Json, WCF);

- Application Layer (AL) – Слой, содержащий платформозависимый код, другими словами, это код, который зависит от библиотек monotouch.dll или monodroid.dll;

- User Interface Layer (UI) – Слой пользовательского интерфейса.

Кроссплатформенными являются все слои, расположенные выше Application Layer. Доля переносимого кода достаточно сильно зависит от самого приложения, но, на мой взгляд, она вряд ли может превысить 50-60%. Инженеры Xamarin это понимают, поэтому стремятся к увеличению этой доли. В качестве достижений в решении этой проблемы можно рассматривать библиотеку Xamarin.Mobile. Она предоставляет единый для различных платформ API для работы с камерой, контактами и гео-локацией. Но использование этой библиотеки никак не ограничивает вас в применении платформозависимого API, например, с помощью механизма делегатов.

Сторонние компоненты

У Xamarin существует собственный магазин сторонних компонентов Xamarin Components. Он интегрируется в IDE и позволяет в несколько кликов подключать к вашему проекту различные компоненты, написанные как инженерами Xamarin, так и сторонними разработчиками. Количество компонентов растет каждый день. Есть как платные, так и бесплатные(на данный момент их большинство). Все компоненты можно разделить на две части. Одни предоставляют дополнительные элементы пользовательского интерфейса, другие являются библиотеками классов. Например, вариант для Mono известной библиотеки для работы с Json- Json.NET или же библиотека для взаимодействия с Rest-сервисами - RestSharp. Не все компоненты кроссплатформенные, многие доступны только для конкретной платформы. Xamarin использует механизм биндингов для связывания с нативными библиотеками классов, что позволяет портировать на C# любые нативные библиотеки классов. Кроме того, для Xamarin.iOS, например, существует специальная утилита, которая умеет генерировать такие биндинги автоматически. Собственно это позволяет инженерам Xamarin поспевать за всеми нововведениями iOS. Так, в частности, в Xamarin.iOS практически сразу после выхода появилась возможность использовать Dropbox API, а так же новые функции iOS 7.

Документация и комьюнити

Xamarin имеет отличную документацию, содержащую подробные руководства, сниппеты, а также внушительную базу примеров. Документация непосредственно по всем классам библиотек Monotouch и Monodroid являются частью общей документации Mono. Но, к сожалению, этого все равно недостаточно, чтобы покрыть весь список вопросов, которые могут возникать в процессе разработки. У Xamarin существует комьюнити разработчиков, которое сконцентрировано на официальном форуме и на StackOverlow. Активностью и инициативностью людей в комьюнити похвастаться не могу. В этом плане неоценимую помощь оказала приватная тех. поддержка с инженерами по электронной почте, доступная в business-лицензии. Отвечают, как правило, в течение нескольких часов и не стандартными отписками «попробуйте выключить и включить», а действительно разбираются в проблеме и помогают ее решить. Следует понимать, что база вопросов и ответов, накопленная для нативной разработки гораздо шире, чем для Xamarin, поэтому, как бы вы ни хотели, придется разобраться в специфическом синтаксисе objective-c (c Java проблем быть не должно), чтобы понимать примеры кода на том же StackOverflow. Кроме того, это откроет доступ к прочтению и пониманию официальной документации для платформы, что на определенном этапе может стать очень важно. С другой стороны, в этом есть и положительный момент: получив такой базис, будет проще перейти к нативной разработке при необходимости.

Среда разработки

Разработчики Xamarin в качестве среды разработки предлагают использовать либо собственную IDE - Xamarin Studio, либо Visual Studio (в business-лицензии, об этом ниже).

Xamarin Studio

Xamarin Studio - кроссплатформенная IDE, которая работает как на Mac OS X, так и на Windows. На вид эта она выглядит очень простой, однако за внешне простой скрывается достаточно мощный инструмент, который включил в себя множество функций, привычных нам в Visual Studio и Resharper:

- Приятная подсветка синтаксиса;

- Автодополнение кода (включая возможность одновременного импорта namespaces);

- Удобный универсальный поиск по названиям файлов, типам, членам классов и т.п;

- Развитые возможности навигации по проекту: Быстрый переход к

описанию класса, переход к базовому классу, список мест использования класса и т.д.;

- Различные механизмы рефакторинга и быстрая подсказка (как alt+Enter в Resharper);

-Достаточно развитые механизмы дебага, включая слежение, просмотр текущего значения переменной при наведении, визуализацию потоков и аналог Immediate window в VS;

- Встроенная интеграция с системами контроля версий: SVN, Git и TFS (для TFS, правда, нужны сторонние утилиты);

- Горячие клавиши (включая copy-paste) работают только в английской раскладке

- Периодически, при попытке поставить breakpoint студия виснет. Несмотря на наличие механизма автосохранения.

- При использовании встроенной интеграции с SVN добавление новых файлов в проект не отслеживается автоматически. Т.е. изменение в файле .csproj зачекинятся, а сами файлы - нет. По каждому файлу нужно кликать правой кнопкой и добавлять его в репозиторий.

- Иногда проект перестает компилироваться. Лечится перезапуском студии.

Visual Studio

Xamarin предлагает возможность вести разработку в Visual Studio после установки специального плагина, который доступен в business-лицензии (на момент выхода статьи - 999$), но есть месяц триала. Плюсы очевидны: вы становитесь разработчиком мобильных приложений, не меняя места дислокации, и можете использовать всю тяжелую артиллерию в лице Resharper и других ваших любимых плагинов. После установки плагина для Visual Studio потребуется настроить соединение с Mac, которое будет использовано при запуске проекта на выполнение. Т.е. после запуска, приложение автоматически пересылается на Mac, где компилируется и загружается либо на симулятор либо на устройство, при этом сам процесс отладки, расстановка брейкпоинтов и т.д. будет происходить в Visual Studio. Вариантов работы в Visual Studio несколько. Либо вы используется виртуальную машину внутри Mac (например, Parallels), куда ставите Windows и Visual Studio. Либо используете две разные физические машины, при этом использовать один Mac для нескольких PC-разработчиков затруднительно, т.к. отладка требует манипуляций с симулятором. И последний вариант - использовать виртуальную машину с Mac OS X (так называемый hackintosh). Вполне себе жизнеспособный вариант, хотя и есть некоторые ограничения. Например, в Xcode придется перемещаться по Storyboard только с использованием полос прокрутки, т.к. windows-мышь не очень похожа на настоящую мышь от Mac со всеми вытекающими.

С отладкой в Visual Studio периодически возникали проблемы. Самая заметная - это то, что при удаленной сборке приложения, процесс отладки мог отвалиться по таймауту. Хотя, опять же, стоит отдать должное разработчикам - они исправляют ошибки достаточно интенсивно. Хотя и стоит заметить, что на текущий момент, времени между запуском приложения и появлением его на экране симулятора при использовании Visual Studio требуется несколько больше, чем при использовании Xamarin Studio на Mac.

Лицензии

Xamarin имеет следующие типы лицензий:

- Starter - Бесплатно. Рассчитан скорее для ознакомления, т.к. имеет ограничение на размер приложения (по ощущениям очень не большой, т.к. не компилировались даже некоторые sample-проекты) и на использование сторонних компонентов;

- Indie - 299$ на одно рабочее место. Снимается ограничение на размер приложения. Разработка возможна только в Xamarin Studio;

-Business - 999$ на одно рабочее место. Появляется возможность разработки в Visual Studio и приватная тех. поддержка от инженеров Xamarin;

- Enterprise -1899$ на одно рабочее место. В рамках этой лицензии предоставляется возможность получения Hotfixes, а так же возможность отправить инженерам проект с исходным кодом и сказать «Что-то у меня не получается поменять ширину ячейки в таблице, помогите!». Плюс ряд не слишком полезных, на мой взгляд, опций.

Обращаю внимание, что для каждой платформы (iOS, Android) нужна отдельная лицензия. Несмотря на то, что у Business-лицензии написано «per developer» на текущий момент каждая лицензия может быть активирована на 4-ых рабочих станциях и эти рабочие станции можно менять. Т.е. гипотетически одну лицензию могут использовать два разработчика при том, что каждый из них будет использовать для разработки Visual Studio.

AppArchitect

Данный сервис позволит вам с легкостью (без писания кода) создать приложение для iOS.

Вам просто нужно, как в конструкторе, собрать свое приложение, протестировать его и отправить на одобрение в AppStore (без одобрения приложение не может появиться в AppStore). После того, как сотрудники AppStore одобрят приложение, оно станет доступным в магазине.

Также данная система позволяет, с помощью специального, приложения протестировать и опробовать созданное вами приложение. Для этого есть специальный инструмент. (рис 11)

Рис. 11 Логотип

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]