The perfect accessory for Mantle and AFNetworking.

Related tags

Networking Overcoat
Overview

Overcoat

Build Status Cocoapods Compatible Carthage compatible

We are finding maintainers, contact @sodastsai :)

Overcoat is a small but powerful library that makes creating REST clients simple and fun. It provides a simple API for making requests and mapping responses to model objects.

Overcoat is built on top of AFNetworking and uses Mantle to map responses into plain or Core Data model objects.

If you need to learn more about Mantle, we recommend these resources:

  1. Introduction.
  2. Better Web Clients with Mantle and AFNetworking.

Overcoat 4.0 is the latest major release and introduces several API-breaking changes to support envelop and error responses, Core Data serialization, and a new method to specify how to map responses to model objects.

If you are upgraded from Overcoat 3.x, check the migration note

Check who's using Overcoat here. You're welcome to add your project/app into this wiki page.

Requirements

Overcoat supports OS X 10.9+ and iOS 7.0+.

Installation

Using CocoaPods

Add the following to your Podfile and run $ pod install.

pod 'Overcoat', '~> 4.0.0-beta.1'

If you don't have CocoaPods installed or integrated into your project, you can learn how to do so here.

Using Carthage

Add the following to your Cartfile and run $ carthage update.

github "Overcoat/Overcoat" "4.0.0-beta.1"

If you don't have Carthage installed or integrated into your project, you can learn how to do so here.

Sample Code

Overcoat includes a simple Twitter client that shows some new features:

  • Mapping model classes to resource paths.
  • Specifying an error model class.
  • Core Data serialization.
  • Promises.

You can find the sample code here. Note that you'll need to run pod install to install all the dependencies.

Usage

Creating a Client Class

Overcoat provides 2 different classes to subclass when creating your own clients:

Class Usage
OVCHTTPSessionManager Using with NSURLSession and Mantle
OVCManagedHTTPSessionManager Using with NSURLSession, Mantle, and CoreData. This is also a subclass of OVCHTTPSessionManager

Both classes have identical APIs.

#import <Overcoat/Overcoat.h>

@interface TwitterClient : OVCHTTPSessionManager
...
@end

Specifying Model Classes

To specify how responses should be mapped to model classes you must override +modelClassesByResourcePath and return a dictionary mapping resource paths to model classes.

+ (NSDictionary *)modelClassesByResourcePath {
    return @{
        @"statuses/*": [Tweet class],
        @"users/*": [TwitterUser class],
        @"friends/ids.json": [UserIdentifierCollection class],
        @"followers/ids.json": [UserIdentifierCollection class]
    };
}

You don't need to specify the full path, and you can use * and ** to match any text or # to match only digits.

If you use * and #, they are strict path matchings, so the number of path components must be equal. The ** just matches any text and has no path components number limitation.

Match String Path Result
statuses/* statuses/user_timeline Matched
statuses/# statuses/user_timeline Missed (wrong type, the path component after statuses should be dights only)
statuses/* statuses/retweets/12345 Missed (wrong number of path components, there should be only one path component after statuses)
statuses/*/* statuses/retweets/12345 Matched
statuses/** statuses/retweets/12345 Matched
statuses/** statuses/retweets/12345/extra Matched (the number of path components doesn't matter)
statuses/retweets/* statuses/retweets/12345 Matched
statuses/retweets/# statuses/retweets/12345 Matched

Also you can specify different model classes by request method or response status code, like:

+ (NSDictionary *)modelClassesByResourcePath {
    return @{
        @"statuses/*": [Tweet class],
        @"users/*": @{
            @"PUT": [UpdatedTwitterUser class],  // For PUT request method,
            @"201": [NewCreatedTwitterUser class],  // For 201 response status code
            @"*": [TwitterUser class],  // For all other cases, as fallback
        },
        @"friends/ids.json": [UserIdentifierCollection class],
        @"followers/ids.json": [UserIdentifierCollection class]
    };
}

Check the documentation of OVCURLMatcherNode for further explaination.

Envelop and Error Responses

Different REST APIs have different ways of dealing with status and other metadata.

Pure REST services like Twitter use HTTP status codes and a specific JSON response to communicate errors; and HTTP headers for other metadata like rate limits. For these kind of services, you may want to override +errorModelClassesByResourcePath to map error responses into your own model.

+ (Class)errorModelClassesByResourcePath {
    return @{@"**": [TwitterErrorResponse class]};
}

Other services like App.net use an envelop response, which is a top level JSON response containing the data requested and additional metadata. For these kind of services, you must create your own OVCResponse subclass and specify the data key path.

@interface AppDotNetResponse : OVCResponse
...
@end

@implementation AppDotNetResponse
+ (NSString *)resultKeyPathForJSONDictionary:(NSDictionary *)JSONDictionary {
    return @"data";
}
@end

You can then specify which response class to use in your client by overriding +responseClassesByResourcePath.

+ (Class)responseClassesByResourcePath {
    return @{@"**": [AppDotNetResponse class]};
}

Core Data Serialization

To support CoreData serialization, you have to use Overcoat+CoreData extension if you're using CocoaPods

pod 'Overcoat+CoreData', '~> 4.0'  # Use this,

Or if you are using Carthage, you also have to add OvercoatCoreData.framework to your project.

And the main classes would be changed to OVCManaged prefixed one. (For instance, OVCHTTPSessionManager -> OVCManagedHTTPSessionManager)

If you initialize your client with a valid NSManagedObjectContext, it will automatically persist any model object(s) parsed from a response, if the model supports Core Data serialization (that is, implements MTLManagedObjectSerializing).

Note that, if you provide a context with an NSMainQueueConcurrencyType, a private context will be created to perform insertions in the background.

You can see Core Data Serialization in action in the provided example.

Making HTTP Requests

// Lookup Twitter users
NSDictionary *parameters = @{
    @"screen_name": @"gonzalezreal",
    @"user_id": @"42,3141592"
};

[twitterClient GET:@"users/lookup.json" parameters:parameters completion:^(OVCResponse *response, NSError *error) {
    NSArray *users = response.result; // This is an array of TwitterUser objects!
}];

Note that Overcoat automatically parses the JSON into model objects, that is, in this case response.result contains an array of TwitterUser objects.

ReactiveCocoa

From 2.0, Overcoat adds support for ReactiveCocoa.

To add ReactiveCocoa support, you have to use Overcoat+ReactiveCocoa podspec if you're using CocoaPods. Or if you're using Carthage, add OvercoatReactiveCocoa.framework

Now you can make HTTP requests and get cold signals to handle responses:

#import <OvercoatReactiveCocoa/OvercoatReactiveCocoa.h>
...
[[twitterClient rac_GET:@"users/lookup.json" parameters:parameters] subscribeNext:^(OVCResponse *response) {
    ...
} error:^(NSError *e) {
    ...
}];

PromiseKit

If you're looking for a better way to handle asynchronous calls but you're not ready to embrace ReactiveCocoa, you may try PromiseKit.

To add PromiseKit support, you have to use Overcoat+PromiseKit podspec if you're using CocoaPods. Or if you're using Carthage, add OvercoatPromiseKit.framework

Now you can get PMKPromise objects when making HTTP requests:

#import <OvercoatPromiseKit/OvercoatPromiseKit.h>
...
[twitterClient pmk_GET:@"users/lookup.json" parameters:parameters].then(^(OVCResponse *response) {
    return response.result;
});

Testing the library

In order to build the library and run unit tests, you will first need to install 2 tools: cocoapods and xctool

After you setup these tools (or you already have these tools), you could run tests via

make test

Check the Makefile to run other test target.

Contact

License

Overcoat is available under the MIT license. See LICENSE.md.

Comments
  • Adopt Overcoat to work with Mantle 2.0

    Adopt Overcoat to work with Mantle 2.0

    Following are changes:

    • Add OVERCOAT_USING_MANTLE_2 in OVCUtilities.h as macro used to separate codebase for different Mantle versions.
    • Separate CoreData support and Social framework support
      • In Mantle 2.0, CoreData support is not provided by default, it comes another submodule. (MTLManagedObjectAdapter)
      • Since Social.framework support is not a required module of Overcoat, it should be a submodule.
      • This is a backward incompatible change.

        To use CoreData, even if you are using Mantle 1.x, you should use pod 'Overcoat/CoreData' To use Social.framework, even if you are using Mantle 1.x, you should use pod 'Overcoat/Social'

    • Refine Xcode project used to run tests.
      • Integrate Overcoat with test targets by cocoapods. (Overcoat was integrated with test targets by Xcode's settings originally, but we should test for cocoapods)
      • You can use make test to run tests targeting on both iOS/OS X and Mantle 1.x/2.x
      • And since Social and CoreData have been separate as submodules, their tests are also separated.
      • Update OHHTTPStubs to 4.x
      • The Podfile attached is used to run tests. You could pass environment variables to decide what to install (for tests). For example, OS_TYPE=OSX MANTLE=2.0 pod install will setup cocoapods to install packages required for testing on OS X with Mantle 2.0
    opened by sodastsai 27
  • Remove objects that don't match from coredata

    Remove objects that don't match from coredata

    Pulling down a list of objects to save in core data, which works fine- except we want to purge any items no longer on the list. What's the best way to approach this?

    question 
    opened by ericlewis 11
  • Progress

    Progress

    Add new progress attribute from AFNetworking, because progressless methods marked as deprecated. Also, ReactiveCocoa version now send NSProgress object to Next on each data update.


    Please, merge it to master, thank you!

    opened by Pitometsu 10
  • Support for server error Mantle objects

    Support for server error Mantle objects

    When errorResultClass is supplied, Overcoat attempts to instantiate an error object from the response if errors are returned from AFNetworking.

    As discussed in #21

    opened by alleus 9
  • POST request serializer - wrong, or did I miss something?

    POST request serializer - wrong, or did I miss something?

    I'm trying out Overcoat, and things are pretty good so far, I stumbled across one problem, though. I was trying to send object with a POST request with JSON-encoded object, but my dictionary parameters (serialized via MTLJSONAdapter JSONDictionaryFromModel:) didn't look like JSON at all after being put inside HTTP body. It looked like www-form-encoded.

    I noticed requestSerializer for OVCClient instances is set to a AFHTTPRequestSerializer regardless whether it's GET or POST. Shouldn't it be a AFJSONRequestSerializer for POST by default? Or did I miss the "proper" way to do POST with Overcoat? I'm pretty new in here, so I'm not really sure.

    I.e. is it a bug or a feature? ;)

    opened by 3-n 8
  • Distinguishing PUT and GET responses corresponding to the same URL

    Distinguishing PUT and GET responses corresponding to the same URL

    Hi So I have a URL http://server/api/v1/users . This URL can be used to GET a list of user names or it can be used to PUT a list of users (the users are specified in the request body). This is quite common in RESTful services. The response to the GET and PUT requests are naturally different. How do I use Overcoat to distinguish between the GET and PUT response corresponding to the same URL ? Right now, Overcoat tries to map the PUT response to the object that I've specified in modelClassesByResourcePath for the GET query. Help please! thanks!

    enhancement 
    opened by priyarajagopal 7
  • Support errorModelClass for HTTP 2XX.

    Support errorModelClass for HTTP 2XX.

    I'm working with some web services that are setup to keep HTTP response codes limited to transport and leave the client response as part of the body. As such, I may get an HTTP 200 but with an error model. I'm not sure the best place to inject such support. Perhaps in OVCModelResponseSerializer in the event there's an error OR a serializationError?

    question 
    opened by dkpalmer 7
  • Server error response handling / serializing - feature

    Server error response handling / serializing - feature

    Hey gonzalezreal,

    So, don't really know if this is something that would be useful for a lot of people or not. With the backend I'm working with at my workplace we return an error object containing info about what went wrong with the request. I wasn't feeling very comfortable with the idea of having a hard coded list of possible errors in a overrided NSError.

    Soo, I made a fork that allows you to set a Error class on an OVClient object and then it will use that to serialize any error responses that are returned with a body.

    Is this something that you'd interested in having in the main repo? If so I'll submit a pull request from my fork.

    question 
    opened by callbacknull 7
  • Add acceptableContentTypes to OVCModelResponseSerializer?

    Add acceptableContentTypes to OVCModelResponseSerializer?

    I'm trying to add acceptableContentTypes to the jsonSerializer so that I can parse text/html as JSON, I tried to subclass OVCModelResponseSerializer and use that custom serializer as the response serializer but it doesn't seem to work. Can Overcoat handle this?

    opened by bsameh 6
  • Accessing result dictionary keys other than the key path

    Accessing result dictionary keys other than the key path

    Consider the following JSON response:

    {
        "data":
        {
            "access_token": "12345",
            "expires_in": 86400,
        },
        "meta" :
        {
            "other_important_things_we_need":
            {
            },
            "some_user_messages":
            [
            ]
        }
    }
    

    In our service response class, we simply write:

    + (NSString *)resultKeyPathForJSONDictionary:(NSDictionary *)JSONDictionary
    {
        return @"data";
    }
    

    Which works great for the access token class. However the other response data (under the key "meta" in this example) appears to be irretrievable.

    This could be solved many different ways. Ideally, Overcoat should be able to handle multiple response classes. To add to this thought, we should be able specify keys that will have a constant class associated with it, and obviously the class to go along with those keys.

    Worst case scenario: you could add an instance property to OVCResponse that would allow us to access the raw deserialized response dictionary. However this technically defeats the purpose of Overcoat (for keys other than "data"), but we at least don't lose that information. :)

    If this is currently possible (and I missed something), it certainly should be demonstrated on the GitHub page or demo project!

    enhancement question 
    opened by Janglinator 6
  • Adding a Wildcard URL Matcher

    Adding a Wildcard URL Matcher

    I am using a Hypermedia API adhering to the Siren specification. Every response should be the same object type. Therefore, I need an any URL wildcard for modelClassesByResourcePath. I have decided to use the ** identifier.

    URL Matcher 
    opened by groomsy 6
  • 3.2.2 not in Cocoapods

    3.2.2 not in Cocoapods

    Hi,

    The latest version in Cocoapods spec repo is 3.2.1. Can someone please do me a favour and push the 3.2.2 spec?

    Have tried using :git => 'https://github.com/Overcoat/Overcoat.git', :tag => '3.2.2' but it fails due to validation errors.

    Cheers, Gareth.

    opened by gredman 0
  • Include of non-modular header inside framework module 'Overcoat.OVCUtilities'

    Include of non-modular header inside framework module 'Overcoat.OVCUtilities'

    Getting build issue

    Hello @Overcoat, I’m using Overcoat v3.2.1 using CocoaPods. Overcoat is using Mantle v2.1.0 and AFNetworking v2.6.3. But Pod is unable to build Overcoat because of some errors saying Include of non-modular header inside framework module 'Overcoat.OVCResponse’ Include of non-modular header inside framework module 'Overcoat.OVCModelResponseSerializer’.

    I have created an issue on Mantle library with issue https://github.com/Mantle/Mantle/issues/810 and AFNetworking library with issue https://github.com/AFNetworking/AFNetworking/issues/4070

    I tried changing these settings in my main project:

    • Define Module to Yes/No.
    • Allow Non-modular Included in Framework Modules to Yes/No.
    • Enable Modules (C and Objective-C) to Yes/No. but no luck till now

    I tried deleting project.xcworkspace file, Pods directory and Podfile.lock and then run pod install again with updated module settings but no luck.

    Development Configuration

    • I’m using Xcode 9.0 and CocoaPods 1.3.1

    Could you please let me know what might be the cause of issue or I'm doing something wrong?

    Here are the screenshots I captured for you for better understanding of issue.

    mantleerror afnetworkingerror screen shot 2017-09-27 at 6 21 00 pm

    opened by mayur43s 0
  • Pagination

    Pagination

    Is there any pagination ability in Overcoat to handle cases like

    "root_model": {
        "count": 999,
        "models": [ /* . . . */ ],
        "next": "https://example.com/models?page=2",
        "previous": null,
    }
    
    opened by Pitometsu 0
  • Discussion: Reducing complexity and reducing required dependencies

    Discussion: Reducing complexity and reducing required dependencies

    I think a lot of the recent Xcode 8 Overcoat build pains ( see the heroic efforts of @Iyuna with #144 ) come from the fact that Overcoat adds nested dependencies to (potentially) unwanted frameworks -- each dependency adds its own build environment requirements, complexity, and just as importantly -- more build time.

    I imagine some people don't necessarily want Reactive Cocoa or Promise Kit linking into their projects. Others are only interested in Reactive Cocoa -- not Promise Kit, and some will want the reverse. But in general, adding the dependencies to the core Overcoat project seems add additional frustration for anyone that wants to consume Overcoat in it's purest form -- as a convenience framework for object-mapping AFNetworking responses with Mantle.

    I'm not exactly clear on the best way to implement a more modular Overcoat framework in the modern era of package management (CocoaPods, Carthage, eventually Swift PM). Ideally, whatever solution is one that more easily allows someone to opt-in to the accessories and their nested dependencies, but I think it's an important effort worthy of some time investment.

    Maybe the answer is really to have separate GitHub repositories (and thus separate frameworks) for each optional accessory?

    • Overcoat+PromiseKit
    • Overcoat+ReactiveCocoa
    • Overcoat+ThenKit --- Maybe @rodrigo-lima ?

    Thoughts from the community or @sodastsai ? Do you think splitting things up will add more hassle than it's worth?

    opened by grgcombs 1
  • PromiseKit 'Then' cannot be found

    PromiseKit 'Then' cannot be found

    I just updated to the latest, I'm in Objective-C, and used cocoa pods: pod 'Overcoat+PromiseKit', '4.0.0-beta.2'

    Changed the GET to pmk_GET, but get warnings go "Property 'then' cannot be in forward class object 'AnyPromise'

    opened by numerics 2
  • [Question] Can you please provide examples of Overcoat+PromiseKit using Swift ?

    [Question] Can you please provide examples of Overcoat+PromiseKit using Swift ?

    @sodastsai it would be great if you can provide examples in Swift for this great library. I would highly appreciate it. Thanks in advance!

    For instance, I was trying to convert this:

    `- (AnyPromise *)fetchTeamUsers {

    return [self GET:@"quickref/scoutlist" parameters:nil].then(^(OVCResponse *response) {
        return response.result;
    
    }).catch(^(NSError *error) {
        return [HTOTeamUserModel fetchCache];
    });
    

    }`

    into Swift but I'm so new to it that I'm lost :(

    opened by eliasturbay 1
Releases(3.0.0)
  • 3.0.0(Jul 15, 2015)

    3.0

    Summary of 3.0 release

    • Support Mantle 2.0
    • Use podspec to re-organize features. (Take CoreData and Social support apart from Core)
    • Separate CoreData classes (for example, OVCHTTPSessionManager -> OVCManagedHTTPSessionManager)

    Migrate from 2.x

    1. Mantle 2.x Support

    By default, Overcoat 3.x installs Mantle 2.x as dependency. If you still have to stick with Mantle 1.x, then besides adding Overcoat, you have to specify this explicitly by:

    pod 'Mantle', '~> 1.5'
    

    2. Podspec change

    The podspec has been changed, so you may have to change your Podfile into:

    • if you just use AFNetworking and Mantle but don't use CoreData, you don't have to change anything. (but the version number)
    pod 'Overcoat', '~> 3.0'
    
    • if you want to use Overcoat with CoreData
    # With Mantle 2.x
    pod 'Overcoat/CoreData', '~> 3.0'
    # Or with Mantle 1.x
    pod 'Overcoat/CoreData/Mantle1', '~> 3.0'
    
    • if you want to use Overcoat with Social request serializer
    pod 'Overcoat/Social`, '~> 3.0'
    
    • if you want to use multiple Overcoat subspecs
    pod 'Overcoat', :subspecs => ['CoreData', 'Social'], '~> 3.0'
    
    • The support of PromiseKit and ReactiveCocoa are not changed, so you could keep using
    pod 'Overcoat/PromiseKit', '~> 3.0'
    pod 'Overcoat/ReactiveCocoa', '~> 3.0'
    
    • The support of NSURLSession has been merged into the Core subspec, so you could just use
    pod 'Overcoat', '~> 3.0'
    

    3. Classes/Procotols changes

    CoreData support of following classes:

    • OVCHTTPRequestOperationManager
    • OVCHTTPSessionManager
    • OVCModelResponseSerializer

    has been move to their subclasses:

    | Original class | CoreData support subclass | | --- | --- | | OVCHTTPRequestOperationManager | OVCManagedHTTPSessionManager | | OVCHTTPSessionManager | OVCManagedHTTPSessionManager | | OVCModelResponseSerializer | OVCManagedModelResponseSerializer |

    In most cases, you could just switch your class name from orginial one to CoreData-supported one if you are using CoreData support.

    Also there are two base procotols:

    • OVCHTTPManager defines common interfaces of OVCHTTPSessionManager and OVCHTTPRequestOperationManager.
    • OVCManagedHTTPManager extends the OVCHTTPManager protocl and defines common interfaces for CoreData support.
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Dec 18, 2014)

  • 2.1(Nov 20, 2014)

  • 2.0.2(Jun 30, 2014)

  • 2.0.1(Jun 20, 2014)

    Fixes PromiseKit breaking changes!

    • New API
    • Add NSURLSession based clients
    • Add Core Data persistence
    • Add Envelop and Error responses
    • Add ReactiveCocoa extensions
    • Add PromiseKit extensions

    Special thanks to @joanromano for contributing the ReactiveCocoa extensions and to everyone that reviewed the pull requests.

    Source code(tar.gz)
    Source code(zip)
  • 2.0(Jun 20, 2014)

    • New API
    • Add NSURLSession based clients
    • Add Core Data persistence
    • Add Envelop and Error responses
    • Add ReactiveCocoa extensions
    • Add PromiseKit extensions

    Special thanks to @joanromano for contributing the ReactiveCocoa extensions and to everyone that reviewed the pull requests.

    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Feb 9, 2014)

    • Fix AFNetworking deprecation warnings
    • Replace git submodules with cocoa pods
    • Update unit tests to XCTest
    • Use appledoc format for documentation
    Source code(tar.gz)
    Source code(zip)
  • 1.2(Oct 17, 2013)

    What's New

    This version is focused in supporting the new AFNetworking 2.0 architecture. Here's a summary of the changes:

    • OVCModelResponseSerializer serializes JSON responses into model objects.
    • OVCSocialRequestSerializer serializes requests into ACAccount authenticated requests.
    • OVCClient now inherits from AFHTTPRequestOperationManager. The interface remains almost the same.
    • OVCRequestOperation has been deprecated.
    • OVCSocialClient has been deprecated. Use the new +clientWithBaseURL:account: method in OVCClient instead.
    Source code(tar.gz)
    Source code(zip)
  • 1.1(Sep 16, 2013)

  • 1.0(Sep 6, 2013)

Owner
null
Synchronous requests for AFNetworking 1.x, 2.x, and 3.x

AFNetworking-Synchronous A minimal category which extends AFNetworking to support synchronous requests. Usage 3.x pod 'AFNetworking', '~> 3.0' pod

Paul Melnikow 160 Dec 7, 2022
A custom wrapper over AFNetworking library that we use inside RC extensively

AFNetworkingHelper A very simple wrapper over the most amazing networking library for objective C, AFNetworking. We extensively use it inside RC and i

Betacraft 16 Aug 3, 2021
YTKNetwork is a high level request util based on AFNetworking.

YTKNetwork What YTKNetwork is a high level request util based on AFNetworking. It's developed by the iOS Team of YuanTiKu. It provides a High Level AP

猿辅导技术团队 6.5k Jan 6, 2023
An easy to integrate Model Based Google Maps Helper (SVHTTPClient, AFNetworking) That lets you Geo Code , Reverse Geocode, Get Directions , Places Autocomplete.

GoogleMapsHelper Read Me in Russian : http://gargo.of.by/googlemapshelper/ A GOOGLE MAPS Helper that help you do multiple tasks like HOW TO USE // usi

Zeeshan Haider 21 Jul 28, 2022
Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…)

Perfect: Server-Side Swift 简体中文 Perfect: Server-Side Swift Perfect is a complete and powerful toolbox, framework, and application server for Linux, iO

PerfectlySoft Inc. 13.9k Jan 6, 2023
🌏 A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications.

A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications. ?? TermiNetwork was tested in a produc

Bill Panagiotopoulos 90 Dec 17, 2022
StatusBarOverlay will automatically show a "No Internet Connection" bar when your app loses connection, and hide it again. It supports apps which hide the status bar and The Notch

StatusBarOverlay StatusBarOverlay will automatically show a "No Internet Connection" bar when your app loses connection, and hide it again. It support

Idle Hands Apps 160 Nov 2, 2022
Socket.io iOS and OSX Client compatible with v1.0 and later

SocketIO-Kit ⚠️ This project is no longer maintained. Please use the official framework Socket.IO-Client-Swift. SocketIO-Kit is a Socket.io iOS client

Ricardo Pereira 140 Mar 9, 2022
RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X

RestKit RestKit is a modern Objective-C framework for implementing RESTful web services clients on iOS and Mac OS X. It provides a powerful object map

The RestKit Project 10.2k Dec 29, 2022
NSURLSession network abstraction layer, using Codable and Decodable for response and Encodable for request. ⚙️🚀

SONetworking NSURLSession network abstraction layer, using Codable and Decodable for response and Encodable for request. Project Folder and File Struc

Ahmad AlSofi 4 Jan 28, 2022
Lightweight Networking and Parsing framework made for iOS, Mac, WatchOS and tvOS.

NetworkKit A lightweight iOS, Mac and Watch OS framework that makes networking and parsing super simple. Uses the open-sourced JSONHelper with functio

Alex Telek 30 Nov 19, 2022
Bonjour networking for discovery and connection between iOS, macOS and tvOS devices.

Merhaba Bonjour networking for discovery and connection between iOS, macOS and tvOS devices. Features Creating Service Start & Stop Service Stop Brows

Abdullah Selek 67 Dec 5, 2022
QwikHttp is a robust, yet lightweight and simple to use HTTP networking library for iOS, tvOS and watchOS

QwikHttp is a robust, yet lightweight and simple to use HTTP networking library. It allows you to customize every aspect of your http requests within a single line of code, using a Builder style syntax to keep your code super clean.

Logan Sease 2 Mar 20, 2022
Impervious is a privacy and security-focused browser with native DANE support and a decentralized p2p light client.

Impervious iOS The first browser with support for native DNS-Based Authentication of Named Entities (DANE) with true downgrade protection, and the fir

Impervious Inc 25 Jun 15, 2022
Beacon is a privacy and security-focused browser with native DANE support and a decentralized p2p light client.

Beacon iOS The first browser with support for native DNS-Based Authentication of Named Entities (DANE) with true downgrade protection, and the first b

Impervious Inc 25 Jun 15, 2022
Publish and discover services using Bonjour

Ciao Lib to publish and find services using mDNS Requirements Installation Usage License Requirements iOS 8.0+ / Mac OS X 10.10+ / tvOS 9.0+ Xcode 9.0

Alexandre Mantovani Tavares 55 Dec 14, 2022
🌸 Powerful Codable API requests builder and manager for iOS.

This lib is about network requests with blackjack, roulette and craps! Using it you will be able to convert your massive API layer code into an awesom

CodyFire 251 Jan 8, 2023
OAuth2 framework for macOS and iOS, written in Swift.

OAuth2 OAuth2 frameworks for macOS, iOS and tvOS written in Swift 5.0. ⤵️ Installation ?? Usage ?? Sample macOS app (with data loader examples) ?? Tec

Pascal Pfiffner 1.1k Jan 8, 2023
Swift/Obj-C HTTP framework with a focus on REST and JSON

Now Archived and Forked PMHTTP will not be maintained in this repository going forward. Please use, create issues on, and make PRs to the fork of PHMT

Postmates Inc. 509 Sep 4, 2022