Разработка более сложных, чем Hello World! приложений под АйФон требует не мало усилий и отнимает массу времени, особенно когда вы только начинаете разбираться с Objective-C. После нескольких тренировочных приложений или даже чего-то полезного, наверняка захочется разработать что-то интересное и использующее что-либо специфическое например в интерфейсе или функционале.

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

1. Facebook Three20 framework

Three20 screenshot


Изначально данный фреймворк был разработан Jeff Verkoeyen специально для приложения FaceBook. Само приложение так же написал Джеф и именно для него изначально был разработан фреймворк Three20. После того, как приложение вышло в App Store Джеф попросил разрешения у Facebook чтобы сделать исходные коды библиотеки общедоступными на GitHub. Это позволило так же добиться более лучшей стабильности Three20.
На текущий момент данную библиотеку использует огромное количество приложений, как платных, так и бесплатных. Приложения, использующие Three20 легко заметить по некоторой похожести внутренних элементов интерфейса на FaceBook App. Используюя Three20 имейте в виду, что вы не сможете использовать Interface Builder для отрисовки интерфейса. Создание всех элементов контроллера вам будет необходимо осуществлять исключительно в коде, но я полагаю что это совершенно незаметный недостаток, а скорее даже большое приимущество. Видел массу вопросов и негодований по поводу невозможности использования Interface Builder-а с Three20.

Three20 включает в себя массу удобных реализаций стандартных элементов интерфейса iOS. Например TTStyledTextLabel (аналог UITextLabel) поддерживает CSS стили. Вы сможете использовать даже inline изображения прямо в тексте. Тоесть теперь для того чтобы вывести текст с выделенными частями и разными стилями, с переносом (
) и ссылками — вам необходимо просто создать один лишь TTStyledTextLabel вместо нескольких UITextLabel.

Так же одним из самых важных элементов является TTTableViewController. Его поведение несколько отличается от поведения стандартного UITableViewController и построено на связи Data Model (обычно URLRequestModel) -> DataSource -> TableView. Данные мы получаем в модели (к примеру response в формате JSON от API той или иной соц. сети или любого другого сайта), далее в Data Source мы работаем с этими данными и создаем массив ячеек необходимого типа а в TableViewController уже работаем с отображением и остальным функционалом, который нам нужен. Отдельно хочу отметить что с помощью Three20 очень удобно создавать табличные ячейки своего собственного вида (со своей разметкой, графикой и т.п.) и т.к. мы можем использовать TTStyledTextLabel — кода будет существенно меньше чем если создавать ячейки на базе стандартного UITableCell.
В последствии в DataSource при формировании ячеек мы сможем использовать абсолютно любые их типы, в том числе (или даже в первую очередь) и те, что мы создали сами. Three20 уже имеет большое количество вариантов ячеек стандартного вида (с картинкой, с текстом неограниченной высоты, с ссылкой и т.п.).

Three20 включает в себя так же очень удачное представление предпросмотра картинок (контроллер TTThumbViewController), с его помощью написаны почти 100% платных и бесплатных приложений для загрузки обоев. TTThumbViewController представляет собой удобно организованный вид картинок в виде превью и что самое главное с ассинхронной подгрузкой. Для просмотра большой картинки есть TTPhotoViewController. Контроллер представляет собой реализацию просмотрщика картинок, почти такую же как стандартная в iOS, т.е. с поддержкой поворота, масштабирования и пролистывания.

Помимо перечисленных выше контроллеров Three20 включает в себя различные индикаторы состояния, индикаторы процессов, таббары с собственными стилями, экран запуска с иконками (LauncherView) как при старте FaceBook App, встроеный браузер, реализация Pull down to reload (как в Tweetter) на базе EGOTableViewPullRefresh и некоторые другие контроллеры. К сожалению на данный момент очень мало документации по Three20, но в исходниках есть примеры и приложение TTCatalog, демонстрирующие возможности фреймворка, в остальных случаях приходится гуглить. Фреймворк получился очень хорошим и пока альтернатив ему нет, либо писать что-то свое. Это идеальный выбор для написания всевозможных клиентов соц сетей или частичной их интеграции, а так же просто для придания Custom вида приложению и ускорения процесса разработки.

2. Lite QR Reader

Наверное многие из вас не раз сталкивались с приложениями, которые могут сканировать штрихкоды. Еще давно, когда я загрузил несколько таких приложений, я заметил, что непосредственно интерфейс сканирования у них у всех одинаков — в этом случае сомнений насчет использования одного и того же фрейм ворка и быть не может, остается конечно еще и плагиаторство, но это я как то в расчет не брал. Один из таких фрейм ворков для сканирования и распознавания штрих кодов написал, а точнее портировал от ZXING все тот же Джеф, который написал Three20.
Скажу честно, сам я этот фреймворк не пробовал, т.к. надобности в этом у меня пока что не возникало. Вообще существует достаточное количество различных библиотек для распознавания штрих-кодов от различных производителей, как бесплатных так и платных, причем зачастую с соврешенно странными условиями как например Red Laser SDK. Но я доверяю больше Джефу (хотябы после Three20 да и вообще судя по комментариями он более чем адекватный разработчик).

3. JSONKit lib

Как ясно уже из названия JSONKit это библиотека для преобразования JSON в объекты Objective-C (к примеру NSDictionary). Вообще существует несколько альтернатив JSONKit-у например SBJson (довольно популярный фреймворк) или YAJL (Yet Another JSON Library). Из этих трех (включая JSONKit) самой медленной считается SBJson, далее YAJL и самой быстрой (по утверждению автора и сравнительным тестам на его GitХабе, а так же по тестам независимых разработчиков). Кстати SB и YAJL идут в комплекте с исходниками Three20 и их можно спокойно подключить, но я предпочел использовать всеже JSONKit.

4. Audio Streamer (DigitalDJ)

AudioStreamer — это фреймфорк для прослушивания аудио потоков. Изначально проект Audio Streamer был написан Мэттом Гэллэхером (Matt Gallagher), затем было добавлено несколько фишек и баг фиксов неким jfricker-ом, и уже на базе этого кода с очередными модификациями и баг фиксами появилась версия от Digital DJ. Чем она лучше родного, который написал Мэтт (насчет jfricker не знаю не пробовал)? Из очевидного, лучше она тем, что в iOS 4.0 поддерживается фоновое воспроизведение и полноценное управление воспроизведением. Тоесть вы спокойно сможете загрузить плейлист из соц сети и слушать все в фоне, управляя своим плей листом как айПодом. Круто? Еще как! Я в начале использовал оригинальный Audio Streamer, но когда понадобилось фоновое воспроизведение (кстати не работает в симуляторе, так что тестировать можно только на девайсе) — я перешел на версию от DigitalDJ. Кстати на GitХабе в репозитории с исходниками есть readme где как раз и написано чем отличаются версии и кто, что привнес в ту или иную версих Audio Streamer.

5. EGOTableViewPullRefresh

EGOTableViewPullRefresh

EGOTableViewPullRefresh


Все мы с вами знаем удобную фишку Pull To Refresh (reload) (или по-русски «потяните чтобы обновить»). Первым эту фишку предложил разработчик приложения Twitter. Так вот EGOTableViewPullRefresh это бесплатная реализация «потяните чтобы обновить» для остальных разработчиков, кто хочет эту фишку добавить. Добавляется в приложение она совершенно элементарно, равно как и изменяется внешний вид. Единственное от себя могу добавить несколько фактов:

- Код EGOTableViewPullRefresh уже входит в Three20, кстати говоря по поводу этого кода возник конфликт между разработчиком EGOTableViewPullRefresh и Facebook App. Т.к. Diff исходных кодов показал что в фреймворке Facebook исплозовался незначительно измененный EGOTableViewPullRefresh без указания авторства, но вскоре конфликт был улажен и сейчас именно код EGOTableViewPullRefresh используется в Three20 (о чем там как раз и сообщено в комментариях исходника). Исползование EGOTableViewPullRefresh в проекте c Three20 отличается от простого использования EGOTableViewPullRefresh, т.к. Three20 использует URLRequestModel для обновления данных таблицы. Поэтому лучше не использовать одновременно Three20 и дополнительно подключенный EGOTableViewPullRefresh.

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

- На сайте http://developers.enormego.com/ есть еще несколько полезных исходников для айфона, которые так же можно использовать при разработке.

- Это была первая сторонняя библиотека, использованная мной в приложении для iPhone :) .

6. ASI HTTP Request

Фреймворк скорее на будущее, который я собираюсь рассмотреть, в случае возникновения необходимости. Вообще, как следует из описания (и понятно из названия), данный фреймворк необходим для упрощения работы с вебсервисами. ASI HTTP Request — нечто иное, как враппер CFNetwork API. С помощью ASI HTTP Request удобно отправлять запросы GET / POST / PUT / DELETE, а так же легко сабмитить multipart/form-data (формы, содержащие файлы).
Вобщем фреймворк идеален для использования в программах, где необходимо скачивать данные, загружать данные в веб, причем загрузка данных (как пишет разработчик) может осуществлятся и в фоне (начиная с iOS 4 естественно).

7. XML RPC

С данным фреймворком все просто — он нужен для работы с XML-RPC (Remote Procedure Calls). Труда в освоении не представляет. Я его не использовал, но на будущее решил взять на заметку.

8. InAppSettingsKit

InAppSettingsKit screenshot

InAppSettingsKit


Очень любопытный фреймворк для работы с настройками (если вы решили их добавить) вашего приложения. Фреймворк позволяет создать страницу с настройками как внутри вашего приложения, так и в стандартных Яблочных настройках айФона (Settings.app). С этим фреймворком вам больше нет необходимости дополнительно создавать страницу с настройками, все происходит быстро и с наименьшим количеством кодинга. Чтобы добавить тот или иной параметр в настройки — вам достаточно лишь внести этот параметр в Settings.bundle.
Данный фреймворк поддерживает все необходимые контролы: слайдеры, текстовые поля, тогглы, дочерные виды, вобщем все, что нужно для полноценной настройки вашей программы. И опять таки существенно экономит время. В ближайшем будущем я собираюсь попробовать InAppSettingsKit и посмотреть насколько увеличится размер конечного файла приложения. Но сомневаюсь что намного.