Moltin iOS SDK

Moltin

CocoaPods Compatible Carthage Compatible Twitter

iOS/macOS/tvOS/watchOS SDK for the Moltin platform, written in Swift.

Requirements

  • iOS 10.0+ / macOS 10.10+ / tvOS 10.0+ / watchOS 3.0+
  • Swift 4.0+

Installation

Cocoapods

Add the following to your Podfile:

pod 'Moltin', '~> 3.0.1'

Or, quickly try out our examples:

pod try Moltin

Carthage

Add the following to your Cartfile:

github "Moltin/ios-sdk" ~> 3.0.1

Swift Package Manager

Add the following to your dependencies value in Package.swift:

dependencies: [
    .package(url: "https://github.com/moltin/ios-sdk.git", from: "3.0.1")
]

Usage

Config

The basic way to set up the Moltin SDK is to create an instance of the Moltin class with your client ID. However, if you’d like to change the locale or the URL of your Moltin instance, you can do so by passing in MoltinConfig.

let config = MoltinConfig(
clientID: ...,
scheme: ...,
host: ...,
version: ...,
locale: ...)
let moltin = Moltin(withConfiguration: config)

Or:

let config = MoltinConfig.default(
withClientID: ...,
withLocale: ...)
let moltin = Moltin(withConfiguration: config)

Making a request

let moltin = Moltin(withClientID: "<your client ID>")

moltin.product.all { result in
    switch result {
    case .success(let response):
        print(response)
    case .failure(let error):
        print(error)
    }
}

Available Resources

  • Brands
  • Carts
  • Categories
  • Collections
  • Currencies
  • Files
  • Flows
  • Fields
  • Entries
  • Products

Authentication

Authentication is handled silently for you as part of the SDK. The SDK will cache credentials to ensure that it is not making unnecessary requests.

The iOS SDK only supports Implicit authentication currently.

Filtering

Operations

  • Filter
  • Sort
  • Offset / Limt
  • Include

Filter

moltin.product.filter(operator: .eq, key: "name", value: "ProductName")

Sort

moltin.product.sort("order")
moltin.product.sort("-order")

Offset / Limit

moltin.product.limit(10).offset(20).all {
    ...
}

Include

moltin.product.include([.mainImage, .files]).all {
    ...
}

Flows

If you’ve implemented a custom field on a resource by using flows, you can cast this to a type of your choice by type-hinting your result, so long as this type conforms to Codable:

moltin.product.all { (result: Result<PaginatedResponse<[MyCustomProduct]>>) in
    switch result {
        case .success(let response):
            print(response.data) // [MyCustomProduct]
        case .failure(_):
            break
    }
}
moltin.product.get(forID: "<your ID>") { (result: Result<MyCustomProduct>) in
    switch result {
    case .success(let response):
        print(response) // MyCustomProduct
    case .failure(_):
        break
    }

We recommend ensuring that your types extend from our base types for safety, then you implement the required init(from decoder: Decoder):

class MyCustomProduct: moltin.Product {
    let author: Author

    enum ProductCodingKeys : String, CodingKey { 
        case author 
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: ProductCodingKeys.self)
        self.author = try container.decode(Author.self, forKey: .author)
        try super.init(from: decoder)
    }
}

This will allow you to add additional types as you need, but ensures the base type, such as product, is still parsed correctly.

Further Documentation

Find more general documentation on the API docs.

Communication

  • If you need help with the SDK or the platform, get in touch on the forum
  • If you found a bug with the SDK, open an issue on GitHub
  • If you have a feature request for the SDK, open an issue.
  • If you want to contribute to the SDK, submit a pull request.

License

Moltin is available under the MIT license. See the LICENSE file for more info.