March 2016 update
Google has released an official iOS CardboardSDK. However, for now it's a closed source precompiled library.
iOS port of Google's CardboardSDK.
Treasure example fully running with magnetic trigger detection. Successfully tested on an iPhone 6 running iOS 8 and on a iPhone 5 running iOS 7.
It (mostly) has feature parity with Android's CardboardSDK v0.5.1.
There is a bundled sample Unity project compatible with Unity 5.0.0f4 (use other Unity versions at your own risk).
Unity\Cardboard.UnityProject folder contains the sample project based on Google's CardboardSDK-Unity plugin.
There are two ways of running the Unity project on an iOS device:
a. Pre-built Unity Xcode project
You can use the bundled pre-built Unity Xcode project, but you need to regenerate
libiPhone-lib.a, as it's too big to commit to GitHub.
This method is useful for updating the Xcode project after changing the Unity project or its Cardboard Unity scripts.
- Open the Unity project on Unity 5.0.0f4.
- Go to
File -> Build Settings, choose
Build. Choose the already existing
Unity\Cardboard.UnityProject\builds\iOSas the output folder and click on
Append. Unity should then update your current project with the needed Unity library binary without overwriting the CardboardSDK native code.
Unity\Cardboard.UnityProject\builds\iOS\Unity-iPhone.xcodeprojon Xcode and run on an iOS device (tested on Xcode 6.2).
b. Build your own Unity Xcode project
You can disregard the
Unity\Cardboard.UnityProject\builds\iOS\ folder and build your own project from scratch.
This method is useful if you want to rebuild the Unity Xcode project after updating Unity to a newer version (newer Unity versions won't let you append to an already built Xcode project).
- Open the Unity project on Unity 5.0.0f4 or later.
- Go to
File -> Build Settings, choose
Buildand save it to any folder of your choosing.
- Open the built project on Xcode.
- Add the CardboardSDK source files to the Classes group: right click on Classes and choose
Add files to "Unity-iPhone". Do not copy the CardboardSDK source, just link them at their original location by unchecking
Copy items if needed.
- Add the GLKit framework: go to the
Link Binary With Librariesand add the
- Go to Project -> Build Settings and set:
C++ Language Dialectto
- Magnetic trigger not working
- Distortion correction not working
- Update native code and Unity project to CardboardSDK v0.5.2.
- Fix Unity issues
- Provide easy way of configuring custom Cardboard devices.
- Add additional examples.
CBStereoGLViewclass allows any
UIView to be rendered to
OpenGL. You can subclass it for your app overlay (lens distortion correction is correctly applied to it). See the
TextOverlayView subclass on the Treasure example.
Avoid updating the texture on every frame as it's an expensive operation (performing
UIView animations is not a good idea).
HeadTracker can either use:
OrientationEKFclass with raw gyro and accelerometer data. Has very low latency but suffers from gyro drift (slight continuous rotation movement when stationary). This is the current Android's CardboardSDK approach.
CMDeviceMotion.attitude. Improves the gyro drift, but very noticeably worsens the latency (CoreMotion does its own EKF-like internal IMU-fusion algorithm).
CMDeviceMotion.attitudedata with Google's
OrientationEKF. Best of both worlds: low latency and low gyro drift, but uses more CPU (basically it does the IMU integration twice).
In general using
HEAD_TRACKER_MODE_CORE_MOTION_EKF is recommended.
HeadTracker.mm, you can set
#define HEAD_TRACKER_MODE to either
- Reading the Cardboard configuration from NFC has not been implemented, as there's no public NFC API available on iOS 8. Hopefully Apple will provide one on iOS 9 (only the iPhone 6/6+ or higher have an NFC sensor).
License & Contributors
CardboardSDK-iOS, as the original CardboardSDK, is available under the Apache license. See the
LICENSE file for more info.
AUTHORS.md for some of the project contributors.