Pull to refresh

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

Reading time 5 min
Views 3.2K

В последнее время у меня собралось много отмеченных репозиториев на 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), но о них как-то в другой раз.
Tags:
Hubs:
+42
Comments 15
Comments Comments 15

Articles