{"id":1596,"url":"https://github.com/RestKit/RestKit","last_synced_at":"2025-08-02T04:32:16.403Z","repository":{"id":804786,"uuid":"508845","full_name":"RestKit/RestKit","owner":"RestKit","description":"RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X","archived":false,"fork":false,"pushed_at":"2022-08-27T03:57:20.000Z","size":43492,"stargazers_count":10150,"open_issues_count":366,"forks_count":2096,"subscribers_count":412,"default_branch":"development","last_synced_at":"2025-07-31T17:01:48.799Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RestKit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-02-09T01:14:06.000Z","updated_at":"2025-07-29T22:18:35.000Z","dependencies_parsed_at":"2022-07-05T16:02:20.555Z","dependency_job_id":null,"html_url":"https://github.com/RestKit/RestKit","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/RestKit/RestKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RestKit%2FRestKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RestKit%2FRestKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RestKit%2FRestKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RestKit%2FRestKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RestKit","download_url":"https://codeload.github.com/RestKit/RestKit/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RestKit%2FRestKit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268327420,"owners_count":24232653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:15:50.923Z","updated_at":"2025-08-02T04:32:14.676Z","avatar_url":"https://github.com/RestKit.png","language":"Objective-C","readme":"# RestKit\n\n[![Build Status](http://img.shields.io/travis/RestKit/RestKit/development.svg?style=flat)](https://travis-ci.org/RestKit/RestKit)\n[![Pod Version](http://img.shields.io/cocoapods/v/RestKit.svg?style=flat)](http://cocoadocs.org/docsets/RestKit/)\n[![Pod Platform](http://img.shields.io/cocoapods/p/RestKit.svg?style=flat)](http://cocoadocs.org/docsets/RestKit/)\n[![Pod License](http://img.shields.io/cocoapods/l/RestKit.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![Visit our IRC channel](http://img.shields.io/badge/IRC-%23RestKit-green.svg?style=flat)](https://kiwiirc.com/client/irc.freenode.net/?nick=rkuser|?\u0026theme=basic#RestKit)\n\nRestKit is a modern Objective-C framework for implementing RESTful web services clients on iOS and Mac OS X. It provides a powerful [object mapping](https://github.com/RestKit/RestKit/wiki/Object-mapping) engine that seamlessly integrates with [Core Data](http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html) and a simple set of networking primitives for mapping HTTP requests and responses built on top of [AFNetworking](https://github.com/AFNetworking/AFNetworking). It has an elegant, carefully designed set of APIs that make accessing and modeling RESTful resources feel almost magical. For example, here's how to access the Twitter public timeline and turn the JSON contents into an array of Tweet objects:\n\n```  objective-c\n@interface RKTweet : NSObject\n@property (nonatomic, copy) NSNumber *userID;\n@property (nonatomic, copy) NSString *username;\n@property (nonatomic, copy) NSString *text;\n@end\n\nRKObjectMapping *mapping = [RKObjectMapping mappingForClass:[RKTweet class]];\n[mapping addAttributeMappingsFromDictionary:@{\n    @\"user.name\":   @\"username\",\n    @\"user.id\":     @\"userID\",\n    @\"text\":        @\"text\"\n}];\n\nRKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:nil keyPath:nil statusCodes:nil];\nNSURL *url = [NSURL URLWithString:@\"http://api.twitter.com/1/statuses/public_timeline.json\"];\nNSURLRequest *request = [NSURLRequest requestWithURL:url];\nRKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];\n[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {\n    NSLog(@\"The public timeline Tweets: %@\", [result array]);\n} failure:nil];\n[operation start];\n```\n\n## Getting Started\n\n- [Download RestKit](https://github.com/RestKit/RestKit/releases) and play with the [examples](https://github.com/RestKit/RestKit/tree/development/Examples) for iPhone and Mac OS X\n- First time with RestKit? Read the [\"Overview\"](#overview) section below and then check out the [\"Getting Acquainted with RestKit\"](https://github.com/RestKit/RKGist/blob/master/TUTORIAL.md) tutorial and [Object Mapping Reference](https://github.com/RestKit/RestKit/wiki/Object-mapping) documents in the wiki to jump right in.\n- Upgrading from RestKit 0.9.x or 0.10.x? Read the [\"Upgrading to RestKit 0.20.x\"](https://github.com/RestKit/RestKit/wiki/Upgrading-from-v0.10.x-to-v0.20.0) guide in the wiki\n- Adding RestKit to an existing [AFNetworking](https://github.com/AFNetworking/AFNetworking) application? Read the [AFNetworking Integration](https://github.com/RestKit/RestKit/wiki/AFNetworking-Integration) document to learn details about how the frameworks fit together.\n- Review the [source code API documentation](http://cocoadocs.org/docsets/RestKit/) for a detailed look at the classes and API's in RestKit. A great place to start is [RKObjectManager](http://restkit.org/api/latest/Classes/RKObjectManager.html).\n- Still need some help? Ask questions on [Stack Overflow](http://stackoverflow.com/questions/tagged/restkit) or the [mailing list](http://groups.google.com/group/restkit), ping us on [Twitter](http://twitter.com/RestKit) or chat with us on [IRC](https://kiwiirc.com/client/irc.freenode.net/?nick=rkuser|?\u0026theme=basic#RestKit).\n\n## Overview\n\nRestKit is designed to be modular and each module strives to maintain a minimal set of dependencies across the framework and with the host platform. At the core of library sits the object mapping engine, which is responsible for transforming objects between representations (such as JSON/XML \u003c-\u003e local domain objects).\n\n### Object Mapping Fundamentals\n\nThe object mapping engine is built on top of the [Key-Value Coding](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html) (KVC) informal protocol that is foundational to numerous Cocoa technologies such as key-value observing, bindings, and Core Data. Object mappings are expressed as pairs of KVC key paths that specify the source and destination attributes or relationships that are to be transformed.\n\nRestKit leverages the highly dynamic Objective-C runtime to infer the developers desired intent by examining the type of the source and destination properties and performing appropriate type transformations. For example, given a source key path of `created_at` that identifies a string within a parsed JSON document and a destination key path of `creationDate` that identifies an `NSDate` property on a target object, RestKit will transform the date from a string into an `NSDate` using an `NSDateFormatter`. Numerous other transformations are provided out of the box and the engine is pluggable to allow the developer to define new transformations or replace an existing transformation with a new implementation.\n\nThe mapper fully supports both simple attribute as well as relationship mappings in which nested to-one or to-many child objects are mapped recursively. Through relationship mappings, one object mapping can be added to another to compose aggregate mappings that are capable of processing arbitrarily complex source documents.\n\nObject mapping is a deep topic and is explored in exhaustive detail in the [Object Mapping Guide](https://github.com/RestKit/RestKit/wiki/Object-mapping) on the wiki.\n\n### API Quickstart\n\nRestKit is broken into several modules that cleanly separate the mapping engine from the HTTP and Core Data integrations to provide maximum flexibility. Key classes in each module are highlighted below and each module is hyperlinked to the README.md contained within the source code.\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" style=\"text-align:center;\"\u003e\u003ca href=\"https://github.com/RestKit/RestKit/wiki/Object-mapping\"\u003eObject Mapping\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKObjectMapping.html\"\u003eRKObjectMapping\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eEncapsulates configuration for transforming object representations as expressed by key-value coding keypaths.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKAttributeMapping.html\"\u003eRKAttributeMapping\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eSpecifies a desired transformation between attributes within an object or entity mapping in terms of a source and destination key path.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKRelationshipMapping.html\"\u003eRKRelationshipMapping\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eSpecifies a desired mapping of a nested to-one or to-many child objects in terms of a source and destination key path and an \u003ctt\u003eRKObjectMapping\u003c/tt\u003e with which to map the attributes of the child object.\u003c/td\u003e\n  \u003c/tr\u003e  \n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKDynamicMapping.html\"\u003eRKDynamicMapping\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eSpecifies a flexible mapping in which the decision about which \u003ctt\u003eRKObjectMapping\u003c/tt\u003e is to be used to process a given document is deferred to run time.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKMapperOperation.html\"\u003eRKMapperOperation\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides an interface for mapping a deserialized document into a set of local domain objects.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKMappingOperation.html\"\u003eRKMappingOperation\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eAn \u003ctt\u003eNSOperation\u003c/tt\u003e that performs a mapping between object representations using an \u003ctt\u003eRKObjectMapping\u003c/tt\u003e.\u003c/td\u003e\n  \u003c/tr\u003e  \n  \u003ctr\u003e\u003cth colspan=\"2\" style=\"text-align:center;\"\u003e\u003ca href=\"Code/Network/README.md\"\u003eNetworking\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKRequestDescriptor.html\"\u003eRKRequestDescriptor\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eDescribes a request that can be sent from the application to a remote web application for a given object type.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKResponseDescriptor.html\"\u003eRKResponseDescriptor\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eDescribes an object mappable response that may be returned from a remote web application in terms of an object mapping, a key path, a \u003ca href=\"http://cocoadocs.org/docsets/SOCKit/\"\u003eSOCKit pattern\u003c/a\u003e for matching the URL, and a set of status codes that define the circumstances in which the mapping is appropriate for a given response.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKObjectParameterization.html\"\u003eRKObjectParameterization\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003ePerforms mapping of a given object into an \u003ctt\u003eNSDictionary\u003c/tt\u003e representation suitable for use as the parameters of an HTTP request.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKObjectRequestOperation.html\"\u003eRKObjectRequestOperation\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eAn \u003ctt\u003eNSOperation\u003c/tt\u003e that sends an HTTP request and performs object mapping on the parsed response body using the configurations expressed in a set of \u003ctt\u003eRKResponseDescriptor\u003c/tt\u003e objects.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKResponseMapper.html\"\u003eRKResponseMapperOperation\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eAn \u003ctt\u003eNSOperation\u003c/tt\u003e that provides support for object mapping an \u003ctt\u003eNSHTTPURLResponse\u003c/tt\u003e using a set of \u003ctt\u003eRKResponseDescriptor\u003c/tt\u003e objects.\u003c/td\u003e\n  \u003c/tr\u003e  \n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKObjectManager.html\"\u003eRKObjectManager\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eCaptures the common patterns for communicating with a RESTful web application over HTTP using object mapping including:\n    \t\u003cul\u003e\n    \t\t\u003cli\u003eCentralizing \u003ctt\u003eRKRequestDescriptor\u003c/tt\u003e and \u003ctt\u003eRKResponseDescriptor\u003c/tt\u003e configurations\u003c/li\u003e\n    \t\t\u003cli\u003eDescribing URL configuration with an \u003ctt\u003eRKRouter\u003c/tt\u003e\u003c/li\u003e\n    \t\t\u003cli\u003eSerializing objects and sending requests with the serialized representations\u003c/li\u003e\n    \t\t\u003cli\u003eSending requests to load remote resources and object mapping the response bodies\u003c/li\u003e\n    \t\t\u003cli\u003eBuilding multi-part form requests for objects\u003c/li\u003e\n    \t\u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKRouter.html\"\u003eRKRouter\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eGenerates \u003ctt\u003eNSURL\u003c/tt\u003e objects from a base URL and a set of \u003ctt\u003eRKRoute\u003c/tt\u003e objects describing relative paths used by the application.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKRoute.html\"\u003eRKRoute\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eDescribes a single relative path for a given object type and HTTP method, the relationship of an object, or a symbolic name.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" style=\"text-align:center;\"\u003e\u003ca href=\"Code/CoreData/README.md\"\u003eCore Data\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKManagedObjectStore.html\"\u003eRKManagedObjectStore\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eEncapsulates Core Data configuration including an \u003ctt\u003eNSManagedObjectModel\u003c/tt\u003e, a \u003ctt\u003eNSPersistentStoreCoordinator\u003c/tt\u003e, and a pair of \u003ctt\u003eNSManagedObjectContext\u003c/tt\u003e objects.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKEntityMapping.html\"\u003eRKEntityMapping\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eModels a mapping for transforming an object representation into a \u003ctt\u003eNSManagedObject\u003c/tt\u003e instance for a given \u003ctt\u003eNSEntityDescription\u003c/tt\u003e.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKConnectionDescription.html\"\u003eRKConnectionDescription\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eDescribes a mapping for establishing a relationship between Core Data entities using foreign key attributes.\u003c/td\u003e\n  \u003c/tr\u003e  \n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html\"\u003eRKManagedObjectRequestOperation\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eAn \u003ctt\u003eNSOperation\u003c/tt\u003e subclass that sends an HTTP request and performs object mapping on the parsed response body to create \u003ctt\u003eNSManagedObject\u003c/tt\u003e instances, establishes relationships between objects using \u003ctt\u003eRKConnectionDescription\u003c/tt\u003e objects, and cleans up orphaned objects that no longer exist in the remote backend system.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKManagedObjectImporter.html\"\u003eRKManagedObjectImporter\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides support for bulk mapping of managed objects using \u003ctt\u003eRKEntityMapping\u003c/tt\u003e objects for two use cases:\n    \t\u003col\u003e\n    \t\t\u003cli\u003eBulk importing of parsed documents into an \u003ctt\u003eNSPersistentStore.\u003c/tt\u003e\u003c/li\u003e\n    \t\t\u003cli\u003eGenerating a \u003ca href=\"Docs for database seeding\"\u003eseed database\u003c/a\u003e for initializing an application's Core Data store with an initial data set upon installation.\u003c/li\u003e\n    \t\u003c/ol\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" style=\"text-align:center;\"\u003e\u003ca href=\"Code/Search/README.md\"\u003eSearch\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKSearchIndexer.html\"\u003eRKSearchIndexer\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides support for generating a full-text searchable index within Core Data for string attributes of entities within an application.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKSearchPredicate.html\"\u003eRKSearchPredicate\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eGenerates an \u003ctt\u003eNSCompoundPredicate\u003c/tt\u003e given a string of text that will search an index built with an \u003ctt\u003eRKSearchIndexer\u003c/tt\u003e across any indexed entity.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" style=\"text-align:center;\"\u003e\u003ca href=\"Code/Testing/README.md\"\u003eTesting\u003c/a\u003e\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKMappingTest.html\"\u003eRKMappingTest\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides support for unit testing object mapping configurations given a parsed document and an object or entity mapping. Expectations are configured in terms of expected key path mappings and/or expected transformation results.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKTestFixture.html\"\u003eRKTestFixture\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides an interface for easily generating test fixture data for unit testing.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"http://restkit.org/api/latest/Classes/RKTestFactory.html\"\u003eRKTestFactory\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003eProvides support for creating objects for use in testing.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n###\n\n## Examples\n\n### Object Request\n``` objective-c\n// GET a single Article from /articles/1234.json and map it into an object\n// JSON looks like {\"article\": {\"title\": \"My Article\", \"author\": \"Blake\", \"body\": \"Very cool!!\"}}\nRKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Article class]];\n[mapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx\nRKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:@\"/articles/:articleID\" keyPath:@\"article\" statusCodes:statusCodes];\n\nNSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@\"http://restkit.org/articles/1234.json\"]];\nRKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];\n[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {\n    Article *article = [result firstObject];\n\tNSLog(@\"Mapped the article: %@\", article);\n} failure:^(RKObjectRequestOperation *operation, NSError *error) {\n\tNSLog(@\"Failed with error: %@\", [error localizedDescription]);\n}];\n[operation start];\n```\n\n### Managed Object Request\n``` objective-c\n// GET an Article and its Categories from /articles/888.json and map into Core Data entities\n// JSON looks like {\"article\": {\"title\": \"My Article\", \"author\": \"Blake\", \"body\": \"Very cool!!\", \"categories\": [{\"id\": 1, \"name\": \"Core Data\"]}\nNSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];\nRKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];\nNSError *error = nil;\nBOOL success = RKEnsureDirectoryExistsAtPath(RKApplicationDataDirectory(), \u0026error);\nif (! success) {\n    RKLogError(@\"Failed to create Application Data Directory at path '%@': %@\", RKApplicationDataDirectory(), error);\n}\nNSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@\"Store.sqlite\"];\nNSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:\u0026error];\nif (! persistentStore) {\n    RKLogError(@\"Failed adding persistent store at path '%@': %@\", path, error);\n}\n[managedObjectStore createManagedObjectContexts];\n\nRKEntityMapping *categoryMapping = [RKEntityMapping mappingForEntityForName:@\"Category\" inManagedObjectStore:managedObjectStore];\n[categoryMapping addAttributeMappingsFromDictionary:@{ \"id\": \"categoryID\", @\"name\": \"name\" }];\nRKEntityMapping *articleMapping = [RKEntityMapping mappingForEntityForName:@\"Article\" inManagedObjectStore:managedObjectStore];\n[articleMapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\n[articleMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@\"categories\" toKeyPath:@\"categories\" withMapping:categoryMapping]];\n\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx\nRKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:articleMapping method:RKRequestMethodAny pathPattern:@\"/articles/:articleID\" keyPath:@\"article\" statusCodes:statusCodes];\n\nNSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@\"http://restkit.org/articles/888.json\"]];\nRKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];\noperation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext;\noperation.managedObjectCache = managedObjectStore.managedObjectCache;\n[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {\n  Article *article = [result firstObject];\n\tNSLog(@\"Mapped the article: %@\", article);\n\tNSLog(@\"Mapped the category: %@\", [article.categories anyObject]);\n} failure:^(RKObjectRequestOperation *operation, NSError *error) {\n\tNSLog(@\"Failed with error: %@\", [error localizedDescription]);\n}];\nNSOperationQueue *operationQueue = [NSOperationQueue new];\n[operationQueue addOperation:operation];\n```\n\n### Map a Client Error Response to an NSError\n``` objective-c\n// GET /articles/error.json returns a 422 (Unprocessable Entity)\n// JSON looks like {\"errors\": \"Some Error Has Occurred\"}\n\n// You can map errors to any class, but `RKErrorMessage` is included for free\nRKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];\n// The entire value at the source key path containing the errors maps to the message\n[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@\"errorMessage\"]];\n\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError);\n// Any response in the 4xx status code range with an \"errors\" key path uses this mapping\nRKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping method:RKRequestMethodAny pathPattern:nil keyPath:@\"errors\" statusCodes:statusCodes];\n\nNSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@\"http://restkit.org/articles/error.json\"]];\nRKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[errorDescriptor]];\n[operation setCompletionBlockWithSuccess:nil failure:^(RKObjectRequestOperation *operation, NSError *error) {\n    // The `description` method of the class the error is mapped to is used to construct the value of the localizedDescription\n\tNSLog(@\"Loaded this error: %@\", [error localizedDescription]);\n\n    // You can access the model object used to construct the `NSError` via the `userInfo`\n    RKErrorMessage *errorMessage =  [[error.userInfo objectForKey:RKObjectMapperErrorObjectsKey] firstObject];\n}];\n```\n\n### Centralize Configuration in an Object Manager\n``` objective-c\n// Set up Article and Error Response Descriptors\n// Successful JSON looks like {\"article\": {\"title\": \"My Article\", \"author\": \"Blake\", \"body\": \"Very cool!!\"}}\nRKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Article class]];\n[mapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx\nRKResponseDescriptor *articleDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:@\"/articles\" keyPath:@\"article\" statusCodes:statusCodes];\n\n// Error JSON looks like {\"errors\": \"Some Error Has Occurred\"}\nRKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];\n// The entire value at the source key path containing the errors maps to the message\n[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@\"errorMessage\"]];\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError);\n// Any response in the 4xx status code range with an \"errors\" key path uses this mapping\nRKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping method:RKRequestMethodAny pathPattern:nil keyPath:@\"errors\" statusCodes:statusCodes];\n\n// Add our descriptors to the manager\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n[manager addResponseDescriptorsFromArray:@[ articleDescriptor, errorDescriptor ]];\n\n[manager getObjectsAtPath:@\"/articles/555.json\" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {\n\t// Handled with articleDescriptor\n} failure:^(RKObjectRequestOperation *operation, NSError *error) {\n\t// Transport error or server error handled by errorDescriptor\n}];\n```\n\n### Configure Core Data Integration with the Object Manager\n``` objective-c\nNSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];\nRKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];\nBOOL success = RKEnsureDirectoryExistsAtPath(RKApplicationDataDirectory(), \u0026error);\nif (! success) {\n    RKLogError(@\"Failed to create Application Data Directory at path '%@': %@\", RKApplicationDataDirectory(), error);\n}\nNSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@\"Store.sqlite\"];\nNSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:\u0026error];\nif (! persistentStore) {\n    RKLogError(@\"Failed adding persistent store at path '%@': %@\", path, error);\n}\n[managedObjectStore createManagedObjectContexts];\n\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\nmanager.managedObjectStore = managedObjectStore;\n```\n\n### Load a Collection of Objects at a Path\n``` objective-c\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n[manager getObjectsAtPath:@\"/articles\" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {\n} failure:^(RKObjectRequestOperation *operation, NSError *error) {\n}];\n```\n\n### Manage a Queue of Object Request Operations\n``` objective-c\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n\nNSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@\"http://restkit.org/articles/1234.json\"]];\nRKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];\n\n[manager enqueueObjectRequestOperation:operation];\n[manager cancelAllObjectRequestOperationsWithMethod:RKRequestMethodANY matchingPathPattern:@\"/articles/:articleID\\\\.json\"];\n```\n\n### POST, PATCH, and DELETE an Object\n``` objective-c\nRKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[Article class]];\n[responseMapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\nNSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx\nRKResponseDescriptor *articleDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping method:RKRequestMethodAny pathPattern:@\"/articles\" keyPath:@\"article\" statusCodes:statusCodes];\n\nRKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary\n[requestMapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\n\n// For any object of class Article, serialize into an NSMutableDictionary using the given mapping and nest\n// under the 'article' key path\nRKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Article class] rootKeyPath:@\"article\" method:RKRequestMethodAny];\n\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n[manager addRequestDescriptor:requestDescriptor];\n[manager addResponseDescriptor:articleDescriptor];\n\nArticle *article = [Article new];\narticle.title = @\"Introduction to RestKit\";\narticle.body = @\"This is some text.\";\narticle.author = @\"Blake\";\n\n// POST to create\n[manager postObject:article path:@\"/articles\" parameters:nil success:nil failure:nil];\n\n// PATCH to update\narticle.body = @\"New Body\";\n[manager patchObject:article path:@\"/articles/1234\" parameters:nil success:nil failure:nil];\n\n// DELETE to destroy\n[manager deleteObject:article path:@\"/articles/1234\" parameters:nil success:nil failure:nil];\n```\n\n### Configure Logging\n``` objective-c\n// Log all HTTP traffic with request and response bodies\nRKLogConfigureByName(\"RestKit/Network\", RKLogLevelTrace);\n\n// Log debugging info about Core Data\nRKLogConfigureByName(\"RestKit/CoreData\", RKLogLevelDebug);\n\n// Raise logging for a block\nRKLogWithLevelWhileExecutingBlock(RKLogLevelTrace, ^{\n    // Do something that generates logs\n});\n```\n\n### Configure Routing\n``` objective-c\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n\n// Class Routing\n[manager.router.routeSet addRoute:[RKRoute routeWithClass:[GGSegment class] pathPattern:@\"/segments/:segmentID\\\\.json\" method:RKRequestMethodGET]];\n\n// Relationship Routing\n[manager.router.routeSet addRoute:[RKRoute routeWithRelationshipName:@\"amenities\" objectClass:[GGAirport class] pathPattern:@\"/airports/:airportID/amenities.json\" method:RKRequestMethodGET]];\n\n// Named Routes\n[manager.router.routeSet addRoute:[RKRoute routeWithName:@\"thumbs_down_review\" resourcePathPattern:@\"/reviews/:reviewID/thumbs_down\" method:RKRequestMethodPOST]];\n```\n\n### POST an Object with a File Attachment\n``` objective-c\nArticle *article = [Article new];\nUIImage *image = [UIImage imageNamed:@\"some_image.png\"];\n\n// Serialize the Article attributes then attach a file\nNSMutableURLRequest *request = [[RKObjectManager sharedManager] multipartFormRequestWithObject:article method:RKRequestMethodPOST path:nil parameters:nil constructingBodyWithBlock:^(id\u003cAFMultipartFormData\u003e formData) {\n    [formData appendPartWithFileData:UIImagePNGRepresentation(image)\n                                name:@\"article[image]\"\n                            fileName:@\"photo.png\"\n                            mimeType:@\"image/png\"];\n}];\n\nRKObjectRequestOperation *operation = [[RKObjectManager sharedManager] objectRequestOperationWithRequest:request success:nil failure:nil];\n[[RKObjectManager sharedManager] enqueueObjectRequestOperation:operation]; // NOTE: Must be enqueued rather than started\n```\n\n### Enqueue a Batch of Object Request Operations\n``` objective-c\n\nRKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@\"http://restkit.org\"]];\n\nAirport *jfk = [Airport new];\njfk.code = @\"jfk\";\nAirport *lga = [Airport new];\nlga.code = @\"lga\";\nAirport *rdu = [Airport new];\nrdu.code = @\"rdu\";\n\n// Enqueue a GET for '/airports/jfk/weather', '/airports/lga/weather', '/airports/rdu/weather'\nRKRoute *route = [RKRoute routeWithName:@\"airport_weather\" resourcePathPattern:@\"/airports/:code/weather\" method:RKRequestMethodGET];\n\n[manager enqueueBatchOfObjectRequestOperationsWithRoute:route\n                                                objects:@[ jfk, lga, rdu]\n                                               progress:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {\n                                                   NSLog(@\"Finished %d operations\", numberOfFinishedOperations);\n                                               } completion:^ (NSArray *operations) {\n                                                   NSLog(@\"All Weather Reports Loaded!\");\n                                               }];\n```\n\n### Generate a Seed Database\n``` objective-c\nNSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];\nRKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];\nNSError *error = nil;\nBOOL success = RKEnsureDirectoryExistsAtPath(RKApplicationDataDirectory(), \u0026error);\nif (! success) {\n    RKLogError(@\"Failed to create Application Data Directory at path '%@': %@\", RKApplicationDataDirectory(), error);\n}\nNSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@\"Store.sqlite\"];\nNSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:\u0026error];\nif (! persistentStore) {\n    RKLogError(@\"Failed adding persistent store at path '%@': %@\", path, error);\n}\n[managedObjectStore createManagedObjectContexts];\n\nRKEntityMapping *articleMapping = [RKEntityMapping mappingForEntityForName:@\"Article\" inManagedObjectStore:managedObjectStore];\n[articleMapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\n\nNSString *seedPath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@\"MySeedDatabase.sqlite\"];\nRKManagedObjectImporter *importer = [[RKManagedObjectImporter alloc] initWithManagedObjectModel:managedObjectStore.managedObjectModel storePath:seedPath];\n\n// Import the files \"articles.json\" from the Main Bundle using our RKEntityMapping\n// JSON looks like {\"articles\": [ {\"title\": \"Article 1\", \"body\": \"Text\", \"author\": \"Blake\" ]}\nNSError *error;\nNSBundle *mainBundle = [NSBundle mainBundle];\n[importer importObjectsFromItemAtPath:[mainBundle pathForResource:@\"articles\" ofType:@\"json\"]\n                          withMapping:articleMapping\n                              keyPath:@\"articles\"\n                                error:\u0026error];\n\nBOOL success = [importer finishImporting:\u0026error];\nif (success) {\n\t[importer logSeedingInfo];\n}\n```\n\n### Index and Search an Entity\n``` objective-c\nNSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];\nRKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];\nNSError *error = nil;\nBOOL success = RKEnsureDirectoryExistsAtPath(RKApplicationDataDirectory(), \u0026error);\nif (! success) {\n    RKLogError(@\"Failed to create Application Data Directory at path '%@': %@\", RKApplicationDataDirectory(), error);\n}\nNSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@\"Store.sqlite\"];\nNSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:\u0026error];\nif (! persistentStore) {\n    RKLogError(@\"Failed adding persistent store at path '%@': %@\", path, error);\n}\n[managedObjectStore createManagedObjectContexts];\n[managedObjectStore addSearchIndexingToEntityForName:@\"Article\" onAttributes:@[ @\"title\", @\"body\" ]];\n[managedObjectStore addInMemoryPersistentStore:nil];\n[managedObjectStore createManagedObjectContexts];\n[managedObjectStore startIndexingPersistentStoreManagedObjectContext];\n\nArticle *article1 = [NSEntityDescription insertNewObjectForEntityForName:@\"Article\" inManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext];\narticle1.title = @\"First Article\";\narticle1.body = \"This should match search\";\n\nArticle *article2 = [NSEntityDescription insertNewObjectForEntityForName:@\"Article\" inManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext];\narticle2.title = @\"Second Article\";\narticle2.body = \"Does not\";\n\nBOOL success = [managedObjectStore.mainQueueManagedObjectContext saveToPersistentStore:nil];\n\nRKSearchPredicate *predicate = [RKSearchPredicate searchPredicateWithText:@\"Match\" type:NSAndPredicateType];\nNSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@\"Article\"];\nfetchRequest.predicate = predicate;\n\n// Contains article1 due to body text containing 'match'\nNSArray *matches = [managedObjectStore.mainQueueManagedObjectContext executeFetchRequest:fetchRequest error:nil];\nNSLog(@\"Found the matching articles: %@\", matches);\n```\n\n### Unit Test a Mapping\n``` objective-c\n// JSON looks like {\"article\": {\"title\": \"My Article\", \"author\": \"Blake\", \"body\": \"Very cool!!\"}}\nRKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Article class]];\n[mapping addAttributeMappingsFromArray:@[@\"title\", @\"author\", @\"body\"]];\n\nNSDictionary *article = @{ @\"article\": @{ @\"title\": @\"My Title\", @\"body\": @\"The article body\", @\"author\": @\"Blake\" } };\nRKMappingTest *mappingTest = [[RKMappingTest alloc] initWithMapping:mapping sourceObject:article destinationObject:nil];\n\n[mappingTest expectMappingFromKeyPath:@\"title\" toKeyPath:@\"title\" value:@\"My Title\"];\n[mappingTest performMapping];\n[mappingTest verify];\n```\n\n## Requirements\n\nRestKit requires [iOS 8.0](https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW1) and above or [Mac OS X 10.9](https://developer.apple.com/library/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_9.html#//apple_ref/doc/uid/TP40013207-CH100) and above.\n\nSeveral third-party open source libraries are used within RestKit, including:\n\n1. [AFNetworking](https://github.com/AFNetworking/AFNetworking) - Networking Support\n2. [LibComponentLogging](http://0xc0.de/LibComponentLogging) - Logging Support\n3. [SOCKit](https://github.com/NimbusKit/sockit) - String \u003c-\u003e Object Coding\n4. [iso8601parser](http://boredzo.org/iso8601parser/) - Support for parsing and generating ISO-8601 dates\n\nThe following Cocoa frameworks must be linked into the application target for proper compilation:\n\n1. **CFNetwork.framework** on iOS\n1. **CoreData.framework**\n1. **Security.framework**\n1. **MobileCoreServices.framework** on iOS or **CoreServices.framework** on OS X\n\nAnd the following linker flags must be set:\n\n1. **-ObjC**\n1. **-all_load**\n\n### ARC\n\nAs of [version 0.20.0](https://github.com/RestKit/RestKit/wiki/Restkit-0.20.0), RestKit has migrated the entire codebase to ARC.\n\nIf you are including the RestKit sources directly into a project that does not yet use [Automatic Reference Counting](http://clang.llvm.org/docs/AutomaticReferenceCounting.html), you will need to set the `-fobjc-arc` compiler flag on all of the RestKit source files. To do this in Xcode, go to your active target and select the \"Build Phases\" tab. Now select all RestKit source files, press Enter, insert `-fobjc-arc` and then \"Done\" to enable ARC for RestKit.\n\n### Serialization Formats\n\nRestKit provides a pluggable interface for handling arbitrary serialization formats via the [`RKSerialization`](http://restkit.org/api/latest/Classes/RKSerialization.html) protocol and the [`RKMIMETypeSerialization`](http://restkit.org/api/latest/Classes/RKMIMETypeSerialization.html) class. Out of the box, RestKit supports handling the [JSON](http://www.json.org/) format for serializing and deserializing object representations via the [`NSJSONSerialization`](http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html) class.\n\n#### Additional Serializations\n\nSupport for additional formats and alternate serialization backends is provided via external modules that can be added to the project. Currently the following serialization implementations are available for use:\n\n* JSONKit\n* SBJSON\n* YAJL\n* NextiveJson\n* XMLReader + XMLWriter\n\n## Installation\n\nThe recommended approach for installing RestKit is via the [CocoaPods](http://cocoapods.org/) package manager, as it provides flexible dependency management and dead simple installation. For best results, it is recommended that you install via CocoaPods **\u003e= 0.19.1** using Git **\u003e= 1.8.0** installed via Homebrew.\n\n### via CocoaPods\n\nInstall CocoaPods if not already available:\n\n``` bash\n$ [sudo] gem install cocoapods\n$ pod setup\n```\n\nChange to the directory of your Xcode project, and Create and Edit your Podfile and add RestKit:\n\n``` bash\n$ cd /path/to/MyProject\n$ touch Podfile\n$ edit Podfile\ntarget \"YOUR PROJECT\" do\n\tplatform :ios, '7.0'\n\t# Or platform :osx, '10.7'\n\tpod 'RestKit', '~\u003e 0.24.0'\nend\n# Testing and Search are optional components\npod 'RestKit/Testing', '~\u003e 0.24.0'\npod 'RestKit/Search',  '~\u003e 0.24.0'\n```\n\nInstall into your project:\n\n``` bash\n$ pod install\n```\n\nOpen your project in Xcode from the .xcworkspace file (not the usual project file)\n\n``` bash\n$ open MyProject.xcworkspace\n```\n\nPlease note that if your installation fails, it may be because you are installing with a version of Git lower than CocoaPods is expecting. Please ensure that you are running Git **\u003e= 1.8.0** by executing `git --version`. You can get a full picture of the installation details by executing `pod install --verbose`.\n\n### From a Release Package or as a Git submodule\n\nDetailed installation instructions are available in the [Visual Install Guide](https://github.com/RestKit/RestKit/wiki/Installing-RestKit-v0.20.x-as-a-Git-Submodule) on the Wiki.\n\n## Using RestKit in a Swift Project\n\nInstall RestKit using one of the above methods. Then add `@import RestKit;` (if RestKit is built as a dynamic framework) or `#import \u003cRestKit/RestKit.h\u003e` (if RestKit is built as a static library) into the bridging header for your Swift project. To enable the Core Data functionality in RestKit, add `@import CoreData;` into your bridging header _before_ you import RestKit.\n\n## License\n\nRestKit is licensed under the terms of the [Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). Please see the [LICENSE](LICENSE) file for full details.\n\n## Credits\n\nRestKit is brought to you by [Blake Watters](http://twitter.com/blakewatters) and the RestKit team.\n\nSupport is provided by the following organizations:\n\n* [GateGuru](http://www.gateguruapp.com/)\n* [Two Toasters](http://www.twotoasters.com/)\n","funding_links":[],"categories":["Networking","Objective-C","Objective-C  Stars 1000以内排名整理","etc","iOS","**Index**","Network"],"sub_categories":["Video","Other free courses","RestKit","First, the gold standard libraries. The essentials --- You **NEED** to know about these !! You're likely to include a few of these in your own iOS projects"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRestKit%2FRestKit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRestKit%2FRestKit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRestKit%2FRestKit/lists"}