Полезные штуки для iOS-разработчика #1

    На Хабре в свое время было несколько статей «Очень много полезных штук для AS3». Автор попытался собрать ссылки на самые полезные и интересные библиотеки. И т.к. в последнее время я разрабатываю под iOS, решил последовать его примеру и сделать то же самое, но для своей платформы. Описания почти прикладывать не буду, все есть на страничках проектов.

    «Хелперы»:

    • «SSToolkit» — набор контроллеров, представлений и категорий, облегчающих жизнь.
    • «Cocoa Helpers» — коллекция хелперов (категорий) Cocoa для стандартных Apple Cocoa/UIKit классов, делающая их более удобными в использовании.
    • «BlocksKit» — упрощает работу с блоками.
    • «iOS-Universal-Framework» — Шаблон проекта XCode 4 для построения универсального фреймворка (arm6, arm7, симулятор) для iOS / iPhone. [Must Have]
    • «RMModelObject» — базовый класс для создания моделей. В принципе, подобное легко реализуется самостоятельно, но зачем тратить время, когда есть уже написанное решение.
    • «FMDB» — обертка над SQLite. Позволяет выполнять запросы к базе в многопоточном режиме, получать результаты в удобном виде. [Must Have]
    • «entropydb» — встраиваемая объектно-ориентированная БД для iOS, Mac OS X. Для любителей ORM.
    • «twitter-text-objc» — официальная версия библиотеки на Objective-C для обработки текста от Twitter.
    • «DCIntrospect» — Маленькая библиотека для визуальной отладки.
    • «UIDevice-with-UniqueIdentifier-for-iOS-5» — генерация уникального идентификатора устройства в iOS 5.
    • «iOS Boilerplate» — удобный и функциональный базовый шаблон проекта.

    UI-компоненты и фреймворки:

    • «Three20» — наверное, самый популярный фреймворк для iOS-разработки. Его используют Facebook, Posterous, Pulse, Meetup.com и мн.др. Да и в описании вакансий его можно часто встретить (пример компания Badoo). [Must Have]
    • «TapkuLibrary» — еще один хороший фреймворк, ускоряющий разработку. Постоянно развивается.
    • «Nimbus» — менее популярный, но не менее удобный. Если я не ошибаюсь, то победитель недавнего конкурса от ВК юзал именно его в своем приложении. [Must Have]
    • «Cooliris ToolKit» — библиотека от одноименной компании. Впечатляет набором классов.
    • «EGOTableViewPullRefresh» — хорошая реализация GUI-паттерна «Pull Down To Refresh». [Must Have]
    • «QuickDialog» — нужно быстро построить форму в соответствии с HIG? Юзайте QuickDialog.
    • «KTPhotoBrowser» — легковесная библиотечка для iPhone для просмотра фото.
    • «AQGridView» — приложение-галлерею для iPad я писал применяя данную библиотеку. Очень понравились гибкая настройка ячеек грида и их перемешивание с анимацией. [Must Have]
    • «KKGridView» — еще один GridView.
    • «GMGridView» — более функциональное и гибкое решение, чем KKGridView.
    • «MGSplitViewController» — улучшенный UISplitViewController для iPad.
    • «PSStackedView» — имплементация интерфейса Twitter под iPad.
    • «CLCascade» — еще один вариант реализации интерфейса Twitter под iPad.
    • «HGPageScrollView» — UIScrollView для iPhone с горизонтальным слайдером страниц.
    • «MTStatusBarOverlay» — кастомный статус бар.
    • «WEPopover» — имплементация поповера с удобным API как UIPopoverController (iPad), но c возможностью кастомизации и работы в iPhone.
    • «CMPopTipView» — позволяет создать красивую всплывающую подсказку.
    • «MBProgressHUD» — более гибкая и функциональная реализация HUD.
    • «SVProgressHUD» — альтернатива MBProgressHUD, более легковесная.
    • «TTTAttributedLabel» — требовалось ли вам когда-нибудь вывести подчеркнутый текст? Стандартный UILabel этого сделать не позволяет. К счастью есть TTTAttributedLabel, который решает описанную задачу и предоставляют кучу других возможностей по форматированному выводу текста.
    • «OHAttributedLabel» — альтернатива TTTAttributedLabel.
    • «SSMessagesViewController» — Простой UI для отправки сообщений на подобии Messages.app.
    • «TabBarKit» — название говорит за себя.
    • «JMTabView» — еще одна реализация стилизованных вкладок с анимацией.
    • «iRate» — хотите призвать пользователей активнее оценивать ваше приложение и реализовать такую возможность внутри его? Тогда этот класс для вас.
    • «OpenSpringBoard» — пример реализации GUI-паттерна Dashboard.
    • «ViewDeck» — красивый слайдинг наподобии реализации в клиенте Facebook.
    • «SVSegmentedControl» — стилизованный UISegmentedControl с дополнительными возможностями.
    • «UAModalPanel» — анимированная модальная панель.
    • «iCarousel» — простая и гибкая в кастомизации 3D карусель для iOS и Mac OS.
    • «Cocoa Controls» — куча кастомных компонентов для iOS, Mac OS X, среди которых встречаются действительно классные.

    Работа с сетью, social API:

    • «ASIHTTPRequest» — наверное, самая популярная и функциональная обертка над CFNetwork API. [Must Have]
    • «AFNetworking» — фреймворк для работы с сетью. iOS, Mac OS X.
    • «RestKit» — удобный фреймворк для работы с REST-сервисами.
    • «JSONKit» — newonder в комментах посоветовал, за что ему и всеобщая благодарность. Судя по тестам самая быстрая либа, зафолловил.
    • «SBJson (aka json-framework)» — библиотека сериализации/десериализации JSON.
    • «BSJSONAdditions» — простой парсер JSON.
    • «SDWebImage» — асинхронный загрузчик изображений с поддержкой кеширования.
    • «ShareKit» — удобная библиотека для расшаривания в социалки и не только. [Must Have]
    • «Facebook iOS SDK» — набор классов для работы с Facebook API. Хочу такую же официальную от ВК.
    • «MGTwitterEngine» — библиотека для интеграции с Twitter в ваших Mac OS X, iOS приложениях.
    • «MapKitDragAndDrop» — неплохой пример реализации аннотации на карте.
    • «OCMapView» — отображение на карте сгруппированных аннотацией.
    • «MapBox» — хорошая альтернатива MapKit. [Must Have]

    Аудио, видео, графика и анимация, файлы:

    • «AwesomeMenu» — очень красивое анимационное меню. [Must Have]
    • «NYXImagesKit» — полезные категории для UIImage, добавляющие фильтры, изменение размера картинки, маски, и мн.др.
    • «MGImageUtilities» = в дополнение к NYXImagesKit.
    • «Filtrr» — фильтры для UIImage.
    • «Core Plot» — для построения красивых графиков.
    • «WhirlyGlobe» — 3D моделька Земли. Отличный пример для изучающих OpenGL ES.
    • «AudioStreamer» — класс потокового аудио-плеера для Mac OS X и iPhone.
    • «PDF Reader/Viewer» — просмотр PDF.

    Игровые движки:


    In-App Purchases:

    • «MKStoreKit» — Вадим Башуров в своем докладе «Как откусить от яблока миллион» рекомендовал данную библиотеку. [Must Have]

    Тестирование:



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

    UPD 2.12.12
    По просьбе shoumikhin github.com/shoumikhin/NSXtensions — его набор категорий, который содержит в себе CocoaHelpers + еще всякие штуки. Доступен в CocoaPods.
    Метки:
    • +104
    • 77,3k
    • 80
    Поделиться публикацией
    Похожие публикации
    Комментарии 80
    • 0
      Супер, благодарю. Крутая подборочка
      • 0
        Присоединяюсь. Как раз начинаю разбираться с кодингом под айось.
      • +6
        Хорошие ссылки, но небольшие аннотации к ним просто необходимы! Что это и для чего. А то приходится открывать 100 вкладок и смотреть что так не то, что нужно.
        • 0
          Согласен. Мне, как новичку, не мешало бы ознакомиться с кратким описанием инструментов в одном месте. То бишь здесь.
          • +1
            Ок, добавлю аннотации. Спасибо за комментарий.
          • 0
            Отлично, спасибо! Только вот по поводу либы «MKStoreKit» могу сказать что это абсолютно ненужная вещь, во-первых код ужасен, сплошные спагетти, во-вторых, она не особо то и помогает, нативный StoreKit прост как две копейки
            • 0
              Думаю о многих библиотеках из вышеперечисленных можно сказать подобное. Потому часто пишу свои велосипеды или не мало времени трачу на допиливание чужих. Из этого всего добра юзал токо: «FMDB», «GHUnit», «cocos2d-iphone» за уже 2.5 года опыта iOS разработки.
              • +2
                А по мне полезно. С ним покупка делается в одну строчку. Надо только задать блок после покупки и блок после отмены. Руками такое писать лениво.
                • +1
                  Соглашусь. До этого использовал родной StoreKit и из проекта в проект использовал код повторно, т.е. копипастил в основном. Попробовал MKStoreKit, не знаю насколько код плох внутри, но «на поверхности» мне остается писать только пару строчек и я точно знаю что этот код прошел проверку в множестве других проектов, т.е. баги маловероятны.
              • +1
                Вот спасибо! Вот бы еще бы что-то такое для андроида…
                • 0
                  Что означает пометочка [Must Have]? Я так понял — знать обязательно?
                  • +1
                    Обязательно иметь в наличии. И использовать, по возможности.
                  • 0
                    Благодарю.
                    • 0
                    • +1
                      А теперь пойдите и напишите podspec'и для ваших любимых либ ;)
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          За JSONKit спасибо, добавлю в список.
                      • 0
                        Спасибо. Добавьте ссылки на рекламные фреймворки, они необходимы для зарабатывания денег: adwhirl.com, smaato.com.
                        • 0
                          Скорее всего сделаю это во второй части, если будет актуально.
                        • 0
                          3d движки плз тоже добавьте во вторую часть, если не сложно )
                          • 0
                            Хорошо, добавлю + дополню список 2D.
                          • +1
                            Вот бы кто-то такое же сделал для андроида
                            • 0
                              Cocos2d-x, Unity3D, sio2, UDK — еще движки. MapBox понравился, жалко платный.
                              • 0
                                слушал вчера доклад по sio2 — докладчик рассказывал про печальный опыт использования. активно не рекомендовал.
                                • 0
                                  имею аналогичный опыт с sio2
                                  • 0
                                    Да я тоже не рекомендую, они просто есть :) Может кому-то интересно и кто-то любит боль?
                                • 0
                                  «ASIHTTPRequest» стоит пометить как [depricated]
                                  • +3
                                    Лучше deprecated.
                                    • 0
                                      А есть какая-то альтернатива?
                                      • +2
                                        • 0
                                          RestKit?
                                          • 0
                                            • 0
                                              ни фига не повторяет функционал ASIHTTPRequest, с отображением прогресса там все плохо, пришлось вернуться на неподдерживаемую ASIHTTPRequest
                                            • 0
                                              основной плюс и цель разработки ASI был как раз в создании очереди запросов. С появлением iOS4, в котором появились блоки — это стало уже не актуально. Блоги в связке с GCD работают эффективней и писать код намного проще.
                                              Поэтому сейчас писать код с использованием ASIHTTPRequest есть смысл только в одном случае — это поддержка iOS3, но нужно иметь очень очень и очень везкие причины, чтоб это делать.
                                          • +2
                                            Да юзайте уже cocoapods;)
                                            • 0
                                              да, автор добавьте плиз в пост ещё и CocoaPods!!! Must have! Значительно ускоряет процесс втягиваниая, обновления и управления зависимостями либ! Хватит ручками кучей разных способов втягивать либы! =)
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                              • 0
                                                GDataXML, кстати, одна из самых лучших либ для работы с XML по скорости/функционалу
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                • 0
                                                  Я с другими не сравнивал, но для игр классно использовать Мармелад (я сейчас как раз одну пишу). Он низкоуровневый, поэтому удобно использовать более высокоуровневый движок. Советую Oxygine:
                                                  www.gamedev.ru/projects/forum/?id=159455
                                                • +2
                                                  Добавлю чуть от себя:
                                                  PaperStack — Page Curl еффект как в iBooks не использующий private api, и на OpenGl
                                                  ReactiveCocoa — Обвертка над KVO, использую для биндинга, но возможности фреймворка намного шире.
                                                  AddThis — Шаринг в 3 сотни соц сетей, для тех кто не подружился с ShareKit, или нужна экзотика, но времени на изучение апи нет. Есть SDK и под iOS и под Android.
                                                  CrashKit — шлет отчеты об ошибках и падениях на почту, для тех, кому лень использовать TestFlight

                                                  Для тестирования:
                                                  Cedar — пишем BDD тесты в RSpec стиле
                                                  Kiwi — тоже самое, но на основе стандартного фреймворка для тестов. Мне больше нравится Cedar.
                                                  Frank — Cucumber для iOS. Рубисты оценят.

                                                  Ну и конечно же CocoaPods как репозиторий всего этого добра.
                                                  • +1
                                                    Кстати, по поводу огурца, я тут думал написать статью на эту тему, будет интересно хоть кому-нибудь?
                                                    • 0
                                                      Да, был бы очень признателен.
                                                      Сапасибо за информацию!
                                                      • 0
                                                        Да, очень бы хотелось по BDD для iOS почитать. Только не кальку с зарубежных статей, а что-то свое (зарубежное уже пересмотрел).
                                                        Hint: насколько я понял большинство начальных статей по BDD написано для RoR, для iOS написано у всех для читателя, который уже хорошо имеет представление что это. Статьи BDD в iOS «для чайников» не хватает. Хотя с другой стороны меня это подвигло новый язык выучить just for fun :)
                                                    • 0
                                                      AddThis действительно выручает если нужна экзотическая соц. сеть. Как раз сейчас я хочу переключится с AddThis на ShareKit. Один из минусов AddThis — очень много тапов чтобы зашарить что-либо, грубо говоря это встроенный браузер, который отображает веб версию логина того же фейсбука, чтобы зашарить простой линк, нужно достаточно глубоко забраться и потом тапать Back раза 3 как минимум. Заказчик хочет зашарить буквально в один-два тапа и чтобы меню само закрылось как только линк отправлен, ну или максимум 1 тап, а не 3 раза «назад» и еще один раз «закрыть». И последнее — необходимость каждый раз вводить логин и пароль, надеюсь ShareKit этим не страдает.
                                                      • 0
                                                        Я использовал кастомный поповер, с кнопками шаринга в Фейсбук и Твиттер напрямую, есть такие методы в AddThis SDK, и дополнительной кнопкой для всех остальных сетей. Как показывает статистика, шарят в основном в один фейсбук.
                                                        • 0
                                                          Так шаринг в Facebook прикручивается за несколько минут с их родным framework.
                                                          • 0
                                                            Он и используется внутри AddThis
                                                    • 0
                                                      Отличная статья, спасибо! Добавьте еще CocoaAsyncSocket, хорошая библиотека для работы с сокетами.
                                                      • +1
                                                        ИМХО, пытался сделать конфету а получилась куча мусора. Если уже упоминаешь ShareKit, то никаких других фрэймворков, тем более официальных и гуглящихся за одну секунду, не надо. Да и three20 — прошлый век, по ряду причин лучше всегда и везде использовать родные контролы.
                                                        • +1
                                                          Хорошая статья и я хочу добавить немного отсебятинки :)
                                                          CI
                                                          fruitstrap — для установки/дебага .app на девайс из терминала, уже не поддерживается, но на Lion работает исправно

                                                          Для тестирования
                                                          tune-up — набор расширений для UIAutomation
                                                          mitmproxy — http(s) debugging tool
                                                          paros proxy — http(s) debugging tools, заброшенный но полезный, настраивается за 5 минут
                                                          Network Link Conditioner — для эмулирования различных сетей, идет в Xcode 4.1 и выше, только под OS X 10.7 и выше
                                                          Over-the-air distribution описание как настроить от apple
                                                          • 0
                                                            Надо поиграться с KTPhotoBrowser.
                                                            До этого использовал этот github.com/mwaterfall/MWPhotoBrowser.
                                                            • 0
                                                              Это из-за Three20 Facebook app работает так медленно? :)
                                                              UX у Facebook app — это скорее анти-пример. UI жутко не отзывчивый (особенно в условиях плохого коннекта). Впечатление такое, что большая часть его написана без асинхронных вызовов. Я не понимаю почему нажатие на кнопку надо обрабатывать несколько секунд чтобы потом выдать мне пустой webview (контент которого только начинает подгружаться) с парой кнопок. Это оно иерархию с <10 views так долго строит?
                                                              • 0
                                                                three20 вроде уже не используеться в FBApp последней версии, вроде осенью читал про это где-то, сейчас не нашел. Новый фейсбву — это гибридное приложение, в отличие от предыдущего.
                                                              • 0
                                                                хех. Новичкам есть шанс пасть жертвами копипаста, так и не поняв что и как работает.
                                                                • 0
                                                                  Нечем отплюсовать, но мысленно с вами.
                                                                  • 0
                                                                    Наврно бородатые ассемблерщики думают тоже самое о языках более высокого уровня =)
                                                                    • 0
                                                                      Не согласен. Что касается iOS, часто встречаю «фреймверки» от девелоперов полные ликов и багов но с коментами а-ля «оно же работает». Т.е. это какбы уже модно чтоли, выпустить свой фреймверк или кастомный контрол, не задумываясь о его тестировании и тп. Далее оно копипастится в другой код и ошибки плодятся и плодятся.
                                                                  • 0
                                                                    Карты – route-me. :-)
                                                                    • 0
                                                                      А как правовая часть этого всего добра? На каких условиях, допустим, можно использовать AQGrid в своих платных приложениях?
                                                                      • 0
                                                                        entropydb похоже крутая штука. Кто-нибудь его юзал? Оно умеет как Core Data light-weight migration делать при обновлении версии?
                                                                        • +1
                                                                          CocoaAsyncSocket
                                                                          асинхронные сокеты

                                                                          OCMock
                                                                          реализация моков для (unit) тестов

                                                                          YandexMapKit
                                                                          Яндекс-карты

                                                                          Route-Me
                                                                          мощная библиотека для карт, можно использовать OSM и многие другие сервисы тайловых карт

                                                                          • 0
                                                                            Пока еще можно оставлять комменты, добавлю свои 5 копеек.
                                                                            Во-первых — сам пост отличный, я узнал для себя много нового, например те же Pods.
                                                                            Но даже некоторые [Must Have] библиотеки я бы не стал особо рекоммендовать.

                                                                            Начнем с ShareKit и AddThis, обе совсем не дружат с последней версией Facebook SDK. Все скомпилируется, слинкуется и даже запустится, но ничего зашарить через Facebook не выйдет. Вывод — обеим срочно требуется обновление, а судя по датам последних коммитов, эти либы уже морально устарели и отстали от мейнстрима, по крайней мере что касается фейсбука. А в моем случае я просто обязан был использовать последнюю версию Facebook SDK по определенным причинам. Выход — по прежнему использовать ShareKit и AddThis, только для фейсбука написать немного кода для шаринга, а лучше позаимствовать из Hackbook семпла.

                                                                            Pods — замечательная вещь, но, опять же, со своими минусами. Поды обновляются не регулярно, некоторые могут быть давно заброшенными, а использовать хочется. Проблема же вот в чем, в моем случае, одна из либ потянула за собой под SBJson версии 2.2.3, а добавить еще один SBJson версии 3.1 уже нельзя. А мне как раз нужна более новая версия, т.к. активно использую некоторые классы из нее. Я избежал проблем просто добавив SBJson 3.1 в основной проект и все заработало. Но факт есть факт, некоторые поды тянут зависимости за собой, которые не обязательно будут послдней версии и возникают такие вот неприятности.

                                                                            В общем, либы полезные, но не обязательно помогут во всех случаях.
                                                                            • 0
                                                                              >>В общем, либы полезные, но не обязательно помогут во всех случаях.
                                                                              Вы правы, поэтому и я писал использовать «по возможности» :)

                                                                              Насчет Pods — сегодня увидел в своем Google Reader свеженькую статью Introduction to CocoaPods от Ray Wenderlich.
                                                                            • 0
                                                                              Вопрос в тему: посоветуйте в дополнение к статье библиотеку для интерактивных графиков, чтобы бы можно было их зумить, при клике на линию выводить значение в точке. Т.е. ищу некоторую альтернативу CorePlot.
                                                                              • 0
                                                                                Простите конечно, но BlocksKit не «упрощает работу с блоками».
                                                                                BlocksKit — это набор категорий над Foundation и UIKit классами, добавляющих методы, использущие блоки. Для итерации по коллекциям, для обработки эвентов и т.п.
                                                                                • 0
                                                                                  И, кстати, «PDF Reader/Viewer» — это не библиотека, это приложение. Для чтения/отрисовки PDF они используют CoreGraphics.
                                                                                  • 0
                                                                                    А посоветуйте альтернативу RestKit, он какой-то сильно большой и не работает как надо. (банально не получается слинковать RestKit с проектом) Хотя сделал все как по хавте в официальной вики.
                                                                                    • 0
                                                                                      Не могу не поделиться — FrameAccessor.
                                                                                      Упрощает обращение к frame'у.

                                                                                      view.x = 15;
                                                                                      view.width = 167;
                                                                                      

                                                                                      вместо

                                                                                      CGRect newFrame = view.frame;
                                                                                      newFrame.origin.x = 15;
                                                                                      newFrame.size.width = 167;
                                                                                      view.frame = newFrame;
                                                                                      
                                                                                      • 0
                                                                                        Добавьте еще Frank и Calabash для тестирования UI и Cedar для unit-тестов.
                                                                                        • 0
                                                                                          Также не забывайте о Parse — мега-полезная штука для бэкенда.
                                                                                          Либо альтернатива от ребят из Харькова — QuickBlox.
                                                                                          • 0
                                                                                            Библиотека для работы с XML-RPC веб-сервисами: github.com/eczarny/xmlrpc (есть еще параллельная ветка от разработчиков Wordpress for iOS, там есть поддержка стриминга (ну, например когда надо отправить здоровый видеофайл, а грузить его в память целиком не хочется)).

                                                                                            Ну и про CocoaPods тут уже упоминали.
                                                                                          • 0
                                                                                            «JSONKit» и «SBJson (aka json-framework)» ссылаются на один и тот же сайт. Первый должен вести сюда: github.com/johnezang/JSONKit
                                                                                            • 0
                                                                                              Слайдер SAVideoRangeSlider для обрезки видео, похож на iMovie — github.com/andrei200287/SAVideoRangeSlider
                                                                                              • 0
                                                                                                Может пригодиться: ios-cosmos.com

                                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.