⚡️ A fully-featured and blazing-fast Swift API client to interact with Algolia.

Overview

Algolia for Swift

The perfect starting point to integrate Algolia within your Swift project

DocumentationCommunity ForumStack OverflowReport a bugFAQSupport

Features

  • Pure cross-platform Swift client
  • Typed requests and responses
  • Widespread use of Result type
  • Uses the power of Codable protocol for easy integration of your domain models
  • Thread-safe clients
  • Detailed logging
  • Injectable HTTP client

Install

Swift Package Manager

The Swift Package Manager is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies. Since the release of Swift 5 and Xcode 11, SPM is compatible with the iOS, macOS and tvOS build systems for creating apps.

To use SwiftPM, you should use Xcode 11 to open your project. Click File -> Swift Packages -> Add Package Dependency, enter InstantSearch repo's URL.

If you're a framework author and use Swift API Client as a dependency, update your Package.swift file:

let package = Package(
    // 8.11.0 ..< 9.0.0
    dependencies: [
        .package(url: "https://github.com/algolia/algoliasearch-client-swift", from: "8.11.0")
    ],
    // ...
)

Add import AlgoliaSearchClient to your source files.

Cocoapods

CocoaPods is a dependency manager for Cocoa projects.

To install Algolia Swift Client, simply add the following line to your Podfile:

pod 'AlgoliaSearchClient', '~> 8.11'
# pod 'InstantSearchClient', '~> 6.0' // Swift 4.2
# pod 'InstantSearchClient', '~> 5.0' // Swift 4.1

Then, run the following command:

$ pod update

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

  • To install InstantSearch, simply add the following line to your Cartfile:
github "algolia/algoliasearch-client-swift" ~> 8.11
# github "algolia/algoliasearch-client-swift" ~> 6.0.0 // Swift 4.2
# github "algolia/algoliasearch-client-swift" ~> 5.0.0 // Swift 4.1
  • Launch the following commands from the project directory (for v.8.0+)
carthage update
./Carthage/Checkouts/algoliasearch-client-swift/carthage-prebuild
carthage build

If this is your first time using Carthage in the project, you'll need to go through some additional steps as explained over at Carthage.

💡 Getting Started

Initialize the client

To start, you need to initialize the client. To do this, you need your Application ID and API Key. You can find both on your Algolia account.

let client = Client(appID: "YourApplicationID", apiKey: "YourAdminAPIKey")
let index = client.index(withName: "your_index_name")

Push data

Without any prior configuration, you can start indexing contacts in the contacts index using the following code:

struct Contact: Encodable {
  let firstname: String
  let lastname: String
  let followers: Int
  let company: String
}

let contacts: [Contact] = [
  .init(firstname: "Jimmie", lastname: "Barninger", followers: 93, company: "California Paint"),
  .init(firstname: "Warren", lastname: "Speach", followers: 42, company: "Norwalk Crmc")
]

let index = client.index(withName: "contacts")
index.saveObjects(contacts, autoGeneratingObjectID: true) { result in
  if case .success(let response) = result {
    print("Response: \(response)")
  }
}

Search

You can now search for contacts by firstname, lastname, company, etc. (even with typos):

index.search(query: "jimmie") { result in
  switch result {
  case .failure(let error):
    print("Error: \(error)")
  case .success(let response):
    print("Response: \(response)")
    do {
      let foundContacts: [Contact] = try response.extractsHits()
      print("Found contacts: \(foundContacts)")
    } catch let error {
      print("Contact parsing error: \(error)")
    }
  }
}

Configure

Settings can be customized to tune the search behavior. For example, you can add a custom sort by number of followers to the already great built-in relevance:

let settings = Settings()
  .set(\.customRanking, to: [.desc("followers")])
index.setSettings(settings) { result in
  if case .failure(let error) = result {
    print("Error when applying settings: \(error)")
  }
}

You can also configure the list of attributes you want to index by order of importance (first = most important):

Note: Since the engine is designed to suggest results as you type, you'll generally search by prefix. In this case the order of attributes is very important to decide which hit is the best:

let settings = Settings()
  .set(\.searchableAttributes, to: ["lastname", "firstname", "company"])
index.setSettings(settings) { result in
  if case .failure(let error) = result {
    print("Error when applying settings: \(error)")
  }
}

For full documentation, visit the Algolia Swift API Client's documentation.

📝 Examples

You can find code samples in the Algolia's API Clients playground.

Use the Dockerfile

If you want to contribute to this project without installing all its dependencies, you can use our Docker image. Please check our dedicated guide to learn more.

📄 License

Algolia Swift API Client is an open-sourced software licensed under the MIT license.

Notes

Objective-C support

The Swift API client is compatible with Objective-C up to version 7.0.5. Please use this version of the client if you're working with an Objective-C project.

Swift 3

You can use this library with Swift by one of the following ways:

  • pod 'AlgoliaSearch-Client-Swift', '~> 4.8.1'
  • pod 'AlgoliaSearch-Client-Swift', :git => 'https://github.com/algolia/algoliasearch-client-swift.git', :branch => 'swift-3'

Getting Help

  • Need help? Ask a question to the Algolia Community or on Stack Overflow.
  • Encountering an issue? Before reaching out to support, we recommend heading to our FAQ where you will find answers for the most common issues and gotchas with the client.
  • Found a bug? You can open a GitHub issue.
Comments
  • Cancel a search request

    Cancel a search request

    Hi there,

    Is there a way to cancel requests? I could only find the following internal method in the Client:

    /// Cancel a queries. Only the last ten queries can be cancelled.
        func cancelQueries(method: HTTPMethod, path: String) {
            for request in requestBuffer {
                if request.request.URL!.path! == path {
                    if request.request.HTTPMethod == method.rawValue {
                        request.cancel()
                    }
                }
            }
        }
    
    

    Is there or are there plans to implement public methods for cancelling requests?

    Thank you for your help.

    opened by schmittsfn 18
  • Support Swift 4

    Support Swift 4

    Although Apple officially supports mixed dependencies with Swift 3.2 and 4, devs using CocoaPods might run into problems today, as there's no way to set the Swift version on a per-pod basis.

    When trying to compile the library in Swift 4, we get one error in the shuffleInPlace function inside the MutableCollection extension.

    Simultaneous accesses to parameter 'self', but modification requires exclusive access; consider copying to a local variable. Replace 'swap(&self[i], &self[j])' with 'self.swapAt(i, j)'

    I propose to submit a PR to address this issue asap and release a version 5-beta1 of the library since it targets a new Swift Version. Later on, I will include a few PRs for resolving issues such as #335 and #259 and then I will release v5.

    WDYT?

    enhancement 
    opened by spinach 13
  • ld: warning: embedded dylibs/frameworks only run on iOS 8 or later

    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later

    Hi, Following Algolia Search with Carthage:

    • carthage version: 0.16.2
    • xcodebuild -version: Xcode 7.3.1 Build version 7D1014
    • Are you using --no-build? No
    • Are you using --no-use-binaries? No
    • Are you using --use-submodules? No

    Cartfile

    github "algolia/algoliasearch-client-swift" == 3.2.1
    

    Cartage Output

    $ carthage update --platform iOS
    *** Cloning algoliasearch-client-swift
    *** Checking out algoliasearch-client-swift at "3.2.1"
    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later
    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later
    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later
    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later
    

    I don't have those warnings with Algolia Search version 2.3. Something must be wrong configured in your project.

    opened by TofPlay 9
  • Offline Cache

    Offline Cache

    It would be great to be able to customize the cache to use things like NSURLRequestReturnCacheDataElseLoad which allows me to at least show something to the user when their device is offline, regardless of age or expiration. For example, my app shows a list of movie reviews. If the user starts reading a review but leaves and comes back later to finish reading (this time their device is offline), I would love to still be able to show them the same content they were viewing last time they were online. Is this something you would consider adding as an option?

    question 
    opened by stephencroberts 9
  • InstantSearchClient migration - Replacement for `searchDisjunctiveFaceting` ?

    InstantSearchClient migration - Replacement for `searchDisjunctiveFaceting` ?

    Hello 🙂

    I am migrating from InstantSearchClient to AlgoliaSearchClient and I am not able to find a replacement for searchDisjunctiveFaceting method. My Android colleague use the Kotlin method advancedSearch line 95, but I don't have the equivalent of advancedSearch on the iOS version.

    Do you plan to integrate the searchDisjunctiveFaceting or advancedSearch method in the iOS SDK ?

    If not, how am I supposed to use a searchDisjunctiveFaceting like request ?

    Thanks

    opened by jeremierichard 8
  • Fix crash in AsyncOperation

    Fix crash in AsyncOperation

    We too are having the same crash from #592 appearing in our logs.

    As per this Stack Overflow, cancel() is triggering isFinished when the operation is not isExecuting. It can be fixed by only marking isFinished if isExecuting is true.

    opened by nicolasgomollon 8
  • Crash in AsyncOperation

    Crash in AsyncOperation

    We are seeing the following crash in the Algolia SDK. It is not super frequent, only 117 times in the last 90 days.

    screen shot 2018-11-10 at 8 45 26 am

    It looks like it is related to the didChangeValue KVM notification on the finished property, so I am guessing whatever is monitoring that property is having an issue.

    Thanks!

    bug 
    opened by matt-alltrails 7
  • SwiftPM support

    SwiftPM support

    opened by TofPlay 7
  • Crash in tryLaunch / hostIterator

    Crash in tryLaunch / hostIterator

    Describe the bug 🐛 In our crash reports we can see a crash caused by AlgoliaSearchClient in HTTPRequest.swift in tryLaunch more concretely this line: guard let host = hostIterator.next() [https://github.com/algolia/algoliasearch-client-swift/blob/65d8343d043c1cd9b8a0d985f325dad75c3a6805/Sources/AlgoliaSearchClient/Transport/HTTP/HTTPRequest.swift#L77](here in the repository)

    To Reproduce 🔍 SInce it is coming through the Appstore crash reports, we could not manage to reproduce it

    Expected behavior 💭 Should not crash

    Screenshots 🖥 If applicable, add screenshots to help explain your problem.

    Environment: iOS 14.2 iPhone XS

    opened by mxsc 6
  • feat: Server side swift

    feat: Server side swift

    As described in the feature request, the aim of this PR is to add support for server side swift.

    This is work in progress.

    TODOs:

    • [x] CommonCrypto vs swift-crypto
    • [x] Updating/runnig tests for Linux target
    • [x] Examples
    • [x] Linux CI tests

    FoundationNetworking

    Network related functionality was moved out of Foundation to the new FoundationNetworking module. So this needs a conditional import.

    #if os(Linux)
    import FoundationNetworking
    #endif
    

    CommonCrypto

    This is not part of the open source distribution. Instead, the recommendation is to use swift-crypto, which "is an open-source implementation of a substantial portion of the API of Apple CryptoKit".

    The only part I found using this is the generation of secured API key using HMAC. I managed to solve this bit by adding swift-crypto as a dependency and rewriting the generation using the other API.

    OperationLauncher

    It seems that on Linux the OperationQueue used in the OperationLauncher does not get an underlying queue, or gets something wrong. This results in operations not being started after adding them and sync operations not being finished.

    class OperationLauncher {
    
      let queue: OperationQueue
    
      init(queue: OperationQueue) {
        self.queue = queue
    #if os(Linux)
        self.queue.underlyingQueue = DispatchQueue
          .global(qos: DispatchQoS.QoSClass.background)
    #endif
      }
    
    opened by eriadam 6
  • Fix crash in AsyncOperation & backed up OperationQueue

    Fix crash in AsyncOperation & backed up OperationQueue

    Summary

    Problem 1: We were having the same crash from #592 appearing in our logs. A fix was attempted in #593, but was ultimately never merged in.

    Problem 2: We were running into an issue where the OperationQueue was being backed up (with up to several hundred operations) when calling cancel() on requests, such that any new subsequent requests would never be made.

    Result

    The solution we came up with involves removing the overridden start() and cancel() methods within AsyncOperation—and letting its superclass take care of its implementation. This fixes both the crash and the queue being backed up. Not entirely sure why these were overridden with a custom implementation to begin with, since they don’t seem to adhere to the recommendations made by Apple when subclassing Operation.

    According to the Apple Documentation for Operation:

    Subclassing Notes The NSOperation class provides the basic logic to track the execution state of your operation but otherwise must be subclassed to do any real work.

    Methods to Override For non-concurrent operations, you typically override only one method:

    • main()

    Of course, this Pull Request breaks the existing cancel unit tests you guys have because now it behaves slightly differently than what the tests were testing for, but we fixed both a crash and an edge case where requests would never be executed (due to the queue being backed up), so we think it’s worthwhile. 🙂

    Credits go to @handokochen for finding the proper fix to both!

    opened by nicolasgomollon 6
  • AsyncOperation cancel() and isCancelled behavior

    AsyncOperation cancel() and isCancelled behavior

    Summary

    The operations returned by the SDK didn't behave as I expected regarding cancellation. I am by no means an expert on the intricacies of (NS)Operation.

    AsyncOperation doesn't override isCancelled and doesn't call super.cancel() so isCancelled never becomes true as far as I understand. But there's checks for isCancelled in HTTPRequest and AsyncOperation.start().

    I added some unit tests with AsyncOperation and a BlockOperation to see the standard behavior.

    To pass the tests I came up with two possible solutions. Either remove the cancel override so that the super implementation of Operation is used or override and manage isCancelled.

    Result

    With these changes cancellation works as I'd expect. The behavior differs also as the state is not immediately set to finished anymore. Either the operation didn't yet start and will be set to finished once start() is called or the operation is already executing. For the second case it's up to the subclass to optionally handle cancellation and to set the state to finished.

    I also added a line in the HTTPRequest isCancelled guard to set the result variable to a cancellation error. So that the completion block gets also called once for an operation that's cancelled early before the URL task is created.

    opened by KaiOelfke 0
  • chore: Configure Renovate

    chore: Configure Renovate

    Mend Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • Gemfile (bundler)
    • Dockerfile (dockerfile)
    • .github/workflows/deployment.yml (github-actions)
    • .github/workflows/lint.yml (github-actions)
    • .github/workflows/pods.yml (github-actions)
    • .github/workflows/tests.yml (github-actions)
    • Package.swift (swift)

    Configuration

    🔡 Renovate has detected a custom config for this PR. Feel free to ask for help if you have any doubts and would like it reviewed.

    Important: Now that this branch is edited, Renovate can't rebase it from the base branch any more. If you make changes to the base branch that could impact this onboarding PR, please merge them manually.

    What to Expect

    With your current configuration, Renovate will create 4 Pull Requests:

    chore(deps): update dependency apple/swift-log to from: "1.4.4"
    • Schedule: ["at any time"]
    • Branch name: renovate/apple-swift-log-1.x
    • Merge into: master
    • Upgrade apple/swift-log to ac11c48aa8c409b7b2cf4669ed8e513cbff0b9e6
    chore(deps): update maierj/fastlane-action action to v2.3.0
    • Schedule: ["at any time"]
    • Branch name: renovate/maierj-fastlane-action-2.x
    • Merge into: master
    • Upgrade maierj/fastlane-action to v2.3.0
    chore(deps): update actions/checkout action to v3
    • Schedule: ["at any time"]
    • Branch name: renovate/actions-checkout-3.x
    • Merge into: master
    • Upgrade actions/checkout to v3
    chore(deps): update actions/setup-go action to v3
    • Schedule: ["at any time"]
    • Branch name: renovate/actions-setup-go-3.x
    • Merge into: master
    • Upgrade actions/setup-go to v3

    🚸 Branch creation will be limited to maximum 2 per hour, so it doesn't swamp any CI resources or spam the project. See docs for prhourlylimit for details.


    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • "Failed to build index" errors

    We are seeing an odd issue in the AllTrails app that we are hoping you can assist us with.

    As background, our app uses Algolia to index a large amount of trail data. We have an online index and also maintain an offline mirror within the app so that users can still access data while offline. Whenever we ship a new version of the app we include an updated objects and settings file in the bundle, and on the first launch of the new version we re-initialize the mirrored index using index.buildOffline(). If the buildOffline() method fails we log an analytics event that contains the error description returned from the Algolia SDK.

    With the latest release of our app we are seeing a large number of index failures with the following error:

    HTTPError(statusCode: 500, message: Optional("Failed to build index"))

    Screen Shot 2019-05-21 at 8 55 15 AM

    We use a third party service called Embrace that logs any network issues that happen during a session. When we look at the network requests that include "algolia" in the path, we see a large number of 404s and some 403s, but no 500s.

    We would appreciate any guidance you can offer on troubleshooting this.

    We are seeing this issue on multiple iPhone device models and versions of iOS. We are using version 5.1.7 of the AlgoliaSearch-Offline-Swift pod.

    opened by matt-alltrails 9
Releases(8.16.0)
  • 8.16.0(Oct 26, 2022)

  • 8.15.1(Aug 29, 2022)

  • 8.15.0(Aug 4, 2022)

  • 8.14.0(Mar 18, 2022)

  • 8.13.4(Feb 21, 2022)

  • 8.13.3(Jan 24, 2022)

  • 8.13.2(Jan 12, 2022)

  • 8.13.1(Dec 22, 2021)

  • 8.13.0(Dec 13, 2021)

  • 8.12.0(Nov 5, 2021)

  • 8.11.0(Oct 6, 2021)

  • 8.10.0(Jul 13, 2021)

  • 8.9.0(Jul 8, 2021)

    Feat

    • Dynamic facet ordering support (#739)

    Fix

    • Resolve conflict between TimeInterval convenient methods and DispatchTimeInterval (#744)
    • Add missing virtual replicas parameter coding (#743)

    Misc

    • Rename Recommendation -> Personalization (#745)
    Source code(tar.gz)
    Source code(zip)
  • 8.8.1(Mar 3, 2021)

  • 8.8.0(Mar 2, 2021)

  • 8.7.0(Feb 17, 2021)

  • 8.6.0(Feb 3, 2021)

    Feat

    • Custom dictionaries (#717) (c3103b4)
    • Add attributesToTransliterate settings parameter (#723) (722750b)

    Fix

    • Update carthage dependencies and prebuild script (#725) (ab8a46d)
    • AB test variant fields nullability (#720) (b97fefe)

    Misc

    • Add decompoundQuery search & settings parameter (#722) (2e5fa23)
    • Add filters field to Rule condition (#721) (8d927d1)
    Source code(tar.gz)
    Source code(zip)
  • 8.5.0(Jan 18, 2021)

  • 8.4.2(Dec 21, 2020)

  • 8.4.1(Dec 18, 2020)

  • 8.4.0(Dec 17, 2020)

  • 8.3.0(Nov 23, 2020)

  • 8.2.0(Nov 3, 2020)

  • 8.1.3(Oct 27, 2020)

  • 8.1.2(Oct 6, 2020)

    • Update min iOS version for compatibility with Xcode 12 and SwiftLog dependency version (#668) Thanks @rmenezes
    • Change browse with Cursor HTTP method from GET to POST for better reliability (#671)
    • Fix SearchResponse's automaticRadius is wrong type (#673)
    • Fix incorrect coding key for sortFacetsBy search parameter value (#674)
    Source code(tar.gz)
    Source code(zip)
  • 8.1.1(Sep 17, 2020)

    • Fix infinite hosts rotation within retry strategy (#664)
    • Add explicit percent encoding for plus sign in the browse cursor, lack of which causes browse API call error
    Source code(tar.gz)
    Source code(zip)
  • 8.1.0(Aug 4, 2020)

    This minor release adds a possibility to update multiple fields of the record using partiaUpdate method with new dictionary syntax:

    index.partialUpdateObject(withID: "userAccountID", with: [
      "name": "John Doe",
      "postsCount": 2000,
      "followers": .add(value: "nightStranger51", unique: false),
      "followersCount": .increment(value: 20),
      "likes": .incrementSet(value: 15)
    ])
    
    Source code(tar.gz)
    Source code(zip)
  • 8.0.1(Jul 28, 2020)

  • 8.0.0(Jul 20, 2020)

    Meet brand new Swift API Client v8!

    Universal

    It’s a pure stand-alone Swift client so it is not tighten to any platform. In comparison with the previous version, it provides many new methods and from now can be used as a full-fledged client including server side applications.

    Provides good Results

    Each API call result is now represented by built-in Swift Result type which facilitates processing of the results returned by the API method and to dispatch them to other parts of your application.

    Codable all the things

    The interaction with API client is drastically simplified thanks to usage of built-in Encodable/Decodable protocols. Integration of Codable models existing in your project had never been easier.

    Advanced Keypaths usage

    Build API Client structures using the power of Swift keypaths

    Rich code documentation

    Each method is documented with detailed description of each parameter

    Verbosity

    The new client is verbose so it let know what’s going on while you are using the client. You won't miss if something went wrong. It’s up to you to define which level of logs you might want to see in your console. You can change it using AlgoliaSearchClient.Logger.minSeverityLevel value.

    Source code(tar.gz)
    Source code(zip)
  • 7.0.5(Jun 16, 2020)

Owner
Algolia
Open source tools for building search. Learn more at community.algolia.com
Algolia
Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI

Yogu Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI ?? Yogu is currently in development, and not actually usable yet. Please DO NOT

Beomjun Gil 5 Oct 29, 2022
Business-API - Business App an Application that show list business using the Yelp API

business-API Business App an Application that show list business using the Yelp

Edwin Niwarlangga 0 Jan 21, 2022
A PocketBase client for iOS, macOS, watchOS, and tvOS

PocketBase A pure Swift client for interfacing with a PocketBase instance. Getting Started Development Environment Easiest way to get started with Poc

Brianna Zamora 10 Dec 24, 2022
Client library for accessing Azure Storage on an iOS device

Azure Storage Client Library for iOS Overview This library is designed to help you build iOS applications that use Microsoft Azure Storage. At the mom

Microsoft Azure 81 Oct 15, 2022
Project Flat iOS is the iOS client of Agora Flat open source classroom.

Agora Flat iOS Project flat is the iOS client of Agora Flat open source classroom. 中文 Features Open sourced front-end and back-end [Flat Web][flat-web

netless 24 Dec 12, 2022
MulticoinLightClientKit - A Zcash Lightweight Client SDK for iOS

Zcash iOS Framework A Zcash Lightweight Client SDK for iOS This is an alpha buil

Pirate Chain (ARRR) 0 Aug 27, 2022
Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK

RadarCOVID iOS App Introduction Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK Prerequisites These are the tools used to bu

Radar COVID 146 Nov 24, 2022
Simple proxy in Swift for converting between HTTP and API Gateway Lambda payloads

SwiftLambdaProxy A simple proxy that can convert HTTP requests to Lambda API Gat

Jānis Kiršteins 1 Jan 3, 2022
RadioTimeKit - The Swift SDK for TuneIn RadioTimeKit is a Swift package to use the TuneIn API.

RadioTimeKit - The Swift SDK for TuneIn RadioTimeKit is a Swift package to use the TuneIn API. The goal for development was to have a Swift SDK to get

Frank Gregor 2 Jun 20, 2022
A framework that enhances HealthKit and the Fitbit API for iOS

VitoKit ?? Welcome to VitoKit... A framework that enhances HealthKit and the Fitbit API for iOS ✅ Features Wonderfully crafted animations Speedy setup

Vito 6 Nov 26, 2022
Swift SDK for Blockfrost.io API

Swift5 API client for Blockfrost Swift 5 SDK for Blockfrost.io API. Installation • Usage • API Endpoints Installation Swift package manager dependenci

blockfrost.io 10 Dec 24, 2022
Swift framework for authenticating with the Spotify API

SpotifyLogin SpotifyLogin is a Swift 5 Framework for authenticating with the Spotify API. Usage of this framework is bound under the Developer Terms o

Spotify 344 Jan 4, 2023
MpesaSDK - Swift SDK for the M-Pesa API (Mozambique)

M-Pesa SDK Swift package for M-Pesa API (Mozambique) Ready Methods/APIs C2B B2B

Algy Ali 16 Jul 29, 2022
Swiftcord - Swift wrapper for Discord's API. Maintained fork of Azoy's Sword

Swiftcord - A Discord Library for Swift Requirements macOS, Linux, iOS, watchOS,

Sketch 37 Nov 30, 2022
Unofficial Notion API SDK for iOS & macOS

NotionSwift Unofficial Notion SDK for iOS & macOS. This is still work in progress version, the module interface might change. API Documentation This l

Wojciech Chojnacki 59 Jan 8, 2023
150,000+ stickers API & SDK for iOS Apps.

English | 한국어 Stipop UI SDK for iOS Stipop SDK provides over 150,000 .png and .gif stickers that can be easily integrated into mobile app chats, comme

Stipop, Inc. 19 Dec 20, 2022
iOS SDK for the Box Content API

Box iOS SDK Getting Started Docs: https://developer.box.com/guides/mobile/ios/quick-start/ NOTE: The Box iOS SDK in Objective-C (prior to v3.0.0) has

Box 112 Dec 19, 2022
Sample iOS AR app using AR Quick Look API

ARQLSanta This is a minimal AR iOS app that uses the AR Quick Look API, displayi

Yasuhito Nagatomo 9 Aug 23, 2022
iOS SDK for access the OpenCage Geocoding API

OpenCageSDK Requirements OpenCageSDK works on iOS 9+ and requires ARC to build. It depends on the following Apple frameworks, which should already be

OpenCage GmbH 1 Jun 30, 2020