Полезные штуки для 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
    • 80.6k
    • 80
    Share post

    Similar posts

    Comments 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
                        fixed :)
                        +1
                        А теперь пойдите и напишите podspec'и для ваших любимых либ ;)
                          0
                          Написал!
                        • UFO just landed and posted this here
                          • UFO just landed and posted this here
                              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! Значительно ускоряет процесс втягиваниая, обновления и управления зависимостями либ! Хватит ручками кучей разных способов втягивать либы! =)
                                                • UFO just landed and posted this here
                                                    0
                                                    GDataXML, кстати, одна из самых лучших либ для работы с XML по скорости/функционалу
                                                  • UFO just landed and posted this here
                                                      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
                                                                                                  ну и да, podspec соответствующий.
                                                                                                  0
                                                                                                  «JSONKit» и «SBJson (aka json-framework)» ссылаются на один и тот же сайт. Первый должен вести сюда: github.com/johnezang/JSONKit
                                                                                                    0
                                                                                                    Слайдер SAVideoRangeSlider для обрезки видео, похож на iMovie — github.com/andrei200287/SAVideoRangeSlider
                                                                                                      0
                                                                                                      Может пригодиться: ios-cosmos.com

                                                                                                      Only users with full accounts can post comments. Log in, please.