iOS Quickstart

Get started building collaborative augmented reality apps within a few minutes.

The Blue Vision AR Cloud iOS SDK works alongside Apple’s ARKit to enable you to place augmented reality content into a single global 3D world, shared amongst all users of your app.

The following guide will help you get started building your first shared AR iOS app. For further details, see the iOS SDK reference.

1. Download the SDK

The iOS SDK is currently accessible through our developer early access program. If you have not done so already, you can sign up here, and we will process your application shortly.

Already have a developer account? Login here to download the latest version of the iOS SDK. Follow the instructions to add the SDK to your project.

2. Generate an API key

To use the SDK, you must first generate an API key. Those already signed up to the early access program can do this through the developer’s area.

3. Start a new project

The iOS SDK works alongside Apple's ARKit and SceneKit. The fastest way to start with AR Cloud on the iOS is to create a new project from the Augmented Reality App template in Xcode. Make sure you create a Swift project with SceneKit as a Content Technology.

The AR Cloud SDK requires access to location (NSLocationWhenInUseUsageDescription) and camera (NSCameraUsageDescription).

4. Create an instance of ARCloudSession

The ARCloudSession class is responsible for ensuring your shared AR content is placed correctly in the active scene view. Internally, the class works by keeping track of the position of your device’s camera in the Blue Vision AR Cloud. The interface of ARCloudSession is similar to Apple’s AR scene view, with run() and pause() methods provided to manage the state of the session. You can add an ARCloudSession to your view controller as follows,

import UIKit
import SceneKit
import ARKit
import ARCloud

class ViewController: UIViewController, ARSCNViewDelegate {
    @IBOutlet var sceneView: ARSCNView!
    var arCloudSession: ARCloudSession!

    override func viewDidLoad() {
        sceneView.delegate = self

        // The ARCloudSession class is initialized with a
        // Blue Vision AR Cloud API key and an ARSCNView instance.
        arCloudSession = ARCloudSession(apiKey: "my-api-key", sceneView: sceneView)

    override func viewWillAppear(_ animated: Bool) {
        let configuration = ARWorldTrackingConfiguration()

        // Similarly to ARSCNView, the ARCloudSession must
        // also be started.

    override func viewWillDisappear(_ animated: Bool) {

        // Stop both the ARCloudSession and the ARSCNView.

5. Create shared content with ARCloudAnchor

Anchors represent a fixed position (and orientation) in the AR Cloud that can be shared across sessions and devices. Every anchor that you create is assigned a unique, private identifier that represents the anchor’s location in the AR Cloud world. By sharing this identifier across sessions or with other SDK users, you enable all your users to refer to precisely the same location in the world, with a typical accuracy of a few centimeters.


Once created, anchors are static, and cannot be moved. To build dynamic, shared AR experiences between multiple users, you can move your content relative to an anchor that all of the users have access to.

Each anchor is associated with a SCNNode in the active scene view, so you can add child nodes to the anchor node as usual, and the ARCloudSession will take care of keeping the content stable for you.

Creating an anchor

To create an AR Cloud anchor, you must place a SCNNode in your scene view so that it is at the desired position and orientation in your device’s local scene. You then pass this node to the running ARCloudSession, which will make a request to the Blue Vision AR Cloud to initialize a new anchor. On success, the anchor’s unique identifier will be returned, and the anchor will being being tracked by the session.

// Place a sphere one meter front of the camera.
let node = SCNNode(geometry: SCNSphere(radius: 0.1))
node.position = sceneView.pointOfView?.convertPosition(SCNVector3(0, 0, -1), to: sceneView.scene.rootNode)

// Create an anchor for the node.
arCloudSession.createAnchor(node) { (anchor, error) in
    guard let anchor = anchor else {
      print("Anchor was not created: \(error.localizedDescription)")

    // The anchor was successfully created. The
    // identifier can be shared with other users
    // to refer to the position one meter in front of
    // this device's camera.
    print("Anchor was created: \(anchor.identifier)")

Retrieving an anchor

To retrieve an anchor from AR Cloud, you first need its unique identifier. In the previous step, a snippet was provided to creating an anchor in front of the camera and print its identifier. Supposing the identifier printed were 5c2229d1-0c45-4ef9-8b17-f977a8c28086, we could load that anchor into the scene view on another user’s device by adding the identifier to the active AR Cloud session.

arCloudSession.retrieveAnchor(identifier: "5c2229d1-0c45-4ef9-8b17-f977a8c28086") { (anchor, error) in
  guard let anchor = anchor else {
    print("Anchor was not retrieved: \(error.localizedDescription)")

  // Add a sphere to the scene, one meter in front of the
  // camera for the device in the previous step.
  let node = SCNNode(geometry: SCNSphere(radius: 0.1))

Anchors are designed to remain stable so that even months later, the anchor will still be available and refer to the same position in space.

For more information, the SDK documentation is available here. If you have any questions, you can contact us.

Next steps