MimiCoreKit

Quick Start

MimiCoreKit is the gateway to Mimi services; providing access to key functionality such as authentication, personalization and test management. It handles all aspects of communication with the Mimi API, providing a robust framework that can be used to integrate an app into the Mimi eco-system.

Key Features

  • Robust and powerful communication framework; handling networking, caching and data models.
  • Authentication services for Mimi accounts and features.
  • Personalization service to provide preset data for sound personalization.
  • Processing interface for audio processing communication over a centralized medium.

Basics

Access to MimiCore is provided through a singelton instance.

import MimiCoreKit

let core = MimiCore.shared

To start using MimiCore you are required to have a valid API Key and API Secret.

core.start(credentials: .client(id: "YOUR_CLIENT_ID", secret: "YOUR_CLIENT_SECRET"), 
           delegate: self)

You are also required to provide a MimiCoreDelegate when starting MimiCore. This delegate is responsible for receiving and handling critical events from MimiCore that may occur.

MimiCore utilizes a layer of controllers to provide access to the raw Mimi services and data:

  • .auth: MimiAuthController - Access to authentication functions and data.
  • .test: MimiTestController - Access to test management and submission.
  • .processing: MimiProcessingController - Access to the centralized processing interface and data.
  • .configuration: MimiConfigurationController - Access to remote configuration data.

These controllers are all available at the root level of MimiCore.

For example to authenticate a user anonymously:

core.auth.authenticate(route: .anonymously) { (result) in
    switch result {
    case .success(let user):
        print("Success:\(user)")
    case .failure(let reason):
        print("Failed: \(reason)")
    }
}

Many controllers also provide observables, which can be used to observe events that occur within MimiCore. For example, to observe to events that occur in the MimiAuthController:

class AuthObservable: MimiAuthControllerObservable {

    init() {
        core.auth.observable.addObserver(self)
    }

    func authController(_ controller: MimiAuthController, didUpdate currentUser: MimiUser?, error: MimiCoreError?) {
        // User has been updated.
    }
}

Debugging

MimiCore provides detailed logging should you require to debug an issue. By default this is disabled with the exception of critical messages. This can be accessed via MimiCore.log.

import MimiCoreKit

MimiCore.shared.log.levels = [.all] // Defaults to .none

The following values are available for log levels: .none, .debug, .info, .warning, .error, .all