Software Engineer (Ruby, JavaScript)
0,0
рейтинг
19 мая 2012 в 21:41

Разработка → Полезные штуки для 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.
Андрей Крисанов @Coder89
карма
45,2
рейтинг 0,0
Software Engineer (Ruby, JavaScript)
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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
      Написал!
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
      • 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
          Вот небольшое вступление.
    • 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

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