Подборка полезных репозиториев на GitHub


    В последнее время у меня собралось много отмеченных репозиториев на GitHub со всякими разными, полезными и не очень кусками кода. Решил их как структурировать для себя, так и поделиться с общественностью.



    facebook/three20



    Весьма извесная библиотека с разным функционалом под iPhone. Используется в официальном приложении Facebook. Ранее имевшая некоторые проблемы с приватным API, сейчас Three20 проходит валидацию в AppStore без проблем. Библиотека очень мощная, и, из-за этого, несколько сложна в начальном изучении. Много всяческиз helper-макросов, начиная от работы с памятью, и заканчивая расширенным логгингом.

    В комплект так же входят интерфейсы для работы с изображениями (TTPhotoViewController эквивалентен фотоброузеру из стандартного Photos), письмами (полностью расширяемый UI для отправки почты). Расширенный контроллер таблиц TTTableViewController сделан специально для получения данных из сети. TTTextEditor – замечательный контрол, который позволяет вводить текст в динамически расширяемый UITextView, так же, как это делает SMS.

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

    pokeb/asi-http-request


    Враппер для CFNetwork, который позволяет делать расширенные HTTP-запросы. Из полезных моментов: позволяет закачивать данные прямо в файл; поддерживает простой интерфейс для передачи файлов в POST-запросе; есть поддержка делегатов для обновления прогресса закачки; поддержка разных схем авторизации (Basic, Digest, NTLM); поддержка GZip как для ответа, так и для передачи запросов.

    Помимо всего этого, ASI HTTP умеет работать с Amazon S3, а из расширенных возможностей, поддерживает шейпинг закачки и работу через прокси. ASI HTTP прекрасно чувствует себя и в Mac OS X, и на iPhone.

    parmanoir/jscocoa


    Очень крутая штука – по сути бриджинг из Javascript в Cocoa. Работает на базе вебкитного JavascriptCore, и предоставляет более широкие возможности, нежели стандартный бриджинг.

    Библиотека позволяет не только создавать новые классы в рантайме на JS, но и выполнять свиззлинг (подмену методов) существующих классов, а так же выполнение стандартных JS-методов на ObjC-объектах (особенно мне нравится пример с регулярками из документации: myNSString.match(/pattern/)). С помощью JSCocoa можно очень просто добавить поддержку скриптинга и плагинов в любое ваше приложение (только не надо забывать, что за поддержку скриптинга в iPhone-приложениях потенциально можно получить reject).

    andrep/RMModelObject


    Читали ли вы гайд по реализации объектов-моделей в Objective-C? Если да, то вы представляете себе объем работы, необходимый для создания полноценного класса-модели, а ведь Core Data – это не серебрянная пуля ©. RMModelObject делает бóльшую чать реализации за вас. По сути, описание экземпляра модели сводится к следующему коду:

    @interface MyBlogEntry : RMModelObject
    
    @property (copy) NSString* title;
    @property (copy) NSCalendarDate* postedDate;
    @property (copy) NSAttributedString* bodyText;
    @property (copy) NSArray* tagNames;
    @property (copy) NSArray* categoryNames;
    @property BOOL isDraft;
    
    @end
    
    //
    
    @implementation MyBlogEntry
    
    @dynamic title, postedDate, bodyText, tagNames, categoryNames, isDraft;
    
    @end


    Не надо явно объявлять ivar'ы. Не надо описывать аксессоры. Готовая поддержка как NSCopying, так и NSCoding. Готовая поддержка сравнения объектов (-isEqual: и -hash) по заданным критериям сравнения. Готовый -dealloc. Замечательная штука, одним словом. А еще такие классы будут получать уведомления (a la упрощенное KVO), когда любое поле модели будет изменено, что позволяет сделать и валидацию и моментальное сохранение. Конечно все это отлично дружит с другими технологиями Cocoa, например с биндингами.

    RMModelObject внутри представляет собой очень интересное инженерное решение, если вам интересно копание в рантайме – советую почитать исходники.

    erica/*


    Эрика Садунн – известный программист и замечательный автор. В ее репозитории можно найти несколько полезных категорий для повседневной работы. Расширения NSObject позволяют делать несколько интересных вариантов вызова селекторов (например - (id) objectByPerformingSelectorWithArguments: (SEL) selector, ...;), и получать доступ к информации из рантайма.

    Расширения для NSArray позволяют делать выборки, традиционно применяемые для set: uniqueMembers, unionWithArray:, intersectionWithArray:; операции map, collect, reject по заданым селектору и аргументам, а так же расширения для работы с NSArray как со стеком или очередью.

    NSDate-Extensions добавляет в NSDate методы для быстрого создания даты, проверки на «сегодня», «вчера», «завтра», «на этой неделе», и т.п. и простого разбора NSDate на компоненты без привлечения календарного класса.

    Я советую так же заглянуть в другие репозитории Эрики.

    guicocoa/GCCalendar



    GCCalendar – класс для создания интерфейса календаря. GCCalendar поддерживает только вид представления «один день», но делает это очень хорошо.

    uliwitness/UliPhoneKit


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

    enormego/EGOTableViewPullRefresh



    Однажды появившийся в Tweetie подход с обновлением путем перетягивания UITableView вниз уже разошелся по разным приложениям и стал вполне стандартным паттерном взаимодействия с iPhone. EGOTableViewPullRefresh поможет быстро и просто добится аналогичной функциональности в вашем приложении. Если кнопка refresh не вписывается в интерфейс, или места для нее уже не осталось – попробуйте pull-refresh!

    А еще блог enormego очень интересен.

    tmdvs/TDBadgedCell



    TDBadgedCell добавляет на UITableViewCell свойство badgeNumber, которое показывает на бейдже справа указанное число так же, как это делает MobileMail.

    mattball/MBCoverFlowView



    MBCoverFlowView – это класс для Mac OS X, с помощью которого можно сделать эффект cover flow так же, как он работает в Finder и iTunes.

    sdegutis/SDModelObject


    SDModelObject – это более простой вариант уже упомянутого RMModelObject. Единственное, что он поддерживает: автоматическое освободжение всех объектов-свойств в -dealloc, проверка на -isEqual: по заданному набору ключей и -hash.

    ccgus/jstalk


    Как-то я пробовал написать пару-тройку скриптов на AppleScript. К сожалению, до конца понять этот язык у меня не вышло, уж больно он непривычен. JSTalk – это интересный проект, с помощью которого общаться с приложением через ScriptBridge можно посредством JS-кода. Кроме того, JSTalk поддерживает специалный вид вызовов через препроцессор, что позволяет использовать тридиционный ObjC-стиль вызова методов [someObje someMeth:someArg] в JS.

    sdegutis/SDKVO


    Категория SDKVO добавляет ко всем объектам следующий метод:
    - (id) observeKeyPath:(NSString*)newKeyPath
    			  options:(NSKeyValueObservingOptions)someOptions
    			  handler:(void(^)(id object, NSDictionary *change))newHandler;

    с помощью которого KVO можно использовать через блоки в 10.6SDK (iPhone4.0SDK, или PLBlocks).

    sdegutis/SDKeychain


    SDKeychain предоставляет всего два аккуратный Cocoa API для работы с OSX Keychain (родное API только на C):
    + (NSString*) securePasswordForIdentifier:(NSString*)username;
    + (BOOL) setSecurePassword:(NSString*)somePassword forIdentifier:(NSString*)username;


    yfactorial/objectiveresource


    ObjectiveResource – это порт рельсового ActiveResource на Objective-C. К сожалению, я так и не поковырял этот репозиторий с момента зафоловливания, но, все же, упоминаю его здесь, потому как он кажется мне весьма интересным.

    blakeseely/bsjsonadditions


    Если в передаче данных по сети вы полагаетесь на JSON (я лично предпочитаю XML Plist'ы), то попробуйте bsjsonadditions. Поддерживаются как кодирование объектов в JSON, так и парсинг строк.

    sdegutis/CocoaREST


    В CocoaREST входит целое семейство классов для работы с RESTful API разных сервисов, в том числе: Facebook, FriendFeed, Identica, Twitter. Так же достаточно просто написать поддержку своего API.

    sschroed/mini-mallows


    Очень простой враппер для NSURLConnection, который позволяет делать сложные POST-запросы, в том числе – передавать в них файлы.

    Вот, кажется, и все. Еще у меня есть несколько любимых репозиториев на Google Code (в том числе Google Toolbox for Mac, json-framework, kissxml, plbocks и XMPP Framework), но о них как-то в другой раз.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 15
    • +1
      Основная фишка ObjectiveResource в том, что он позволяет маппить объекты с их XML(JSON) представления в Obj-C. Делает он это за счет обхода в рантайме всех properties объекта. Вот, собственно, и все :) Ну и пачка методов «на все случае жизни» которыми он расширяет NSObject(например findAll, save, update и т.д.) Минус — запросы не асинхронные(хотя в форках была реализация). Ну и с CoreData он изначально не дружит, нужно докручивать :)
      • 0
        Не заметил ваш комментарий. Внизу мои выкладки по поводу OR. ;-)
      • +1
        Ну и как аналог SDKeychain могу предложить SFHFKeychainUtils. Он позволяет получить описание ошибки.
        • +2
          Нет предела благодарности!
          Это отличный пост!
          • 0
            Большое спасибо!

            А не знаете какую-нибудь штуку по типу «RMModelObject» только чтобы оно еще умело сохранять/загружать из SQLite? А то самому писать на каждый класс уже задолбало
          • 0
            Спасибо за подборку! Очень вовремя ,)
            • 0
              Волшебно! От себя добавлю про ObjectiveResource. Я его ковырял и выяснил, что он очень глючный. Заставить его корректно работать, например, с ZenDesk API мне не удалось (не поддерживает pagination и криво парсит urlы c символом "-" ). Еще у него проблемы с кодировками. И документация отсутствует как класс. Вобщем, хорошее решение для простых случаев. Про CocoaREST не знал. Спасибо за наводку, буду пробовать.

              Для работы c Authorization Services APIs есть какая-нибудь адекватная обертка на Cocoa?
              • 0
                Использую ObjectiveResource в двух проектах на CocoaTouch (для связки с рельсовым бекендом). Кривое и не очень удобное, но лучшего пока не нашел и свое писать времени нет. Для некоторых вещей приходится просто переопределять OR-методы у себя в моделях.
              • +1
                Правда, не на github, но, думаю, все равно пригодятся хабралюдям.

                BWToolkit — суперудобный кит с контролами.
                www.brandonwalkin.com/bwtoolkit/
                • 0
                  Да, BWToolkit – замечательнейшая вещь!
                • 0
                  • 0
                    Иллюстрации прокисли =( может быть перезалить?
                    • +1
                      бл****ий хостер похренил все acl'ы в ФС, и некоторые домены залипли. Фиксед.

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