A modern Swift wrapper for Instagram Private API.

Overview

Header


Swift codecov Telegram
iOS macOS tvOS watchOS


Swiftagram is a wrapper for Instagram Private API, written entirely in (modern) Swift.

Instagram's official APIs, both the Instagram Basic Display API and the Instagram Graph API — available for Creator and Business accounts alone, either lack support for the most mundane of features or limit their availability to a not large enough subset of profiles.

In order to bypass these limitations, Swiftagram relies on the API used internally by the Android and iOS official Instagram apps, requiring no API token, and allowing to reproduce virtually any action a user can take. Please just bear in mind, as they're not authorized for external use, you're using them at your own risk.


What's SwiftagramCrypto?

Relying on encryption usually requires specific disclosure, e.g. on submission to the App Store.

Despite Swiftagram, as all libraries relying on unathorized third-party APIs, cannot be considered App Store safe, we still value separating everything depending on encryption into its owen target library, we call SwiftagramCrypto. Keep in mind features like BasicAuthenticator, a non-visual Authenticator, or KeychainStorage, the safe and preferred way to store Secrets, or even the ability to post on your feed and upload stories are SwiftagramCrypto only.

Please check out the docs to find out more.

Status

push GitHub release (latest by date)

You can find all changelogs directly under every release, and if you care to be notified about future ones, don't forget to subscribe to our Telegram channel.

What's next?

Milestones, issues, as well as the WIP dashboard, are the best way to keep updated with active developement.

Feel free to contribute by sending a pull request. Just remember to refer to our guidelines and Code of Conduct beforehand.

Installation

Swift Package Manager (Xcode 11 and above)

  1. Select File/Swift Packages/Add Package Dependency… from the menu.
  2. Paste https://github.com/sbertix/Swiftagram.git.
  3. Follow the steps.
  4. Add SwiftagramCrypto together with Swiftagram for the full experience.

Why not CocoaPods, or Carthage, or blank?

Supporting multiple dependency managers makes maintaining a library exponentially more complicated and time consuming.
Furthermore, with the integration of the Swift Package Manager in Xcode 11 and greater, we expect the need for alternative solutions to fade quickly.

Targets

  • Swiftagram depends on ComposableRequest, an HTTP client originally integrated in Swiftagram.
    It supports Combine Publishers and caching Secrets, through ComposableStorage, out-of-the-box.

  • SwiftagramCrypto, depending on Swiftchain and a fork of SwCrypt, can be imported together with Swiftagram to extend its functionality, accessing the safer KeychainStorage and encrypted Endpoints (e.g. Endpoint.Friendship.follow, Endpoint.Friendship.unfollow).

Usage

Check out our Examples or visit the (auto-generated) documentation for Swiftagram and SwiftagramCrypto to learn about use cases.

Authentication

Authentication is provided through conformance to the Authenticator protocol, which, on success, returns a Secret containing all the cookies needed to sign an Endpoint's request.

The library comes with two concrete implementations.

WebView-based

Authenticator.Group.Visual is a visual based Authenticator, relying on a WKWebView in order to log in the user. As it's based on WebKit, it's only available for iOS 11 (and above) and macOS 10.13 (and above).

Example

import UIKit

import Swiftagram

/// A `class` defining a view controller capable of displaying the authentication web view.
class LoginViewController: UIViewController {
    /// The completion handler.
    var completion: ((Secret) -> Void)? {
        didSet {
            guard oldValue == nil, let completion = completion else { return }
            // Authenticate.
            DispatchQueue.main.asyncAfter(deadline: .now()) {
                // We're using `Authentication.keyhcain`, being encrypted,
                // but you can rely on different ones.
                Authenticator.keychain
                    .visual(filling: self.view)
                    .authenticate()
                    .sink(receiveCompletion: { _ in }, receiveValue: completion)
                    .store(in: &self.bin)
            }
        }
    }

    /// The dispose bag.
    private var bin: Set<AnyCancellable> = []
}

And then you can use it simply by initiating it and assining a completion handler.

let controller = LoginViewController()
controller.completion = { _ in /* do something */ }
// Present/push the controller.

Basic

Authenticator.Group.Basic is a code based Authenticator, supporting 2FA, defined in SwiftagramCrypto: all you need is a username and password and you're ready to go.

Example

import SwiftagramCrypto

/// A retained dispose bag.
/// **You need to retain this.**
private var bin: Set<AnyCancellable> = []

// We're using `Authentication.keyhcain`, being encrypted,
// but you can rely on different ones.
Authenticator.keychain
    .basic(username: /* username */,
           password: /* password */)
    .authenticate()
    .sink(receiveCompletion: {
            switch $0 {
            case .failure(let error):
                // Deal with two factor authentication.
                switch error {
                case Authenticator.Error.twoFactorChallenge(let challenge):
                    // Once you receive the challenge,
                    // ask the user for the 2FA code
                    // then just call:
                    // `challenge.code(/* the code */).authenticate()`
                    // and deal with the publisher.
                    break
                default:
                    break
                }
            default:
                break
            }
          }, 
          receiveValue: { _ in /* do something */ })
    .store(in: &self.bin)
}

Caching

Caching of Secrets is provided through its conformacy to ComposableStorage's Storable protocol.

The library comes with several concrete implementations of Storage.

  • TransientStorage should be used when no caching is necessary, and it's what Authenticators default to when no Storage is provided.
  • UserDefaultsStorage allows for faster, out-of-the-box, testing, although it's not recommended for production as private cookies are not encrypted.
  • KeychainStorage, part of ComposableRequestCrypto, (preferred) stores them safely in the user's keychain.

Request

How can I bypass Instagram "spam" filter, and make them believe I'm not actually a bot?

In older versions of Swiftagram we let the user set a delay between the firing of a request, and its actual dispatch. This would eventually just slow down implementations, doing close to nothing to prevent misuse.

Starting with 5.0, we're now directly exposing URLSessions to final users, so you can build your own implementation.

Swiftagram defines a static URLSession (URLSession.instagram) fetching one resource at a time. Relying on this is the preferred way to deal with Instagram "spam" filter.

// A valid secret.
let secret: Secret = /* the authentication response */
// A **retained** collection of cancellables.
var bin: Set<AnyCancellable> = []

// We're using a random endpoint to demonstrate 
// how `URLSession` is exposed in code. 
Endpoint.user(secret.identifier)
    .unlock(with: secret)
    .session(.instagram)    // `URLSession.instagram` 
    .sink(receiveCompletion: { _ in }, receiveValue: { print($0) })
    .store(in: &bin)

What about cancelling an ongoing request?

Once you have a stream Cancellable, just call cancel on it or empty bin.

// A valid secret.
let secret: Secret = /* the authentication response */
// A **retained** collection of cancellables.
var bin: Set<AnyCancellable> = []

// We're using a random endpoint to demonstrate 
// how `Deferrable` is exposed in code. 
Endpoint.user(secret.identifier)
    .unlock(with: secret)
    .session(.instagram) 
    .sink(receiveCompletion: { _ in }, receiveValue: { print($0) })
    .store(in: &bin)
    
// Cancel it.
bin.removeAll()

How do I deal with pagination and pagination offsets?

Easy. Assuming you're fetching a resource that can actually be paginated… 

// A valid secret.
let secret: Secret = /* the authentication response */
// A **retained** collection of cancellables.
var bin: Set<AnyCancellable> = []

// We're using a random endpoint to demonstrate 
// how `PagerProvider` is exposed in code. 
Endpoint.user(secret.identifier)
    .posts
    .unlock(with: secret)
    .session(.instagram)
    .pages(.max, delay: 1)  // Exhaust all with `.max`
                            // or pass any `Int` to limit
                            // pages.
                            // You can omit `delay`, in that
                            // case pages will be fetched 
                            // one immediately after the other.
    .sink(receiveCompletion: { _ in }, receiveValue: { print($0) })
    .store(in: &bin)

PagerProvider also supports an offset, i.e. the value passed to its first iteration, and a rank (token) in same cases, both as optional parameters in the pages(_:offset:)/pages(_:offset:rank:) method above.

Special thanks

Massive thanks to anyone contributing to TheM4hd1/SwiftyInsta, dilame/instagram-private-api and ping/instagram_private_api, for the inspiration and the invaluable service to the open source community, without which there would likely be no Swiftagram today.

Comments
  • KeychainStorage with iOS version 12

    KeychainStorage with iOS version 12

    Hey Sbertix :)

    When I tried to open app I am getting error from KeychainStorage with iOS version 12.4.

    My code: "KeychainStorage< Secret >().removeAll()" or "KeychainStorage< Secret >().all().first"

    Can we fix this issue please?

    bug 
    opened by MariaJsn 29
  • `WebViewAuthenticator` logging me out

    `WebViewAuthenticator` logging me out

    Hi @sbertix. I'm trying to follow user like this;

    func follow(for userId: String, completion: @escaping (Bool) -> Void) -> Task {
            let task = Endpoint.Friendship.follow(userId)
                .authenticating(with: secret)
                .task { (result) in
                    guard let response = try? result.get() else { return }
                    print(response)
                    completion(true)
                }
            
            task.resume()
            return task
        }
    

    but its logged out me and response received like this;

    {
      "logout_reason" : 3,
      "message" : "login_required",
      "status" : "fail",
      "error_title" : "You've Been Logged Out",
      "error_body" : "Please log back in."
    }
    
    bug 
    opened by bariscck 19
  • Saved media not paginating

    Saved media not paginating

    Hi @sbertix,

    I am getting parsing error in saved posts endpoint, My code is:

    Endpoint.Media.Posts.saved(startingAt: nextId)
                .unlocking(with: secret)
                .task(maxLength: 4) { (page) in
                    completion(posts, next, error)
                } onChange: { (response) in
                    if case .success(let collection) = response, let sposts = collection.media {
                        posts.append(contentsOf: sposts)
                        next = collection.pagination.next
                    }
                    else if case .failure(let e) = response {
                        error = e
                    }
                }.resume()
    

    it looks like it fetches the correct data but can't not parse it.

    while the end point to get Liked posts is working fine.

    bug 
    opened by khaliddd 15
  • Login with facebook not working

    Login with facebook not working

    Hi,

    Continue with facebook login is not working, on web view it open the instagram feeds page, but WebViewAuthenticator gives an error :

    The operation couldn’t be completed. (Swiftagram.WebViewAuthenticatorError error 0.)

    Swiftagram version : 4.2.7

    bug 
    opened by khaliddd 11
  • Getting error after update

    Getting error after update

    I update the latest version of Api and I am getting following error for some users and app crash. Before update I did not get any error like this. Is it related with Swiftagram library?

    Error: #1 (null) in partial apply for thunk for @escaping @callee_guaranteed (@guaranteed Result<TrayItemUnit, Error>) -> () ()

    Thanks, Maria

    support 
    opened by MariaJsn 11
  • Migrate from Android API to iOS API

    Migrate from Android API to iOS API

    • [x] I've searched past issues and I couldn't find reference to this.

    Is your feature request related to a problem? Please describe.

    When an iOS user logs in with Swiftagram, he/she will receive a security alert email: logging in with an XianMi Android device. This gives an impression of account-being-hacked. In some cases, Instagram will restrict login on an unknown device in a totally different platform. In our test, even after clicking the "That's me" button on Instagram, the login of accounts without 2FA was fail. After changing the user agent to iOS, the login succeeded.

    Describe the solution you'd like

    Please add support of iOS apiUserAgent(or device).

    Additional context

    The form of iOS user agent likes this: Instagram 123.1.0.26.115 (iPhone9,1; iOS 13_3; en_US; en-US; scale=2.00; 750x1334; 190542906)

    Ref: https://developers.whatismybrowser.com/useragents/explore/software_name/instagram/

    enhancement 
    opened by MatoMA 10
  • Updating Examples/Followers to `4.0.0` from `3.*` results in crash

    Updating Examples/Followers to `4.0.0` from `3.*` results in crash

    Hey @sbertix!

    Just upgraded to 4.0. Great stuff! Thank you!

    Question about the purpose of the following snippet in the example code:

    // Keep `UserDefaults` in sync.
    // This will only persist new `User`s, not delete old ones: this is just an example.
    $current.compactMap { $0 }
         .removeDuplicates(by: { $0.identifier == $1.identifier })
         .map { (data: try? JSONEncoder().encode($0), id: $0.identifier) }
         .sink { UserDefaults.standard.set($0.data, forKey: $0.id) }
         .store(in: &subscriptions)
    

    What does this snippet aim to accomplish? What negative things might happen when omitting this snippet?


    I got Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: for this line: .map { (data: try? JSONEncoder().encode($0), id: $0.identifier) }

    support sponsor 
    opened by joshuazmiller 8
  • `WebViewAuthenticator` and UIKit

    `WebViewAuthenticator` and UIKit

    • [x] I've searched past issues and I couldn't find reference to this.
    • [x] I've checked out all provided Examples.

    Hello. Can't embed swiftagram usage in UIKit. Should the library work not in swift ui or is it not available at the moment?

    support 
    opened by BoikoArtem30091994 8
  • Swift compiler refuses to compile when exporting Localizations

    Swift compiler refuses to compile when exporting Localizations

    • [X] I've searched past issues and I couldn't find reference to this.

    Swiftagram version xcode13

    Describe the bug A clear and concise description of what the bug is.

    To reproduce

    1. Build the Authenticator Example
    2. Set "Use Compiler to Extract Swift String" in project's build settings (if search fails, redo with All / Levels ON)
    3. SwCrypt, ComposableStorage, ComposableRequest & KeychainAccess compilation will fail.

    Device and system macOS 11.5.1, xCode 13b4

    critical 
    opened by diligiant 7
  • Build fails while archiving in `5.0.2`

    Build fails while archiving in `5.0.2`

    Hi @sbertix,

    I am getting compiler error No such module 'Combine' when I try to archive,

    my minimum deployment target is 14, and I am not using swiftUI

    Screen Shot 2021-05-09 at 4 52 49 AM

    bug 
    opened by khaliddd 7
  • Minimum Platform Error

    Minimum Platform Error

    • [x] I've searched past issues and I couldn't find reference to this.

    Swiftagram version 4.1.3

    Describe the bug error: The package product 'Swiftchain' requires minimum platform version 9.0 for the iOS platform, but this target supports 8.0 (in target 'ComposableRequestCrypto' from project 'ComposableRequest')

    To reproduce When I try to build it to target: IOS, IOS13...

    Expected behavior Build successfull

    Device and system iPhone Simulator 13.7

    bug 
    opened by senolatac 7
  • Crash when using a media URL from a private user that my user follows

    Crash when using a media URL from a private user that my user follows

    • [x] I've searched past issues and I couldn't find reference to this.

    Swiftagram version e.g. 5.4.0, etc.

    Describe the bug Pasting a followed private user's post causes a crash

    To reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior sdk does not crash.

    Additional context go to Instagram in the app, go to a user that you know is private but is visible to you because you follow them. go to one of their posts and copy the post url. use .media(url) and see crash.

    Screen Shot 2022-11-07 at 10 00 28 PM

    Device and system e.g. macOS 10.5.16, iPhone Simulator 13.5.

    critical 
    opened by DrewKiino 1
  • Unable to login with two-factor challenge

    Unable to login with two-factor challenge

    I've searched past issues and I couldn't find reference to this.

    Swiftagram version 5.4.0

    Describe the bug Login with two-factor get error: invalid_parameters

    To reproduce Steps to reproduce the behavior:

    1. Login with Authenticator.keychain.basic(username: userID, password: password) .authenticate(in: client)
    2. get two_factor code, and continue with challenge.code(code).authenticate()
    3. get error message: {\"message\":\"Invalid Parameters\",\"status\":\"fail\",\"error_type\":\"invalid_parameters\"}

    Expected behavior Login success

    Device and system iOS 15.2, iPhone X

    bug 
    opened by strangeliu 0
  • feat: support async/await and completion handlers

    feat: support async/await and completion handlers

    • 6a8f047 - feat: support async/await and completion handlers
    • 2a5e7d5 - feat: lower minimum platform versions
    • 55625a2 - fix: remove unavailable endpoints
    • 1ca46a5 - fix: remove media(at:) accessory
    • b95b454 - fix: update Endpoint.Group.Media.summary output
    • 94f47a1 - chore(deps): update GitHub Actions .ymls
    • 6fa8157 - fix: re-enable non-empty two factor authentication
    opened by sbertix 0
Releases(5.4.0)
  • 5.4.0(Aug 23, 2021)

  • 5.3.0(May 22, 2021)

  • 5.2.0(May 18, 2021)

  • 5.1.0(May 15, 2021)

  • 5.0.3(May 9, 2021)

  • 5.0.2(May 8, 2021)

    Bugfixes

    • docs: update docs generation
    • endpoints: deal with numerical nextMaxIds

    Others

    • actions: update push.yml
    • actions: update release.yml
    Source code(tar.gz)
    Source code(zip)
  • 5.0.1(May 8, 2021)

  • 5.0.0(May 6, 2021)

    Endpoints

    • Compute identifier from media URL (#145)
    • Refactor authentication
      • Add Secret accessories into Authenticator
    • Refactor Endpoint.Direct
      • Approve conversation requests
      • Decline conversation requests
      • Delete a conversation
      • Invite users to a conversation
      • Leave a conversation
      • Mute a conversation
      • Send a text message in a conversation (#122)
      • Update a conversation title
      • Unmute a conversation
      • Delete a message
      • Mark a message as watched
    • Refactor Endpoint.Location
      • Fetch recent and highest ranked posts
    • Refactor Endpoint.Saved (#169)
      • Add saved collections support
      • Save posts to specific collection
    • Refactor Endpoint.Tag
      • Fetch recent and highest ranked posts
      • Watch recent stories
      • Follow a specific tag
      • Unfollow a specific tag
    • Refactor Endpoint.User and Endpoint.Friendship
      • Fetch user info by (exact) username
      • Mute a user's posts or/and stories

    Examples

    • Add Authenticator app to allow anyone to rely on SwiftagramTests
    • Update Followers example
    • Examples now rely on local packages

    Other enhancements

    • Refactor for the new ComposableRequest
    • Expose ComposableStorage and ComposableStorageCrypto directly to Swiftagram and SwiftagramCrypto, respectively
    • Update default Client to be an iOS device (#138)
    • Update docs

    Bugfixes

    • Improve Facebook login reliability for visual authenticator (fixes #157)
    • Hide "Unsupported browser" notice when logging in with Facebook (fixes #180)
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0-beta.4(Apr 8, 2021)

    Beta 4 brings a completely updated dynamic way to deal with Endpoints. Please consider checking out the migration guide.

    Changes:

    • Refactor all Endpoints
    • Added new Endpoints for Endpoint.direct and Endpoint.user
    • Examples now use local packages, so they will always match with the library
    • Wrapped reflection was moved to SwiftagramTests
    • Remove unnecessary import statements and legacy code

    Known issues:

    • Uploading videos to your story is not working
    • Swift 5.2 is not supported at the moment
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0-beta.3(Mar 19, 2021)

  • 5.0.0-beta.2(Feb 23, 2021)

    Changes:

    • Update Endpoints to rely on Projectables
    • Fix KeychainStorage not being found
    • Expose ComposableStorage and ComposableStorageCrypto directly to Swiftagram and SwiftagramCrypto, respectively

    Known issues:

    • Upload endpoints are not working
    • Followers example still refers to 5.0.0-beta
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0-beta(Feb 8, 2021)

    Changes:

    • Refactor for the new ComposableRequest
    • Update default Client to be an iOS device
    • Update README.md
    • Add Authenticator app to allow anyone to rely on SwiftagramTests
    • Update Followers example

    Known issues:

    • Uploading videos to story does not work
    • KeychainStorage might not be found

    Check the README for a quick setup guide.

    Source code(tar.gz)
    Source code(zip)
  • 4.2.10(Jan 9, 2021)

  • 4.2.9(Jan 6, 2021)

  • 4.2.8(Jan 6, 2021)

  • 4.2.7(Jan 6, 2021)

  • 4.2.6(Dec 20, 2020)

  • 4.2.5(Dec 18, 2020)

  • 4.2.4(Dec 13, 2020)

  • 4.2.3(Dec 8, 2020)

  • 4.2.2(Nov 27, 2020)

  • 4.2.1(Nov 2, 2020)

  • 4.2.0(Oct 29, 2020)

  • 4.1.4(Oct 24, 2020)

  • 4.1.3(Oct 1, 2020)

    4.1.3 solves a serious compiler issue, introduced with 4.0.0, that would make any app crash on iOS 12.* and below. As much as this update is recommended to anyone, keep in mind Secrets stored in KeychainStorage from previous versions will be wiped, and the user prompted to log in again.

    Changes

    • Add support for sbertix/spm-dependencies-checker
    • Update ComposableRequest to 4.3.1
    Source code(tar.gz)
    Source code(zip)
  • 4.1.2(Sep 1, 2020)

  • 4.1.1(Aug 31, 2020)

  • 4.1.0(Aug 31, 2020)

    Changes

    • Add Sticker model
    • Add archived posts Endpoint
    • Add best friends only image story upload
    • Add common models protocols
    • Add countdown, question, slider and poll stickers
    • Add initial Sticker support for stories upload
    • Add more Sticker layout accessories
    • Add test resources
    • Add upload picture as story Endpoint
    • Add upload video as story Endpoints
    • Add video upload Endpoints
    • Fix missing tests
    • Merge branch 'main' into development
    • Refactor models and tests
    • Rename Thread and ThreadRecipient
    • Update README.md
    • Update deprecated declarations
    • Update deprecations
    • Update examples
    • Update test.yaml
    Source code(tar.gz)
    Source code(zip)
  • 4.0.3(Aug 25, 2020)

  • 4.0.2(Aug 23, 2020)

Owner
Stefano Bertagno
iOS developer
Stefano Bertagno
A WIP Swift wrapper for Discord's Bot API.

Quickcord Quickcord is a WIP Swift wrapper for Discord's Bot API. Features (As of right now) Connecting the the gateway and identifying. Literally eve

Ben Sova 4 Aug 7, 2021
Github API V3 Swifty Wrapper

GithubPilot - Github API V3 Swifty Wrapper This is a Swift Github API Wrapper, it could make your life a little easier if you want to make an App with

Yansong Li 53 Feb 2, 2022
🌏 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
A modern download manager based on NSURLSession to deal with asynchronous downloading, management and persistence of multiple files.

TWRDownloadManager TWRDownloadManager A modern download manager for iOS (Objective C) based on NSURLSession to deal with asynchronous downloading, man

Michelangelo Chasseur 407 Nov 19, 2022
Modern networking support to monitor network connectivity

ConnectivityKit Adapting to changes in network connectivity can allow for suspending or resuming network activity. When entering an elevator or going

Brennan Stehling 1 Nov 7, 2022
C-Xpress is a modern c-like object oriented programming language running on top of the .NET framework

C-Xpress Programming Language The cxpress programming language is a High Level object oriented programming language running on the .NET Framework C-Xp

null 2 Jan 12, 2022
APIProvider - API Provider Package for easier API management inspired by abstraction

APIProvider Using APIProvider you can easily communicate with all API endpoints

null 1 Apr 21, 2022
Thin wrapper around NSURLSession in swift. Simplifies HTTP requests.

SwiftHTTP SwiftHTTP is a thin wrapper around NSURLSession in Swift to simplify HTTP requests. Features Convenient Closure APIs Simple Queue Support Pa

Dalton 1.9k Dec 7, 2022
Http Request wrapper written in Swift

Net Net is a HttpRequest wrapper written in Swift Features GET, POST, PUT, DELETE method Powerful request params: nested params, number, string, dic,

Le Van Nghia 304 Jun 29, 2022
Easy HTTP Networking in Swift a NSURLSession wrapper with image caching support

Networking was born out of the necessity of having a simple networking library that doesn't have crazy programming abstractions or uses the latest rea

Nes 1.3k Dec 17, 2022
A glorious Swift wrapper around NSNotificationCenter

Kugel A glorious Swift wrapper around NSNotificationCenter. ⚠️ Deprecated ⚠️ This library is deprecated and will not be maintained anymore. With Swift

Scoop 75 Sep 22, 2022
📱📲 A wrapper for the MultipeerConnectivity framework for automatic offline data transmission between devices

A wrapper for Apple's MultipeerConnectivity framework for offline data transmission between Apple devices. This framework makes it easy to automatical

Wilson Ding 197 Nov 2, 2022
Another network wrapper for URLSession. Built to be simple, small and easy to create tests at the network layer of your application.

Another network wrapper for URLSession. Built to be simple, small and easy to create tests at the network layer of your application. Install Carthage

Ronan Rodrigo Nunes 89 Dec 26, 2022
A testable RxSwift wrapper around MultipeerConnectivity

A testable RxSwift wrapper around MultipeerConnectivity

RxSwift Community 69 Jul 5, 2022
Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone

ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier

Ben Copsey 5.8k Dec 14, 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
AsyncWebSocketClient - A package that contains a client behaving as a wrapper for the URLSessionWebSocketTask

(WORK IN PROGRESS) AsyncWebSocketClient This is a package that contains a client

null 3 Dec 30, 2022
A Combine-style wrapper around Network's NWConnection with a UDP protocol

A Combine-style wrapper around Network's NWConnection with a UDP protocol

Emlyn Bolton 3 Sep 26, 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